tsc-ts 0.0.9 → 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 +2 -2
- 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 +22 -15
- package/dist/api/compiler/ast.js +1026 -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 +178 -124
- 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 +472 -440
- 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 -107
- 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 +212 -75
- 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 +145 -36
- 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 +104 -31
- package/dist/api/compiler/checker.js +181 -33
- 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 +42 -3
- package/dist/api/compiler/compile-program.js +139 -27
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.d.ts +22 -0
- package/dist/api/compiler/diagnostics.js +93 -11
- 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 +21 -1
- package/dist/api/compiler/file-loader.js +201 -48
- 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/parallel-parse.d.ts +3 -2
- package/dist/api/compiler/parallel-parse.js +17 -5
- 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 +5 -1
- package/dist/api/compiler/printer/emit-context.js +20 -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 +49 -2
- package/dist/api/compiler/printer/printer.js +539 -293
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +12 -2
- package/dist/api/compiler/program-checker.js +88 -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 +4 -6
- package/dist/api/compiler/program.js +74 -87
- 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 +347 -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 +23 -14
- package/dist/api/compiler/symbol.js +23 -11
- 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 +58 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +79 -9
- 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 +136 -62
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -82
- 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 +200 -56
- 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 +124 -23
- 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 +203 -39
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +167 -27
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/diagnostics.ts +84 -3
- 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 +197 -38
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +165 -30
- 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 +326 -52
- package/src/compiler/parallel-emit.ts +320 -0
- package/src/compiler/parallel-parse.ts +16 -5
- package/src/compiler/parse-thread.ts +3 -0
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +21 -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 +266 -30
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +57 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +18 -26
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +240 -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 +46 -24
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +64 -4
- 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 +66 -9
- package/src/compiler/tsc-cli.ts +7 -0
- package/src/compiler/tsc-compile.ts +284 -4
- 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
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
// checker that touches part of a program (as each of several parallel checkers does) stores only
|
|
8
8
|
// the pages it touches.
|
|
9
9
|
|
|
10
|
-
import type { Symbol } from './symbol.js';
|
|
11
|
-
|
|
12
10
|
/** Links are stored in pages of 256 ids. */
|
|
13
11
|
export const enum LinkPaging {
|
|
14
12
|
Bits = 8,
|
|
@@ -203,20 +201,24 @@ const enum IdSetPaging {
|
|
|
203
201
|
|
|
204
202
|
/** The number of set bits of a 32-bit value. */
|
|
205
203
|
function bitCount(x: number): number {
|
|
206
|
-
x = x - ((x >>> 1) & 0x55555555);
|
|
204
|
+
x = (x - ((x >>> 1) & 0x55555555)) | 0;
|
|
207
205
|
x = (x & 0x33333333) + ((x >>> 2) & 0x33333333);
|
|
208
206
|
x = (x + (x >>> 4)) & 0x0f0f0f0f;
|
|
209
|
-
|
|
207
|
+
// At most 32, so the top byte is the count with either shift; `>>` keeps it an int32.
|
|
208
|
+
return Math.imul(x, 0x01010101) >> 24;
|
|
210
209
|
}
|
|
211
210
|
|
|
212
211
|
/**
|
|
213
|
-
* A page of a `
|
|
214
|
-
* of
|
|
215
|
-
* lookup reads one object before the
|
|
216
|
-
* 32-bit fields
|
|
212
|
+
* A page of a `CompactLinkTable`'s presence bits: one bit per id of the page in eight 32-id words, the
|
|
213
|
+
* number of values stored before each word, and the position of the page's values in the table's
|
|
214
|
+
* `values`. The words are fields, so a lookup reads one object before the values. Natively the words
|
|
215
|
+
* are 32-bit fields, since every write stores an int32. A class that is generic or has a generic
|
|
216
|
+
* subclass keeps its number fields as doubles, so the values the bits index are in the table's
|
|
217
|
+
* `values`, not in this class or a subclass.
|
|
217
218
|
*/
|
|
218
219
|
class CompactLinkPage {
|
|
219
|
-
|
|
220
|
+
/** The position of the page's values in the table's `values`. */
|
|
221
|
+
readonly position: number;
|
|
220
222
|
private w0: number;
|
|
221
223
|
private w1: number;
|
|
222
224
|
private w2: number;
|
|
@@ -229,8 +231,8 @@ class CompactLinkPage {
|
|
|
229
231
|
private before0: number;
|
|
230
232
|
private before1: number;
|
|
231
233
|
|
|
232
|
-
constructor() {
|
|
233
|
-
this.
|
|
234
|
+
constructor(position: number) {
|
|
235
|
+
this.position = position | 0;
|
|
234
236
|
this.w0 = 0;
|
|
235
237
|
this.w1 = 0;
|
|
236
238
|
this.w2 = 0;
|
|
@@ -297,72 +299,90 @@ class CompactLinkPage {
|
|
|
297
299
|
rank(slot: number, bits: number): number {
|
|
298
300
|
const word = slot >> 5;
|
|
299
301
|
const before = ((word < 4 ? this.before0 : this.before1) >>> ((word & 3) << 3)) & 0xff;
|
|
300
|
-
return before + bitCount(bits & ((1 << (slot & 31)) - 1));
|
|
302
|
+
return (before + bitCount(bits & ((1 << (slot & 31)) - 1))) | 0;
|
|
301
303
|
}
|
|
302
304
|
|
|
303
|
-
/**
|
|
305
|
+
/**
|
|
306
|
+
* Adds 1 (`delta` 1) or subtracts 1 (`delta` -1) from the counts of the words after `word`, a byte
|
|
307
|
+
* of `before0` or `before1` each. No byte carries or borrows: a count is at most 224, and a count
|
|
308
|
+
* that goes down includes the value removed.
|
|
309
|
+
*/
|
|
304
310
|
shiftCounts(word: number, delta: number): void {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
311
|
+
// A 1 in each byte of the words after `word`: shifting `0x01010100` left by `word` bytes keeps
|
|
312
|
+
// the bytes above it, and shifts them all out at word 3.
|
|
313
|
+
const low = word < 4 ? 0x01010100 << (word << 3) : 0;
|
|
314
|
+
const high = word < 4 ? 0x01010101 : 0x01010100 << ((word & 3) << 3);
|
|
315
|
+
this.before0 = (this.before0 + Math.imul(low, delta)) | 0;
|
|
316
|
+
this.before1 = (this.before1 + Math.imul(high, delta)) | 0;
|
|
310
317
|
}
|
|
311
318
|
}
|
|
312
319
|
|
|
313
320
|
/**
|
|
314
|
-
*
|
|
315
|
-
* pages it touches
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
321
|
+
* Values by node or symbol id, for ids a checker stores a value for in more than about one in
|
|
322
|
+
* sixteen of the ids of the pages it touches: the symbols it resolves for the identifiers and names
|
|
323
|
+
* of the files it checks (one in four to one in eight), the types and signatures it resolves for
|
|
324
|
+
* their type nodes and calls (one in twelve to one in seventeen), and the symbol columns most
|
|
325
|
+
* symbols leave empty, such as the name type of a property (one in ten to one in three with
|
|
326
|
+
* `--checkers 16`, where every checker touches symbols across the whole program). Pages of
|
|
327
|
+
* `LinkPaging.Size` ids keep a presence bit per id and only the values stored, so a value costs
|
|
328
|
+
* about one array slot. A `LinkTable` page costs a slot for every id, and a `Map` entry also stores
|
|
329
|
+
* its key and a share of the hash buckets. At fewer values per page than that, the page's own
|
|
330
|
+
* allocations outweigh what it saves, and a `SparseLinkTable` costs less.
|
|
320
331
|
*/
|
|
321
|
-
export class
|
|
332
|
+
export class CompactLinkTable<T> {
|
|
333
|
+
/**
|
|
334
|
+
* The pages by `id >> LinkPaging.Bits`, up to the highest page stored; undefined where a page stores
|
|
335
|
+
* nothing. A checker stores values in a few percent of the pages of a large program, so the values
|
|
336
|
+
* are kept apart, one list for each page stored, rather than in a second slot per page.
|
|
337
|
+
*/
|
|
322
338
|
readonly pages: (CompactLinkPage | undefined)[] = [];
|
|
323
|
-
/** The
|
|
339
|
+
/** The values of each page stored, in id order, at the page's `position`. */
|
|
340
|
+
readonly values: T[][] = [];
|
|
341
|
+
/** The number of values stored. */
|
|
324
342
|
size = 0;
|
|
325
343
|
|
|
326
|
-
get(id: number):
|
|
327
|
-
const
|
|
344
|
+
get(id: number): T | undefined {
|
|
345
|
+
const index = id >> LinkPaging.Bits;
|
|
346
|
+
const page = this.pages[index];
|
|
328
347
|
if (page === undefined) return undefined;
|
|
329
348
|
const slot = id & LinkPaging.Mask;
|
|
330
349
|
const bits = page.word(slot >> 5);
|
|
331
350
|
if ((bits & (1 << (slot & 31))) === 0) return undefined;
|
|
332
|
-
return
|
|
351
|
+
return this.values[page.position]![page.rank(slot, bits)];
|
|
333
352
|
}
|
|
334
353
|
|
|
335
|
-
set(id: number, value:
|
|
354
|
+
set(id: number, value: T | undefined): void {
|
|
336
355
|
const index = id >> LinkPaging.Bits;
|
|
337
356
|
let page = this.pages[index];
|
|
338
357
|
if (page === undefined) {
|
|
339
358
|
if (value === undefined) return;
|
|
340
359
|
while (this.pages.length <= index) this.pages.push(undefined);
|
|
341
|
-
page = new CompactLinkPage();
|
|
360
|
+
page = new CompactLinkPage(this.values.length);
|
|
342
361
|
this.pages[index] = page;
|
|
362
|
+
this.values.push([]);
|
|
343
363
|
}
|
|
364
|
+
const values = this.values[page.position]!;
|
|
344
365
|
const slot = id & LinkPaging.Mask;
|
|
345
366
|
const word = slot >> 5;
|
|
346
367
|
const bit = 1 << (slot & 31);
|
|
347
368
|
const bits = page.word(word);
|
|
348
369
|
const at = page.rank(slot, bits);
|
|
349
|
-
const values = page.values;
|
|
350
370
|
if ((bits & bit) !== 0) {
|
|
351
371
|
if (value !== undefined) {
|
|
352
372
|
values[at] = value;
|
|
353
373
|
return;
|
|
354
374
|
}
|
|
355
|
-
|
|
356
|
-
values.
|
|
375
|
+
if (at === values.length - 1) values.pop();
|
|
376
|
+
else values.splice(at, 1);
|
|
357
377
|
page.setWord(word, bits & ~bit);
|
|
358
378
|
page.shiftCounts(word, -1);
|
|
359
379
|
this.size--;
|
|
360
380
|
return;
|
|
361
381
|
}
|
|
362
382
|
if (value === undefined) return;
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
values
|
|
383
|
+
// Values are mostly stored in id order, at the end.
|
|
384
|
+
if (at === values.length) values.push(value);
|
|
385
|
+
else values.splice(at, 0, value);
|
|
366
386
|
page.setWord(word, bits | bit);
|
|
367
387
|
page.shiftCounts(word, 1);
|
|
368
388
|
this.size++;
|
|
@@ -370,6 +390,31 @@ export class CompactSymbolLinkTable {
|
|
|
370
390
|
|
|
371
391
|
clear(): void {
|
|
372
392
|
this.pages.length = 0;
|
|
393
|
+
this.values.length = 0;
|
|
373
394
|
this.size = 0;
|
|
374
395
|
}
|
|
375
396
|
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Int32 values by id, zero where none is stored, in a `CompactLinkTable`: pages of
|
|
400
|
+
* `LinkPaging.Size` ids keep a presence bit per id and only the nonzero values. For columns where a
|
|
401
|
+
* checker stores a value for fewer than about one in three of the ids of the pages it touches, such
|
|
402
|
+
* as the reference kinds of the symbols its files reference: an `IntLinkTable` page costs four bytes
|
|
403
|
+
* for every id.
|
|
404
|
+
*/
|
|
405
|
+
export class CompactIntLinkTable {
|
|
406
|
+
private readonly table = new CompactLinkTable<number>();
|
|
407
|
+
|
|
408
|
+
get(id: number): number {
|
|
409
|
+
return this.table.get(id) ?? 0;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
set(id: number, value: number): void {
|
|
413
|
+
value = value | 0;
|
|
414
|
+
this.table.set(id, value === 0 ? undefined : value);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
clear(): void {
|
|
418
|
+
this.table.clear();
|
|
419
|
+
}
|
|
420
|
+
}
|