tsc-ts 0.0.10 → 0.1.0
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 +20 -15
- package/dist/api/compiler/ast.js +1023 -995
- 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 +134 -90
- package/dist/api/compiler/checker-contextual.js +64 -61
- 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 +244 -211
- 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 +105 -88
- 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 +137 -34
- 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 +93 -31
- package/dist/api/compiler/checker.js +143 -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 +19 -4
- package/dist/api/compiler/compile-program.js +45 -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/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/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +23 -23
- 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 +40 -19
- package/dist/api/compiler/parser.js +308 -216
- 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 +3 -1
- 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 +303 -281
- 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 +60 -56
- package/dist/api/compiler/scanner.d.ts +19 -2
- package/dist/api/compiler/scanner.js +123 -108
- package/dist/api/compiler/shared-results.d.ts +463 -0
- package/dist/api/compiler/shared-results.js +2128 -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 +305 -238
- 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 +55 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +78 -24
- package/src/compiler/checker-contextual.ts +6 -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 +79 -46
- 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 +26 -4
- 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 +120 -21
- 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 +168 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +51 -25
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- 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/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +3 -1
- 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 +197 -8
- package/src/compiler/parallel-emit.ts +1 -1
- package/src/compiler/parser.ts +156 -39
- 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 +4 -1
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +35 -14
- 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 +7 -2
- package/src/compiler/scanner.ts +109 -79
- package/src/compiler/shared-results.ts +2414 -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 +19 -2
- 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 +134 -48
- 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 +3 -0
- package/src/compiler/tsc-cli.ts +2 -0
- package/src/compiler/tsc-compile.ts +7 -2
- package/src/compiler/tsc-watch.ts +74 -45
- 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
|
@@ -52,6 +52,17 @@ import { lastSymbolIdValue } from './symbol.js';
|
|
|
52
52
|
import { shareMergedGlobals } from './checker-symbols.js';
|
|
53
53
|
import { readFileSync } from 'node:fs';
|
|
54
54
|
import { availableParallelism, totalmem } from 'node:os';
|
|
55
|
+
import {
|
|
56
|
+
forbiddenWords,
|
|
57
|
+
isForbidden,
|
|
58
|
+
maxSharingCheckers,
|
|
59
|
+
numberLogSize,
|
|
60
|
+
recordTableSize,
|
|
61
|
+
resultTableSize,
|
|
62
|
+
shareThreads,
|
|
63
|
+
stringLogSize,
|
|
64
|
+
type ThreadSharingData,
|
|
65
|
+
} from './shared-results.js';
|
|
55
66
|
|
|
56
67
|
/** With TSC_TS_CHECKERS_TRACE: the process's resident and peak resident set in MB (Linux), else 0. */
|
|
57
68
|
export function residentMB(): number[] {
|
|
@@ -73,7 +84,8 @@ export function residentMB(): number[] {
|
|
|
73
84
|
* the main thread emits the program (`checkersEmit`). `emitKinds`, by file index, is what the emit of
|
|
74
85
|
* each file includes (an `EmitOnly`, or -1 for none) where not every output of every file is emitted
|
|
75
86
|
* (an incremental program's rebuild); `undefined` for all of them. `units` are the statement ranges of
|
|
76
|
-
* declaration files the order has positions for (`CheckPlan.units`).
|
|
87
|
+
* declaration files the order has positions for (`CheckPlan.units`). `globalsInFileDiagnostics` is the main
|
|
88
|
+
* thread's `CheckedProgram.globalsInFileDiagnostics`.
|
|
77
89
|
*/
|
|
78
90
|
export type CheckerSpawn = (
|
|
79
91
|
program: Program | undefined,
|
|
@@ -87,6 +99,8 @@ export type CheckerSpawn = (
|
|
|
87
99
|
emitKinds: number[] | undefined,
|
|
88
100
|
checking: boolean,
|
|
89
101
|
units: number[],
|
|
102
|
+
globalsInFileDiagnostics: boolean,
|
|
103
|
+
sharing: ThreadSharingData | undefined,
|
|
90
104
|
) => Worker;
|
|
91
105
|
|
|
92
106
|
export class ParallelCheck {
|
|
@@ -1549,6 +1563,137 @@ export function traceSingleChecker(checked: CheckedProgram): void {
|
|
|
1549
1563
|
);
|
|
1550
1564
|
}
|
|
1551
1565
|
|
|
1566
|
+
/** The file a position of the order checks: a file index, or for a statement range, its file's. */
|
|
1567
|
+
function fileOfPosition(order: readonly number[], units: readonly number[], k: number): number {
|
|
1568
|
+
const i = order[k]!;
|
|
1569
|
+
return i >= 0 ? i : units[3 * (-1 - i)]!;
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
/**
|
|
1573
|
+
* Hands position `k` of the order on to another checker (TSC_TS_SHARE). The handed-on positions are a list in
|
|
1574
|
+
* `handoff`: a lock, their number, the number of checkers that may still hand positions on, then the positions.
|
|
1575
|
+
*/
|
|
1576
|
+
function handOff(handoff: Int32Array, k: number): void {
|
|
1577
|
+
while (Atomics.compareExchange(handoff, 0, 0, 1) !== 0) {
|
|
1578
|
+
// Another checker hands a position on or takes one.
|
|
1579
|
+
}
|
|
1580
|
+
const n = handoff[1]!;
|
|
1581
|
+
handoff[3 + n] = k;
|
|
1582
|
+
Atomics.store(handoff, 1, n + 1);
|
|
1583
|
+
Atomics.store(handoff, 0, 0);
|
|
1584
|
+
// Checkers with nothing else to check wait for handed-on positions.
|
|
1585
|
+
Atomics.notify(handoff, 1);
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
/**
|
|
1589
|
+
* Once checker `index` has no more positions of its own: a handed-on position it may check, waiting while other
|
|
1590
|
+
* checkers may still hand some on; -1 when none is left for it.
|
|
1591
|
+
*/
|
|
1592
|
+
function waitForHandedOff(
|
|
1593
|
+
handoff: Int32Array,
|
|
1594
|
+
forbidden: Int32Array,
|
|
1595
|
+
count: number,
|
|
1596
|
+
order: readonly number[],
|
|
1597
|
+
units: readonly number[],
|
|
1598
|
+
index: number,
|
|
1599
|
+
): number {
|
|
1600
|
+
Atomics.sub(handoff, 2, 1);
|
|
1601
|
+
const start = performance.now();
|
|
1602
|
+
for (;;) {
|
|
1603
|
+
const n = Atomics.load(handoff, 1);
|
|
1604
|
+
const k = takeHandedOff(handoff, forbidden, count, order, units, index);
|
|
1605
|
+
if (k >= 0) {
|
|
1606
|
+
// Checking it, this checker may hand positions on again.
|
|
1607
|
+
Atomics.add(handoff, 2, 1);
|
|
1608
|
+
return k;
|
|
1609
|
+
}
|
|
1610
|
+
// The main thread checks what is handed on later, as it does the files of a thread that failed.
|
|
1611
|
+
if (Atomics.load(handoff, 2) === 0 || performance.now() - start > 2000) return -1;
|
|
1612
|
+
Atomics.wait(handoff, 1, n, 1);
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1616
|
+
/**
|
|
1617
|
+
* A handed-on position checker `index` of `count` may check, removed from the handed-on positions; -1 if there is
|
|
1618
|
+
* none.
|
|
1619
|
+
*/
|
|
1620
|
+
function takeHandedOff(
|
|
1621
|
+
handoff: Int32Array,
|
|
1622
|
+
forbidden: Int32Array,
|
|
1623
|
+
count: number,
|
|
1624
|
+
order: readonly number[],
|
|
1625
|
+
units: readonly number[],
|
|
1626
|
+
index: number,
|
|
1627
|
+
): number {
|
|
1628
|
+
if (Atomics.load(handoff, 1) === 0) return -1;
|
|
1629
|
+
while (Atomics.compareExchange(handoff, 0, 0, 1) !== 0) {
|
|
1630
|
+
// Another checker hands a position on or takes one.
|
|
1631
|
+
}
|
|
1632
|
+
const n = handoff[1]!;
|
|
1633
|
+
let found = -1;
|
|
1634
|
+
for (let j = 0; j < n; j++) {
|
|
1635
|
+
const k = handoff[3 + j]!;
|
|
1636
|
+
if (!isForbidden(forbidden, count, fileOfPosition(order, units, k), index)) {
|
|
1637
|
+
found = k;
|
|
1638
|
+
handoff[3 + j] = handoff[3 + n - 1]!;
|
|
1639
|
+
Atomics.store(handoff, 1, n - 1);
|
|
1640
|
+
break;
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
Atomics.store(handoff, 0, 0);
|
|
1644
|
+
return found;
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
/** TSC_TS_SHARE: the sharing data of each of `count` checker threads. */
|
|
1648
|
+
function threadSharingOf(
|
|
1649
|
+
count: number,
|
|
1650
|
+
order: readonly number[],
|
|
1651
|
+
units: readonly number[],
|
|
1652
|
+
files: number,
|
|
1653
|
+
): ThreadSharingData[] {
|
|
1654
|
+
const takers = new SharedArrayBuffer(4 * files);
|
|
1655
|
+
const forbidden = new SharedArrayBuffer(4 * files * forbiddenWords(count));
|
|
1656
|
+
const handoff = new SharedArrayBuffer(4 * (3 + order.length));
|
|
1657
|
+
new Int32Array(handoff)[2] = count;
|
|
1658
|
+
const taken = new Int32Array(takers);
|
|
1659
|
+
taken.fill(-2);
|
|
1660
|
+
for (let k = 0; k < order.length; k++) {
|
|
1661
|
+
const i = order[k]!;
|
|
1662
|
+
if (i >= 0) {
|
|
1663
|
+
if (taken[i] === -2) taken[i] = 0;
|
|
1664
|
+
} else taken[units[3 * (-1 - i)]!] = -1;
|
|
1665
|
+
}
|
|
1666
|
+
const typeTable = new SharedArrayBuffer(8 * resultTableSize);
|
|
1667
|
+
const returnTable = new SharedArrayBuffer(8 * resultTableSize);
|
|
1668
|
+
const numberLogs: SharedArrayBuffer[] = [];
|
|
1669
|
+
const recordTables: SharedArrayBuffer[] = [];
|
|
1670
|
+
const stringLogs: SharedArrayBuffer[] = [];
|
|
1671
|
+
for (let i = 0; i < count; i++) {
|
|
1672
|
+
numberLogs.push(new SharedArrayBuffer(4 * numberLogSize));
|
|
1673
|
+
recordTables.push(new SharedArrayBuffer(8 * recordTableSize));
|
|
1674
|
+
stringLogs.push(new SharedArrayBuffer(2 * stringLogSize));
|
|
1675
|
+
}
|
|
1676
|
+
const used = new SharedArrayBuffer(8 * count);
|
|
1677
|
+
const data: ThreadSharingData[] = [];
|
|
1678
|
+
for (let i = 0; i < count; i++)
|
|
1679
|
+
data.push({
|
|
1680
|
+
index: i,
|
|
1681
|
+
count,
|
|
1682
|
+
takers,
|
|
1683
|
+
forbidden,
|
|
1684
|
+
handoff,
|
|
1685
|
+
typeTable,
|
|
1686
|
+
returnTable,
|
|
1687
|
+
nodeIds: lastNodeIdValue(),
|
|
1688
|
+
symbolIds: lastSymbolIdValue(),
|
|
1689
|
+
numberLogs,
|
|
1690
|
+
recordTables,
|
|
1691
|
+
stringLogs,
|
|
1692
|
+
used,
|
|
1693
|
+
});
|
|
1694
|
+
return data;
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1552
1697
|
/**
|
|
1553
1698
|
* Checks files from the shared queue until it is empty; the main thread and checker threads alike.
|
|
1554
1699
|
* A checker thread (`onMainThread` false) also sends back its global diagnostics. At `limit` files
|
|
@@ -1570,8 +1715,14 @@ export function checkFromQueue(
|
|
|
1570
1715
|
emitKinds: readonly number[] | undefined = undefined,
|
|
1571
1716
|
checking: boolean = true,
|
|
1572
1717
|
units: readonly number[] = [],
|
|
1718
|
+
sharing: ThreadSharingData | undefined = undefined,
|
|
1573
1719
|
): CheckerResult {
|
|
1574
1720
|
const start = performance.now();
|
|
1721
|
+
// TSC_TS_SHARE: each file's taker, which other checkers then take the results of its declarations from.
|
|
1722
|
+
const takers = sharing === undefined ? undefined : new Int32Array(sharing.takers);
|
|
1723
|
+
const forbidden = sharing === undefined ? undefined : new Int32Array(sharing.forbidden);
|
|
1724
|
+
const handoff = sharing === undefined ? undefined : new Int32Array(sharing.handoff);
|
|
1725
|
+
const sharingCount = sharing === undefined ? 0 : sharing.count;
|
|
1575
1726
|
const readyAt = Date.now();
|
|
1576
1727
|
const verbose = process.env.TSC_TS_CHECKERS_TRACE === '3';
|
|
1577
1728
|
mark('checking');
|
|
@@ -1613,16 +1764,29 @@ export function checkFromQueue(
|
|
|
1613
1764
|
if (limit > 0 && done.length >= limit) {
|
|
1614
1765
|
more = true;
|
|
1615
1766
|
left = reservedBy(index).splice(0);
|
|
1767
|
+
// The thread that continues doesn't share results, so it hands nothing on.
|
|
1768
|
+
if (handoff !== undefined) Atomics.sub(handoff, 2, 1);
|
|
1616
1769
|
break;
|
|
1617
1770
|
}
|
|
1618
1771
|
// Except on checker 0, read the process's memory every 20 ms at most.
|
|
1619
1772
|
if (retirement > 0 && performance.now() - memoryReadAt >= 20) {
|
|
1620
1773
|
memoryReadAt = performance.now();
|
|
1621
|
-
if (retires(counter, index, retirement))
|
|
1774
|
+
if (retires(counter, index, retirement)) {
|
|
1775
|
+
if (handoff !== undefined) Atomics.sub(handoff, 2, 1);
|
|
1776
|
+
break;
|
|
1777
|
+
}
|
|
1622
1778
|
}
|
|
1623
|
-
|
|
1779
|
+
let k = handoff !== undefined ? takeHandedOff(handoff, forbidden!, sharingCount, order, units, index) : -1;
|
|
1780
|
+
if (k < 0) k = takePosition(counter, order.length, index, plan);
|
|
1781
|
+
if (k < 0 && handoff !== undefined) k = waitForHandedOff(handoff, forbidden!, sharingCount, order, units, index);
|
|
1624
1782
|
if (k < 0) break;
|
|
1625
1783
|
const i = order[k]!;
|
|
1784
|
+
// A file this checker took results for before anyone took it goes to another checker.
|
|
1785
|
+
if (forbidden !== undefined && i >= 0 && isForbidden(forbidden, sharingCount, i, index)) {
|
|
1786
|
+
handOff(handoff!, k);
|
|
1787
|
+
continue;
|
|
1788
|
+
}
|
|
1789
|
+
if (takers !== undefined && i >= 0) Atomics.store(takers, i, index + 1);
|
|
1626
1790
|
if (i < 0) {
|
|
1627
1791
|
// A statement range of a declaration file, which has nothing to emit.
|
|
1628
1792
|
const u = -1 - i;
|
|
@@ -1698,8 +1862,9 @@ export function checkFromQueue(
|
|
|
1698
1862
|
}
|
|
1699
1863
|
}
|
|
1700
1864
|
mark(`checked ${done.length} files, ${unitsDone.length} ranges`);
|
|
1701
|
-
//
|
|
1702
|
-
|
|
1865
|
+
// On the main thread, those from before checking are the program's own (`ownGlobalDiagnostics`), and
|
|
1866
|
+
// CheckedProgram.getGlobalDiagnostics deduplicates them with these.
|
|
1867
|
+
const globals = (onMainThread ? checked.checker.getGlobalDiagnostics() : checked.getGlobalDiagnostics()).slice();
|
|
1703
1868
|
let stats: number[] = [];
|
|
1704
1869
|
if (process.env.TSC_TS_CHECKERS_TRACE !== undefined) {
|
|
1705
1870
|
const cpu = process.threadCpuUsage();
|
|
@@ -1952,9 +2117,15 @@ export function startParallelCheck(
|
|
|
1952
2117
|
}
|
|
1953
2118
|
if (checking) {
|
|
1954
2119
|
joinRanges(checked, units, perUnit, perFile);
|
|
1955
|
-
// A thread that failed may have taken files it never checked
|
|
2120
|
+
// A thread that failed may have taken files it never checked, and with TSC_TS_SHARE every checker left may
|
|
2121
|
+
// have taken results for declarations of a file handed on: check them here.
|
|
2122
|
+
let left = 0;
|
|
1956
2123
|
for (const i of order)
|
|
1957
|
-
if (i >= 0 && perFile[i] === undefined)
|
|
2124
|
+
if (i >= 0 && perFile[i] === undefined) {
|
|
2125
|
+
perFile[i] = checked.unfilteredDiagnosticsOfFile(files[i]!);
|
|
2126
|
+
left++;
|
|
2127
|
+
}
|
|
2128
|
+
if (trace && left > 0) process.stderr.write(`checkers: the main thread checked ${left} files\n`);
|
|
1958
2129
|
checked.checkedInParallel = perFile;
|
|
1959
2130
|
}
|
|
1960
2131
|
mark('all checked');
|
|
@@ -2017,6 +2188,17 @@ export function startParallelCheck(
|
|
|
2017
2188
|
if (remaining === 0 && ownDone) finish();
|
|
2018
2189
|
};
|
|
2019
2190
|
const diagnosticFiles = new Map<string, DiagnosticFile>();
|
|
2191
|
+
// TSC_TS_SHARE: checker threads share results (shared-results.ts).
|
|
2192
|
+
const sharing =
|
|
2193
|
+
shareThreads && shared && !mainChecks && count > 1 && count <= maxSharingCheckers
|
|
2194
|
+
? threadSharingOf(count, order, units, files.length)
|
|
2195
|
+
: undefined;
|
|
2196
|
+
const sharingStarted: boolean[] = [];
|
|
2197
|
+
for (let i = 0; i < count; i++) sharingStarted.push(false);
|
|
2198
|
+
const startSharingOf = (i: number): ThreadSharingData => {
|
|
2199
|
+
sharingStarted[i] = true;
|
|
2200
|
+
return sharing![i]!;
|
|
2201
|
+
};
|
|
2020
2202
|
const spawn = (i: number, reserved: number[]): void => {
|
|
2021
2203
|
const worker = parallelCheck.spawn!(
|
|
2022
2204
|
shared ? program : undefined,
|
|
@@ -2030,6 +2212,9 @@ export function startParallelCheck(
|
|
|
2030
2212
|
emitKinds,
|
|
2031
2213
|
checking,
|
|
2032
2214
|
units,
|
|
2215
|
+
checked.globalsInFileDiagnostics,
|
|
2216
|
+
// A thread that continues another's index doesn't share.
|
|
2217
|
+
reserved.length === 0 && sharing !== undefined && !sharingStarted[i] ? startSharingOf(i) : undefined,
|
|
2033
2218
|
);
|
|
2034
2219
|
worker.on('message', (message: unknown) => {
|
|
2035
2220
|
mark(`result from c${i}`);
|
|
@@ -2046,7 +2231,8 @@ export function startParallelCheck(
|
|
|
2046
2231
|
else threadDone();
|
|
2047
2232
|
});
|
|
2048
2233
|
worker.on('error', (error: unknown) => {
|
|
2049
|
-
|
|
2234
|
+
// Sharing results (TSC_TS_SHARE) is still checked for such failures, which the main thread hides otherwise.
|
|
2235
|
+
if (trace || shareThreads) process.stderr.write(`checkers: thread ${i} failed: ${String(error)}\n`);
|
|
2050
2236
|
threadDone();
|
|
2051
2237
|
});
|
|
2052
2238
|
};
|
|
@@ -2059,6 +2245,9 @@ export function startParallelCheck(
|
|
|
2059
2245
|
const emittedHere =
|
|
2060
2246
|
!mainChecks && emitKinds === undefined ? emitUncheckedFiles(checked, order, emits) : new Map<number, EmitResult>();
|
|
2061
2247
|
if (mainChecks) {
|
|
2248
|
+
// The program reports the global diagnostics this checker has before checking files as found before
|
|
2249
|
+
// checking; those it finds checking them come with the threads' (`record`).
|
|
2250
|
+
checked.ownGlobalDiagnostics = checked.checker.getGlobalDiagnostics().slice();
|
|
2062
2251
|
const own = checkFromQueue(
|
|
2063
2252
|
checked,
|
|
2064
2253
|
0,
|
|
@@ -247,7 +247,7 @@ export function startDeclarationThread(
|
|
|
247
247
|
let declarations: boolean;
|
|
248
248
|
if (emitKinds === undefined) declarations = sourceFileMayBeEmitted(files[i]!, options);
|
|
249
249
|
else declarations = emitKinds[i] === EmitOnly.All || emitKinds[i] === EmitOnly.Dts;
|
|
250
|
-
kinds.push(declarations ? EmitOnly.Dts : -1);
|
|
250
|
+
kinds.push(declarations ? (emitsJavaScript(program, emitKinds, i) ? EmitOnly.DtsAfterJs : EmitOnly.Dts) : -1);
|
|
251
251
|
results.push(undefined);
|
|
252
252
|
}
|
|
253
253
|
for (const i of metadata) kinds[i] = emitKinds === undefined ? EmitOnly.All : emitKinds[i]!;
|