tsc-ts 0.0.10 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +29 -18
- package/dist/api/compiler/ast.js +1040 -1007
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +173 -123
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +136 -91
- package/dist/api/compiler/checker-contextual.d.ts +20 -0
- package/dist/api/compiler/checker-contextual.js +175 -62
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +258 -212
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +469 -438
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -113
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +107 -89
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +210 -74
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +190 -46
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +97 -31
- package/dist/api/compiler/checker.js +149 -35
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +24 -4
- package/dist/api/compiler/compile-program.js +53 -26
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.js +7 -7
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/expr-record.d.ts +11 -0
- package/dist/api/compiler/expr-record.js +53 -0
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +10 -0
- package/dist/api/compiler/file-loader.js +138 -41
- package/dist/api/compiler/identifier-name.d.ts +9 -0
- package/dist/api/compiler/identifier-name.js +10 -0
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +27 -25
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parser.d.ts +42 -20
- package/dist/api/compiler/parser.js +318 -224
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +3 -1
- package/dist/api/compiler/printer/emit-context.js +16 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +6 -3
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +1 -0
- package/dist/api/compiler/printer/printer.js +306 -283
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +8 -2
- package/dist/api/compiler/program-checker.js +84 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +2 -0
- package/dist/api/compiler/program.js +69 -57
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +337 -180
- package/dist/api/compiler/reparser.js +64 -59
- package/dist/api/compiler/scanner.d.ts +27 -2
- package/dist/api/compiler/scanner.js +181 -150
- package/dist/api/compiler/shared-results.d.ts +696 -0
- package/dist/api/compiler/shared-results.js +2905 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +22 -13
- package/dist/api/compiler/symbol.js +15 -1
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +307 -239
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +74 -38
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/cgroup.ts +157 -0
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +80 -25
- package/src/compiler/checker-contextual.ts +110 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +95 -47
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +133 -60
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -87
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +28 -5
- package/src/compiler/checker-members.ts +197 -55
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +173 -35
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +175 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +59 -25
- package/src/compiler/decoder.ts +15 -5
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/doctor-report.ts +133 -0
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/expr-record.ts +59 -0
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +139 -32
- package/src/compiler/help.ts +10 -14
- package/src/compiler/identifier-name.ts +13 -0
- package/src/compiler/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +7 -3
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +543 -147
- package/src/compiler/parallel-emit.ts +4 -4
- package/src/compiler/parser.ts +166 -47
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +16 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +7 -3
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +39 -16
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +53 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +13 -1
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +233 -77
- package/src/compiler/reparser.ts +14 -5
- package/src/compiler/run-config.ts +1383 -0
- package/src/compiler/run-record-read.ts +87 -0
- package/src/compiler/run-records.ts +575 -0
- package/src/compiler/scanner.ts +166 -120
- package/src/compiler/shared-results.ts +3144 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +31 -14
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +22 -3
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +136 -49
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +67 -6
- package/src/compiler/tsc-cli.ts +35 -4
- package/src/compiler/tsc-compile.ts +220 -10
- package/src/compiler/tsc-watch.ts +97 -47
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
package/src/compiler/scanner.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
isWhiteSpaceSingleLine,
|
|
14
14
|
} from './character-codes.js';
|
|
15
15
|
import { Diagnostics } from './diagnostic-messages.js';
|
|
16
|
+
import { IdentifierName } from './identifier-name.js';
|
|
16
17
|
import type { DiagnosticMessage } from './diagnostics.js';
|
|
17
18
|
import { parsePseudoBigInt } from './pseudo-bigint.js';
|
|
18
19
|
import {
|
|
@@ -98,6 +99,7 @@ const textToKeyword: Map<string, SyntaxKind> = new Map<string, SyntaxKind>([
|
|
|
98
99
|
['return', SyntaxKind.ReturnKeyword],
|
|
99
100
|
['satisfies', SyntaxKind.SatisfiesKeyword],
|
|
100
101
|
['set', SyntaxKind.SetKeyword],
|
|
102
|
+
['source', SyntaxKind.SourceKeyword],
|
|
101
103
|
['static', SyntaxKind.StaticKeyword],
|
|
102
104
|
['string', SyntaxKind.StringKeyword],
|
|
103
105
|
['super', SyntaxKind.SuperKeyword],
|
|
@@ -357,59 +359,60 @@ function finishHash(hash: number): number {
|
|
|
357
359
|
return hash ^ (hash >>> 15);
|
|
358
360
|
}
|
|
359
361
|
|
|
360
|
-
/**
|
|
362
|
+
/**
|
|
363
|
+
* Names for ranges of one text, keyed by their code units: equal identifiers share one
|
|
364
|
+
* `IdentifierName`.
|
|
365
|
+
*/
|
|
361
366
|
class IdentifierTable {
|
|
362
|
-
private text: string;
|
|
363
367
|
// Pairs of (entry index + 1, hash) per slot, (0, 0) when empty; linear probing.
|
|
364
368
|
private slots: Int32Array;
|
|
365
369
|
// Each entry's length in code units.
|
|
366
370
|
private lengths: Int32Array;
|
|
367
|
-
private
|
|
371
|
+
private names: IdentifierName[];
|
|
368
372
|
private count: number;
|
|
369
|
-
// Per entry: 1 once its
|
|
373
|
+
// Per entry: 1 once its name was recorded among the file's identifier texts (`markRecorded`).
|
|
370
374
|
private recorded: Uint8Array;
|
|
371
|
-
// The entry the last `intern` returned.
|
|
372
|
-
private lastEntry: number;
|
|
373
375
|
|
|
374
|
-
constructor(
|
|
375
|
-
this.text = text;
|
|
376
|
+
constructor() {
|
|
376
377
|
this.slots = new Int32Array(512);
|
|
377
378
|
this.lengths = new Int32Array(128);
|
|
378
|
-
this.
|
|
379
|
+
this.names = [];
|
|
379
380
|
this.count = 0;
|
|
380
381
|
this.recorded = new Uint8Array(128);
|
|
381
|
-
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/** Empties the table for a new text. */
|
|
385
|
+
clear(): void {
|
|
386
|
+
if (this.count === 0) return;
|
|
387
|
+
this.slots.fill(0);
|
|
388
|
+
this.names.length = 0;
|
|
389
|
+
this.recorded.fill(0, 0, this.count);
|
|
390
|
+
this.count = 0;
|
|
382
391
|
}
|
|
383
392
|
|
|
384
393
|
/**
|
|
385
|
-
* Whether `text`,
|
|
386
|
-
* texts; marks it recorded. Texts the table doesn't know are
|
|
394
|
+
* Whether `text`, the text of the entry `entry` that `intern` returned (-1 for none), still needs
|
|
395
|
+
* recording among the file's identifier texts; marks it recorded. Texts the table doesn't know are
|
|
396
|
+
* always recorded.
|
|
387
397
|
*/
|
|
388
|
-
markRecorded(text: string): boolean {
|
|
389
|
-
|
|
390
|
-
if (entry < 0 || this.texts[entry] !== text) return true;
|
|
398
|
+
markRecorded(entry: number, text: string): boolean {
|
|
399
|
+
if (entry < 0 || this.names[entry]!.text !== text) return true;
|
|
391
400
|
if (this.recorded[entry] !== 0) return false;
|
|
392
401
|
this.recorded[entry] = 1;
|
|
393
402
|
return true;
|
|
394
403
|
}
|
|
395
404
|
|
|
396
|
-
/**
|
|
397
|
-
|
|
398
|
-
this.
|
|
399
|
-
if (this.count === 0) return;
|
|
400
|
-
this.slots.fill(0);
|
|
401
|
-
this.recorded.fill(0, 0, this.count);
|
|
402
|
-
this.texts.length = 0;
|
|
403
|
-
this.count = 0;
|
|
404
|
-
this.lastEntry = -1;
|
|
405
|
+
/** The name of the entry `intern` returned. */
|
|
406
|
+
name(entry: number): IdentifierName {
|
|
407
|
+
return this.names[entry]!;
|
|
405
408
|
}
|
|
406
409
|
|
|
407
410
|
/**
|
|
408
|
-
* `text.substring(start, end)`,
|
|
409
|
-
* A candidate of the same hash and length is compared with `startsWith`, which natively
|
|
410
|
-
* the bytes of both strings at once.
|
|
411
|
+
* The entry of `text.substring(start, end)`, added when the table has no equal range; `hash` is its
|
|
412
|
+
* `rangeHash`. A candidate of the same hash and length is compared with `startsWith`, which natively
|
|
413
|
+
* compares the bytes of both strings at once.
|
|
411
414
|
*/
|
|
412
|
-
intern(start: number, end: number, hash: number):
|
|
415
|
+
intern(text: string, start: number, end: number, hash: number): number {
|
|
413
416
|
start = start | 0;
|
|
414
417
|
end = end | 0;
|
|
415
418
|
hash = hash | 0;
|
|
@@ -421,15 +424,10 @@ class IdentifierTable {
|
|
|
421
424
|
const entry = slots[(slot * 2) | 0] | 0;
|
|
422
425
|
if (entry === 0) break;
|
|
423
426
|
if ((slots[(slot * 2 + 1) | 0] | 0) === hash && (this.lengths[(entry - 1) | 0] | 0) === length) {
|
|
424
|
-
|
|
425
|
-
if (this.text.startsWith(candidate, start)) {
|
|
426
|
-
this.lastEntry = (entry - 1) | 0;
|
|
427
|
-
return candidate;
|
|
428
|
-
}
|
|
427
|
+
if (text.startsWith(this.names[(entry - 1) | 0]!.text, start)) return (entry - 1) | 0;
|
|
429
428
|
}
|
|
430
429
|
slot = (slot + 1) & mask;
|
|
431
430
|
}
|
|
432
|
-
const value = this.text.substring(start, end);
|
|
433
431
|
const index = this.count | 0;
|
|
434
432
|
if (index === this.lengths.length) {
|
|
435
433
|
const lengths = new Int32Array(index * 2);
|
|
@@ -440,13 +438,12 @@ class IdentifierTable {
|
|
|
440
438
|
this.recorded = recorded;
|
|
441
439
|
}
|
|
442
440
|
this.lengths[index] = length;
|
|
443
|
-
this.
|
|
441
|
+
this.names.push(new IdentifierName(text.substring(start, end)));
|
|
444
442
|
this.count = (index + 1) | 0;
|
|
445
|
-
this.lastEntry = index;
|
|
446
443
|
slots[(slot * 2) | 0] = (index + 1) | 0;
|
|
447
444
|
slots[(slot * 2 + 1) | 0] = hash;
|
|
448
445
|
if (this.count * 2 > mask + 1) this.slots = rehash(slots);
|
|
449
|
-
return
|
|
446
|
+
return index;
|
|
450
447
|
}
|
|
451
448
|
}
|
|
452
449
|
|
|
@@ -618,6 +615,8 @@ export class Scanner {
|
|
|
618
615
|
// so identifiers and keywords don't allocate until their value is read.
|
|
619
616
|
/** @internal */ tokenValue: string;
|
|
620
617
|
/** @internal */ valueStart: number;
|
|
618
|
+
// The name `getIdentifierValue` last interned, whose text `tokenValue` then holds.
|
|
619
|
+
private tokenName: IdentifierName | undefined;
|
|
621
620
|
/** @internal */ valueEnd: number;
|
|
622
621
|
// `rangeHash` of `chars[hashStart, hashEnd)`, which the ASCII identifier scan computes as it goes.
|
|
623
622
|
private valueHash: number;
|
|
@@ -628,6 +627,8 @@ export class Scanner {
|
|
|
628
627
|
// The code units zeroed by `setTextEnd`.
|
|
629
628
|
private readonly cutUnits: Uint16Array;
|
|
630
629
|
private readonly identifiers: IdentifierTable;
|
|
630
|
+
// The entry `getIdentifierValue` last interned, -1 for none.
|
|
631
|
+
private lastEntry: number;
|
|
631
632
|
// With code units on demand: per block of `unitBlockSize` code units, 1 once `chars` holds them
|
|
632
633
|
// (`loadUnits`); `chars` is zero elsewhere.
|
|
633
634
|
private loadedBlocks: Uint8Array | undefined;
|
|
@@ -666,6 +667,7 @@ export class Scanner {
|
|
|
666
667
|
this.tokenFlags = TokenFlags.None;
|
|
667
668
|
this.tokenValue = '';
|
|
668
669
|
this.valueStart = -1;
|
|
670
|
+
this.tokenName = undefined;
|
|
669
671
|
this.valueEnd = -1;
|
|
670
672
|
this.valueHash = 0;
|
|
671
673
|
this.hashStart = -1;
|
|
@@ -673,7 +675,8 @@ export class Scanner {
|
|
|
673
675
|
this.commentDirectives = [];
|
|
674
676
|
this.skipJSDocLeadingAsterisks = 0;
|
|
675
677
|
this.cutUnits = new Uint16Array(4);
|
|
676
|
-
this.identifiers = new IdentifierTable(
|
|
678
|
+
this.identifiers = new IdentifierTable();
|
|
679
|
+
this.lastEntry = -1;
|
|
677
680
|
this.textKind = TextKind.Unknown;
|
|
678
681
|
this.lineFeedFrom = -1;
|
|
679
682
|
this.lineFeedAt = -1;
|
|
@@ -686,7 +689,8 @@ export class Scanner {
|
|
|
686
689
|
this.text = text;
|
|
687
690
|
this.chars = toCodeUnits(text);
|
|
688
691
|
this.loadedBlocks = undefined;
|
|
689
|
-
this.identifiers.
|
|
692
|
+
this.identifiers.clear();
|
|
693
|
+
this.lastEntry = -1;
|
|
690
694
|
this.textKind = TextKind.Unknown;
|
|
691
695
|
this.lineFeedFrom = -1;
|
|
692
696
|
this.lineFeedAt = -1;
|
|
@@ -819,7 +823,7 @@ export class Scanner {
|
|
|
819
823
|
* file to be recorded; files record each identifier text once.
|
|
820
824
|
*/
|
|
821
825
|
recordIdentifierValue(text: string): boolean {
|
|
822
|
-
return this.identifiers.markRecorded(text);
|
|
826
|
+
return this.identifiers.markRecorded(this.lastEntry, text);
|
|
823
827
|
}
|
|
824
828
|
|
|
825
829
|
/** @internal Like `getTokenValue`, but identifiers with the same text share one string. */
|
|
@@ -829,12 +833,25 @@ export class Scanner {
|
|
|
829
833
|
const end = this.valueEnd;
|
|
830
834
|
const hash =
|
|
831
835
|
start === this.hashStart && end === this.hashEnd ? this.valueHash : rangeHash(this.chars, start, end);
|
|
832
|
-
|
|
836
|
+
const entry = this.identifiers.intern(this.text, start, end, hash);
|
|
837
|
+
this.lastEntry = entry;
|
|
838
|
+
this.tokenName = this.identifiers.name(entry);
|
|
839
|
+
this.tokenValue = this.tokenName.text;
|
|
833
840
|
this.valueStart = -1;
|
|
834
841
|
}
|
|
835
842
|
return this.tokenValue;
|
|
836
843
|
}
|
|
837
844
|
|
|
845
|
+
/**
|
|
846
|
+
* The identifier value as a name that identifiers with the same text share, after
|
|
847
|
+
* `getIdentifierValue`; a cooked value (with escapes) gets a name of its own.
|
|
848
|
+
*/
|
|
849
|
+
getIdentifierName(): IdentifierName {
|
|
850
|
+
const name = this.tokenName;
|
|
851
|
+
if (name !== undefined && name.text === this.tokenValue) return name;
|
|
852
|
+
return new IdentifierName(this.tokenValue);
|
|
853
|
+
}
|
|
854
|
+
|
|
838
855
|
getCommentDirectives(): readonly CommentDirective[] {
|
|
839
856
|
return this.commentDirectives;
|
|
840
857
|
}
|
|
@@ -1316,15 +1333,10 @@ export class Scanner {
|
|
|
1316
1333
|
case CharacterCodes.at:
|
|
1317
1334
|
this.pos = (this.pos + 1) | 0;
|
|
1318
1335
|
return (this.token = SyntaxKind.AtToken);
|
|
1319
|
-
case CharacterCodes.backslash:
|
|
1320
|
-
|
|
1321
|
-
if (codePoint >= 0 && isIdentifierStart(codePoint)) {
|
|
1322
|
-
const head = String.fromCodePoint(this.scanUnicodeEscape(true));
|
|
1323
|
-
this.setValue(head + this.scanIdentifierParts());
|
|
1336
|
+
case CharacterCodes.backslash:
|
|
1337
|
+
if (this.scanIdentifier(0, IdentifierVariant.Standard))
|
|
1324
1338
|
return (this.token = getIdentifierToken(this.tokenValue));
|
|
1325
|
-
}
|
|
1326
1339
|
return this.scanInvalidCharacter();
|
|
1327
|
-
}
|
|
1328
1340
|
case CharacterCodes.hash:
|
|
1329
1341
|
if ((chars[this.pos + 1] | 0) === CharacterCodes.exclamation) {
|
|
1330
1342
|
if (this.pos === 0) {
|
|
@@ -1332,27 +1344,17 @@ export class Scanner {
|
|
|
1332
1344
|
continue;
|
|
1333
1345
|
}
|
|
1334
1346
|
this.errorAt(Diagnostics.X_can_only_be_used_at_the_start_of_a_file, this.pos, 2, noArgs);
|
|
1335
|
-
this.pos = (this.pos +
|
|
1347
|
+
this.pos = (this.pos + 2) | 0;
|
|
1336
1348
|
return (this.token = SyntaxKind.Unknown);
|
|
1337
1349
|
}
|
|
1338
|
-
if (
|
|
1339
|
-
this.pos = (this.pos + 1) | 0;
|
|
1340
|
-
const codePoint = this.peekUnicodeEscape();
|
|
1341
|
-
if (codePoint >= 0 && isIdentifierStart(codePoint)) {
|
|
1342
|
-
const head = '#' + String.fromCodePoint(this.scanUnicodeEscape(true));
|
|
1343
|
-
this.setValue(head + this.scanIdentifierParts());
|
|
1344
|
-
return (this.token = SyntaxKind.PrivateIdentifier);
|
|
1345
|
-
}
|
|
1346
|
-
this.pos = (this.pos - 1) | 0;
|
|
1347
|
-
}
|
|
1348
|
-
if (!this.scanIdentifier(1)) {
|
|
1350
|
+
if (!this.scanIdentifier(1, IdentifierVariant.Standard)) {
|
|
1349
1351
|
this.errorAt(Diagnostics.Invalid_character, this.pos - 1, 1, noArgs);
|
|
1350
1352
|
this.setValue('#');
|
|
1351
1353
|
}
|
|
1352
1354
|
return (this.token = SyntaxKind.PrivateIdentifier);
|
|
1353
1355
|
default: {
|
|
1354
1356
|
if (ch < 0) return (this.token = SyntaxKind.EndOfFile);
|
|
1355
|
-
if (this.scanIdentifier(0)) return (this.token = this.identifierKind());
|
|
1357
|
+
if (this.scanIdentifier(0, IdentifierVariant.Standard)) return (this.token = this.identifierKind());
|
|
1356
1358
|
const codePoint = this.codePoint();
|
|
1357
1359
|
if (codePoint === CharacterCodes.replacementCharacter) {
|
|
1358
1360
|
this.errorAt(Diagnostics.File_appears_to_be_binary, 0, 0, noArgs);
|
|
@@ -1534,14 +1536,36 @@ export class Scanner {
|
|
|
1534
1536
|
this.commentDirectives.push(new CommentDirective(start, end, kind));
|
|
1535
1537
|
}
|
|
1536
1538
|
|
|
1537
|
-
/**
|
|
1538
|
-
|
|
1539
|
+
/**
|
|
1540
|
+
* @internal Scans an identifier after `prefixLength` units; sets the token value. `variant`
|
|
1541
|
+
* decides the identifier parts: JSX and JSDoc names also take `-`, and regular expression group
|
|
1542
|
+
* names take a surrogate pair written as two `\u` escapes.
|
|
1543
|
+
*/
|
|
1544
|
+
scanIdentifier(prefixLength: number, variant: IdentifierVariant): boolean {
|
|
1539
1545
|
const text = this.text;
|
|
1540
1546
|
const chars = this.chars;
|
|
1541
1547
|
const start = this.pos;
|
|
1542
1548
|
this.pos = (this.pos + prefixLength) | 0;
|
|
1549
|
+
const identifierStart = this.pos;
|
|
1543
1550
|
let ch = this.char();
|
|
1544
|
-
if (
|
|
1551
|
+
if (variant === IdentifierVariant.JSX) {
|
|
1552
|
+
if (isASCIILetter(ch) || ch === CharacterCodes._ || ch === CharacterCodes.$) {
|
|
1553
|
+
// ASCII names, as the general loop below scans them.
|
|
1554
|
+
let pos = (this.pos + 1) | 0;
|
|
1555
|
+
const end = this.end;
|
|
1556
|
+
while (pos < end) {
|
|
1557
|
+
const c = chars[pos] | 0;
|
|
1558
|
+
if (!isASCIIIdentifierPart(c) && c !== CharacterCodes.minus) break;
|
|
1559
|
+
pos = (pos + 1) | 0;
|
|
1560
|
+
}
|
|
1561
|
+
const next = pos < end ? chars[pos] | 0 : CharacterCodes.EOF;
|
|
1562
|
+
if (next <= CharacterCodes.maxAsciiCharacter && next !== CharacterCodes.backslash) {
|
|
1563
|
+
this.pos = pos;
|
|
1564
|
+
this.setValueSlice(start, pos);
|
|
1565
|
+
return true;
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
} else if (isASCIILetter(ch) || ch === CharacterCodes._ || ch === CharacterCodes.$) {
|
|
1545
1569
|
// Fast path for ASCII identifiers, which also hashes the units for interning.
|
|
1546
1570
|
let pos = (this.pos + 1) | 0;
|
|
1547
1571
|
const end = this.end;
|
|
@@ -1563,33 +1587,47 @@ export class Scanner {
|
|
|
1563
1587
|
this.hashEnd = pos;
|
|
1564
1588
|
return true;
|
|
1565
1589
|
}
|
|
1566
|
-
this.pos = (start + prefixLength) | 0;
|
|
1567
1590
|
}
|
|
1591
|
+
this.pos = identifierStart;
|
|
1592
|
+
const languageVariant = variant === IdentifierVariant.JSX ? LanguageVariant.JSX : LanguageVariant.Standard;
|
|
1568
1593
|
ch = this.codePoint();
|
|
1569
|
-
if (
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1594
|
+
if (isIdentifierStart(ch)) {
|
|
1595
|
+
do {
|
|
1596
|
+
this.pos = (this.pos + charSize(ch)) | 0;
|
|
1597
|
+
ch = this.codePoint();
|
|
1598
|
+
} while (isIdentifierPart(ch, languageVariant));
|
|
1599
|
+
if (ch === CharacterCodes.backslash)
|
|
1600
|
+
this.setValue(text.substring(start, this.pos) + this.scanIdentifierParts(variant));
|
|
1601
|
+
else this.setValueSlice(start, this.pos);
|
|
1602
|
+
return true;
|
|
1603
|
+
}
|
|
1604
|
+
if (ch === CharacterCodes.backslash) {
|
|
1605
|
+
const escaped = this.scanIdentifierEscape(true, variant);
|
|
1606
|
+
if (escaped >= 0) {
|
|
1607
|
+
const head = text.substring(start, identifierStart) + String.fromCodePoint(escaped);
|
|
1608
|
+
this.setValue(head + this.scanIdentifierParts(variant));
|
|
1609
|
+
return true;
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
return false;
|
|
1577
1613
|
}
|
|
1578
1614
|
|
|
1579
1615
|
/** Scans identifier parts including `\u` escapes and returns their cooked text. */
|
|
1580
|
-
private scanIdentifierParts(): string {
|
|
1616
|
+
private scanIdentifierParts(variant: IdentifierVariant): string {
|
|
1617
|
+
const languageVariant = variant === IdentifierVariant.JSX ? LanguageVariant.JSX : LanguageVariant.Standard;
|
|
1581
1618
|
let result = '';
|
|
1582
1619
|
let start = this.pos;
|
|
1583
1620
|
for (;;) {
|
|
1584
1621
|
const ch = this.codePoint();
|
|
1585
|
-
if (isIdentifierPart(ch)) {
|
|
1622
|
+
if (isIdentifierPart(ch, languageVariant)) {
|
|
1586
1623
|
this.pos = (this.pos + charSize(ch)) | 0;
|
|
1587
1624
|
continue;
|
|
1588
1625
|
}
|
|
1589
1626
|
if (ch === CharacterCodes.backslash) {
|
|
1590
|
-
const
|
|
1591
|
-
|
|
1592
|
-
|
|
1627
|
+
const escapeStart = this.pos;
|
|
1628
|
+
const escaped = this.scanIdentifierEscape(false, variant);
|
|
1629
|
+
if (escaped >= 0) {
|
|
1630
|
+
result += this.text.substring(start, escapeStart) + String.fromCodePoint(escaped);
|
|
1593
1631
|
start = this.pos;
|
|
1594
1632
|
continue;
|
|
1595
1633
|
}
|
|
@@ -1599,6 +1637,39 @@ export class Scanner {
|
|
|
1599
1637
|
return start === this.pos ? result : result + this.text.substring(start, this.pos);
|
|
1600
1638
|
}
|
|
1601
1639
|
|
|
1640
|
+
/**
|
|
1641
|
+
* At `\`: scans a `\u` escape of an identifier start (`isStart`) or part and returns its code point,
|
|
1642
|
+
* or returns -1 and leaves the scanner unchanged.
|
|
1643
|
+
*/
|
|
1644
|
+
private scanIdentifierEscape(isStart: boolean, variant: IdentifierVariant): number {
|
|
1645
|
+
const languageVariant = variant === IdentifierVariant.JSX ? LanguageVariant.JSX : LanguageVariant.Standard;
|
|
1646
|
+
const escaped = this.peekUnicodeEscape();
|
|
1647
|
+
if (escaped >= 0 && (isStart ? isIdentifierStart(escaped) : isIdentifierPart(escaped, languageVariant)))
|
|
1648
|
+
return this.scanUnicodeEscape(true);
|
|
1649
|
+
// Group names in regular expressions, in Unicode mode or not, take `\u` HexLeadSurrogate `\u`
|
|
1650
|
+
// HexTrailSurrogate as part of RegExpIdentifierName (tc39/ecma262#1869), but not the braced form.
|
|
1651
|
+
if (
|
|
1652
|
+
variant === IdentifierVariant.RegExpGroupName &&
|
|
1653
|
+
this.peek(2) !== CharacterCodes.openBrace &&
|
|
1654
|
+
escaped >= 0xd800 &&
|
|
1655
|
+
escaped <= 0xdbff
|
|
1656
|
+
) {
|
|
1657
|
+
const pos = this.pos;
|
|
1658
|
+
const flags = this.tokenFlags;
|
|
1659
|
+
this.scanUnicodeEscape(false);
|
|
1660
|
+
if (this.peek(2) !== CharacterCodes.openBrace) {
|
|
1661
|
+
const low = this.scanLowSurrogateEscape();
|
|
1662
|
+
if (low >= 0) {
|
|
1663
|
+
const codePoint = (escaped - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;
|
|
1664
|
+
if (isStart ? isIdentifierStart(codePoint) : isIdentifierPart(codePoint, languageVariant)) return codePoint;
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
this.pos = pos | 0;
|
|
1668
|
+
this.tokenFlags = flags;
|
|
1669
|
+
}
|
|
1670
|
+
return -1;
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1602
1673
|
private scanInvalidCharacter(): SyntaxKind {
|
|
1603
1674
|
const size = charSize(this.codePoint());
|
|
1604
1675
|
this.errorAt(Diagnostics.Invalid_character, this.pos, size, noArgs);
|
|
@@ -2080,7 +2151,7 @@ export class Scanner {
|
|
|
2080
2151
|
}
|
|
2081
2152
|
if (isIdentifierStart(this.codePoint())) {
|
|
2082
2153
|
const idStart = this.pos;
|
|
2083
|
-
const id = this.scanIdentifierParts();
|
|
2154
|
+
const id = this.scanIdentifierParts(IdentifierVariant.Standard);
|
|
2084
2155
|
if (result !== SyntaxKind.BigIntLiteral && id.length === 1 && this.chars[idStart] === CharacterCodes.n) {
|
|
2085
2156
|
if ((this.tokenFlags & TokenFlags.Scientific) !== 0) {
|
|
2086
2157
|
this.errorAt(Diagnostics.A_bigint_literal_cannot_use_exponential_notation, start, this.pos - start, noArgs);
|
|
@@ -2472,17 +2543,8 @@ export class Scanner {
|
|
|
2472
2543
|
/** Extends an identifier or keyword with `-` and further parts, as JSX names allow. */
|
|
2473
2544
|
scanJsxIdentifier(): SyntaxKind {
|
|
2474
2545
|
if (!tokenIsIdentifierOrKeyword(this.token)) return this.token;
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
if (this.char() === CharacterCodes.minus) {
|
|
2478
|
-
value += '-';
|
|
2479
|
-
this.pos = (this.pos + 1) | 0;
|
|
2480
|
-
continue;
|
|
2481
|
-
}
|
|
2482
|
-
const pos = this.pos;
|
|
2483
|
-
value += this.scanIdentifierParts();
|
|
2484
|
-
if (this.pos === pos) break;
|
|
2485
|
-
}
|
|
2546
|
+
// An identifier or keyword is scanned: append a following `-` and the rest of the name.
|
|
2547
|
+
const value = this.getTokenValue() + this.scanIdentifierParts(IdentifierVariant.JSX);
|
|
2486
2548
|
this.setValue(value);
|
|
2487
2549
|
return (this.token = getIdentifierToken(value));
|
|
2488
2550
|
}
|
|
@@ -2556,7 +2618,6 @@ export class Scanner {
|
|
|
2556
2618
|
scanJSDocToken(): SyntaxKind {
|
|
2557
2619
|
this.fullStartPos = this.pos | 0;
|
|
2558
2620
|
this.tokenFlags = TokenFlags.None;
|
|
2559
|
-
const text = this.text;
|
|
2560
2621
|
const chars = this.chars;
|
|
2561
2622
|
if (this.pos >= this.end) return (this.token = SyntaxKind.EndOfFile);
|
|
2562
2623
|
this.tokenStart = this.pos | 0;
|
|
@@ -2605,39 +2666,24 @@ export class Scanner {
|
|
|
2605
2666
|
return (this.token = SyntaxKind.BacktickToken);
|
|
2606
2667
|
case CharacterCodes.hash:
|
|
2607
2668
|
return (this.token = SyntaxKind.HashToken);
|
|
2608
|
-
case CharacterCodes.backslash: {
|
|
2609
|
-
this.pos = (this.pos - 1) | 0;
|
|
2610
|
-
const codePoint = this.peekUnicodeEscape();
|
|
2611
|
-
if (codePoint >= 0 && isIdentifierStart(codePoint)) {
|
|
2612
|
-
const head = String.fromCodePoint(this.scanUnicodeEscape(true));
|
|
2613
|
-
this.setValue(head + this.scanIdentifierParts());
|
|
2614
|
-
return (this.token = getIdentifierToken(this.tokenValue));
|
|
2615
|
-
}
|
|
2616
|
-
this.pos = (this.pos + 1) | 0;
|
|
2617
|
-
return (this.token = SyntaxKind.Unknown);
|
|
2618
|
-
}
|
|
2619
2669
|
}
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
last = unit;
|
|
2626
|
-
if (!isASCIIIdentifierPart(unit) && unit !== CharacterCodes.minus) break;
|
|
2627
|
-
this.pos = (this.pos + 1) | 0;
|
|
2628
|
-
continue;
|
|
2629
|
-
}
|
|
2630
|
-
last = this.codePointAt(this.pos, this.end);
|
|
2631
|
-
if (!isIdentifierPart(last) && last !== CharacterCodes.minus) break;
|
|
2632
|
-
this.pos = (this.pos + charSize(last)) | 0;
|
|
2633
|
-
}
|
|
2634
|
-
if (last === CharacterCodes.backslash)
|
|
2635
|
-
this.setValue(text.substring(this.tokenStart, this.pos) + this.scanIdentifierParts());
|
|
2636
|
-
else this.setValueSlice(this.tokenStart, this.pos);
|
|
2637
|
-
return (this.token = this.identifierKind());
|
|
2670
|
+
// JSDoc names take `-`, as JSX names do.
|
|
2671
|
+
this.pos = this.tokenStart;
|
|
2672
|
+
if (this.scanIdentifier(0, IdentifierVariant.JSX)) return (this.token = this.identifierKind());
|
|
2673
|
+
this.pos = (this.tokenStart + charSize(ch)) | 0;
|
|
2674
|
+
return (this.token = SyntaxKind.Unknown);
|
|
2638
2675
|
}
|
|
2639
2676
|
}
|
|
2640
2677
|
|
|
2678
|
+
/** Which characters an identifier scan takes after its start. */
|
|
2679
|
+
export const enum IdentifierVariant {
|
|
2680
|
+
Standard,
|
|
2681
|
+
/** JSX and JSDoc names, which take `-`. */
|
|
2682
|
+
JSX,
|
|
2683
|
+
/** Regular expression group names, which take a surrogate pair written as two `\u` escapes. */
|
|
2684
|
+
RegExpGroupName,
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2641
2687
|
const mergeConflictMarkerLength = 7;
|
|
2642
2688
|
|
|
2643
2689
|
function utf8Length(ch: number): number {
|