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.
Files changed (379) hide show
  1. package/README.md +1 -1
  2. package/bin/tsc-ts.js +70 -1
  3. package/dist/api/compiler/ast-utilities.d.ts +19 -1
  4. package/dist/api/compiler/ast-utilities.js +180 -95
  5. package/dist/api/compiler/ast.d.ts +29 -18
  6. package/dist/api/compiler/ast.js +1040 -1007
  7. package/dist/api/compiler/astnav.js +15 -15
  8. package/dist/api/compiler/binder-utilities.js +186 -186
  9. package/dist/api/compiler/binder.js +290 -263
  10. package/dist/api/compiler/character-codes.js +2 -2
  11. package/dist/api/compiler/checker-calls.js +173 -123
  12. package/dist/api/compiler/checker-classes.d.ts +14 -3
  13. package/dist/api/compiler/checker-classes.js +136 -91
  14. package/dist/api/compiler/checker-contextual.d.ts +20 -0
  15. package/dist/api/compiler/checker-contextual.js +175 -62
  16. package/dist/api/compiler/checker-declaration-order.js +79 -79
  17. package/dist/api/compiler/checker-declarations.d.ts +1 -0
  18. package/dist/api/compiler/checker-declarations.js +160 -136
  19. package/dist/api/compiler/checker-declared-types.js +67 -65
  20. package/dist/api/compiler/checker-decorators.js +77 -77
  21. package/dist/api/compiler/checker-deprecation.d.ts +8 -3
  22. package/dist/api/compiler/checker-deprecation.js +76 -55
  23. package/dist/api/compiler/checker-destructuring.js +47 -45
  24. package/dist/api/compiler/checker-elaboration.js +24 -24
  25. package/dist/api/compiler/checker-emit-helpers.js +4 -4
  26. package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
  27. package/dist/api/compiler/checker-emit-resolver.js +25 -13
  28. package/dist/api/compiler/checker-evaluator.js +9 -9
  29. package/dist/api/compiler/checker-expressions.js +258 -212
  30. package/dist/api/compiler/checker-functions.js +113 -107
  31. package/dist/api/compiler/checker-generated-code.d.ts +0 -11
  32. package/dist/api/compiler/checker-generated-code.js +28 -52
  33. package/dist/api/compiler/checker-grammar.d.ts +1 -0
  34. package/dist/api/compiler/checker-grammar.js +469 -438
  35. package/dist/api/compiler/checker-heritage.js +91 -93
  36. package/dist/api/compiler/checker-inference.d.ts +77 -5
  37. package/dist/api/compiler/checker-inference.js +487 -113
  38. package/dist/api/compiler/checker-iteration.d.ts +0 -10
  39. package/dist/api/compiler/checker-iteration.js +35 -52
  40. package/dist/api/compiler/checker-javascript.js +14 -14
  41. package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
  42. package/dist/api/compiler/checker-jsdoc.js +67 -58
  43. package/dist/api/compiler/checker-jsx.js +107 -89
  44. package/dist/api/compiler/checker-members.d.ts +9 -2
  45. package/dist/api/compiler/checker-members.js +210 -74
  46. package/dist/api/compiler/checker-modules.d.ts +15 -6
  47. package/dist/api/compiler/checker-modules.js +469 -309
  48. package/dist/api/compiler/checker-narrowing.js +273 -189
  49. package/dist/api/compiler/checker-object-literals.js +25 -22
  50. package/dist/api/compiler/checker-operators.js +126 -118
  51. package/dist/api/compiler/checker-overloads.js +27 -27
  52. package/dist/api/compiler/checker-property-access.js +59 -55
  53. package/dist/api/compiler/checker-services.d.ts +1 -0
  54. package/dist/api/compiler/checker-services.js +222 -210
  55. package/dist/api/compiler/checker-signatures.js +65 -49
  56. package/dist/api/compiler/checker-source-file.d.ts +5 -0
  57. package/dist/api/compiler/checker-source-file.js +154 -130
  58. package/dist/api/compiler/checker-statements.js +33 -32
  59. package/dist/api/compiler/checker-super.js +50 -50
  60. package/dist/api/compiler/checker-symbol-types.js +109 -93
  61. package/dist/api/compiler/checker-symbols.d.ts +13 -1
  62. package/dist/api/compiler/checker-symbols.js +264 -149
  63. package/dist/api/compiler/checker-type-factory.d.ts +5 -0
  64. package/dist/api/compiler/checker-type-factory.js +190 -46
  65. package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
  66. package/dist/api/compiler/checker-type-nodes.js +179 -141
  67. package/dist/api/compiler/checker-type-operators.d.ts +2 -0
  68. package/dist/api/compiler/checker-type-operators.js +110 -63
  69. package/dist/api/compiler/checker-types.d.ts +80 -3
  70. package/dist/api/compiler/checker-types.js +121 -2
  71. package/dist/api/compiler/checker-unused.js +114 -118
  72. package/dist/api/compiler/checker-utilities.js +11 -11
  73. package/dist/api/compiler/checker.d.ts +97 -31
  74. package/dist/api/compiler/checker.js +149 -35
  75. package/dist/api/compiler/command-line.d.ts +1 -3
  76. package/dist/api/compiler/command-line.js +47 -44
  77. package/dist/api/compiler/compile-program.d.ts +24 -4
  78. package/dist/api/compiler/compile-program.js +53 -26
  79. package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
  80. package/dist/api/compiler/diagnostic-messages.js +128 -122
  81. package/dist/api/compiler/diagnostics.js +7 -7
  82. package/dist/api/compiler/emitter.d.ts +7 -1
  83. package/dist/api/compiler/emitter.js +53 -11
  84. package/dist/api/compiler/expr-record.d.ts +11 -0
  85. package/dist/api/compiler/expr-record.js +53 -0
  86. package/dist/api/compiler/file-include.d.ts +2 -1
  87. package/dist/api/compiler/file-include.js +11 -7
  88. package/dist/api/compiler/file-loader.d.ts +10 -0
  89. package/dist/api/compiler/file-loader.js +138 -41
  90. package/dist/api/compiler/identifier-name.d.ts +9 -0
  91. package/dist/api/compiler/identifier-name.js +10 -0
  92. package/dist/api/compiler/instantiation.d.ts +7 -0
  93. package/dist/api/compiler/instantiation.js +101 -49
  94. package/dist/api/compiler/jsdoc.js +27 -25
  95. package/dist/api/compiler/link-tables.d.ts +48 -18
  96. package/dist/api/compiler/link-tables.js +80 -37
  97. package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
  98. package/dist/api/compiler/locales/cs-CZ.js +1 -1
  99. package/dist/api/compiler/locales/de-DE.d.ts +1 -1
  100. package/dist/api/compiler/locales/de-DE.js +1 -1
  101. package/dist/api/compiler/locales/es-ES.d.ts +1 -1
  102. package/dist/api/compiler/locales/es-ES.js +1 -1
  103. package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
  104. package/dist/api/compiler/locales/fr-FR.js +1 -1
  105. package/dist/api/compiler/locales/it-IT.d.ts +1 -1
  106. package/dist/api/compiler/locales/it-IT.js +1 -1
  107. package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
  108. package/dist/api/compiler/locales/ja-JP.js +1 -1
  109. package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
  110. package/dist/api/compiler/locales/ko-KR.js +1 -1
  111. package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
  112. package/dist/api/compiler/locales/pl-PL.js +1 -1
  113. package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
  114. package/dist/api/compiler/locales/pt-BR.js +1 -1
  115. package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
  116. package/dist/api/compiler/locales/ru-RU.js +1 -1
  117. package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
  118. package/dist/api/compiler/locales/tr-TR.js +1 -1
  119. package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
  120. package/dist/api/compiler/locales/zh-CN.js +1 -1
  121. package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
  122. package/dist/api/compiler/locales/zh-TW.js +1 -1
  123. package/dist/api/compiler/module-resolution-types.js +6 -6
  124. package/dist/api/compiler/module-resolution.d.ts +10 -1
  125. package/dist/api/compiler/module-resolution.js +115 -84
  126. package/dist/api/compiler/module-specifiers.d.ts +15 -0
  127. package/dist/api/compiler/module-specifiers.js +24 -18
  128. package/dist/api/compiler/name-resolver.js +74 -65
  129. package/dist/api/compiler/node-builder-names.d.ts +11 -3
  130. package/dist/api/compiler/node-builder-names.js +210 -90
  131. package/dist/api/compiler/node-builder-pseudo.js +29 -31
  132. package/dist/api/compiler/node-builder-reuse.js +23 -22
  133. package/dist/api/compiler/node-builder.d.ts +18 -1
  134. package/dist/api/compiler/node-builder.js +191 -102
  135. package/dist/api/compiler/option-declarations.d.ts +2 -6
  136. package/dist/api/compiler/option-declarations.js +315 -375
  137. package/dist/api/compiler/options.d.ts +15 -33
  138. package/dist/api/compiler/options.js +21 -54
  139. package/dist/api/compiler/output-paths.d.ts +4 -1
  140. package/dist/api/compiler/output-paths.js +6 -11
  141. package/dist/api/compiler/package-json.d.ts +3 -3
  142. package/dist/api/compiler/package-json.js +11 -10
  143. package/dist/api/compiler/parser.d.ts +42 -20
  144. package/dist/api/compiler/parser.js +318 -224
  145. package/dist/api/compiler/path.d.ts +9 -0
  146. package/dist/api/compiler/path.js +20 -3
  147. package/dist/api/compiler/printer/emit-context.d.ts +3 -1
  148. package/dist/api/compiler/printer/emit-context.js +16 -1
  149. package/dist/api/compiler/printer/factory-base.d.ts +2 -2
  150. package/dist/api/compiler/printer/factory-base.js +7 -3
  151. package/dist/api/compiler/printer/factory.js +6 -3
  152. package/dist/api/compiler/printer/helpers.js +10 -1
  153. package/dist/api/compiler/printer/name-generator.d.ts +1 -1
  154. package/dist/api/compiler/printer/name-generator.js +35 -16
  155. package/dist/api/compiler/printer/printer.d.ts +1 -0
  156. package/dist/api/compiler/printer/printer.js +306 -283
  157. package/dist/api/compiler/printer/utilities.js +149 -147
  158. package/dist/api/compiler/program-checker.d.ts +8 -2
  159. package/dist/api/compiler/program-checker.js +84 -34
  160. package/dist/api/compiler/program-utilities.d.ts +3 -1
  161. package/dist/api/compiler/program-utilities.js +28 -15
  162. package/dist/api/compiler/program.d.ts +2 -0
  163. package/dist/api/compiler/program.js +69 -57
  164. package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
  165. package/dist/api/compiler/pseudo-bigint.js +18 -0
  166. package/dist/api/compiler/regexp-checker.d.ts +1 -1
  167. package/dist/api/compiler/regexp-checker.js +93 -76
  168. package/dist/api/compiler/relations.d.ts +27 -4
  169. package/dist/api/compiler/relations.js +337 -180
  170. package/dist/api/compiler/reparser.js +64 -59
  171. package/dist/api/compiler/scanner.d.ts +27 -2
  172. package/dist/api/compiler/scanner.js +181 -150
  173. package/dist/api/compiler/shared-results.d.ts +696 -0
  174. package/dist/api/compiler/shared-results.js +2905 -0
  175. package/dist/api/compiler/sourcemap.js +2 -2
  176. package/dist/api/compiler/symbol-accessibility.js +87 -74
  177. package/dist/api/compiler/symbol.d.ts +22 -13
  178. package/dist/api/compiler/symbol.js +15 -1
  179. package/dist/api/compiler/syntax-kind.d.ts +198 -197
  180. package/dist/api/compiler/transformers/alias-references.js +247 -139
  181. package/dist/api/compiler/transformers/async-utilities.js +25 -25
  182. package/dist/api/compiler/transformers/async.d.ts +0 -1
  183. package/dist/api/compiler/transformers/async.js +64 -77
  184. package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
  185. package/dist/api/compiler/transformers/class-fields.js +81 -78
  186. package/dist/api/compiler/transformers/commonjs-module.js +18 -15
  187. package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
  188. package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
  189. package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
  190. package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
  191. package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
  192. package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
  193. package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
  194. package/dist/api/compiler/transformers/declarations.d.ts +4 -1
  195. package/dist/api/compiler/transformers/declarations.js +307 -239
  196. package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
  197. package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
  198. package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
  199. package/dist/api/compiler/transformers/destructuring.js +19 -18
  200. package/dist/api/compiler/transformers/emit-resolver.js +1 -1
  201. package/dist/api/compiler/transformers/es-decorators.js +55 -55
  202. package/dist/api/compiler/transformers/external-module-info.js +3 -3
  203. package/dist/api/compiler/transformers/for-await.js +25 -25
  204. package/dist/api/compiler/transformers/import-elision.js +14 -14
  205. package/dist/api/compiler/transformers/jsx.js +12 -12
  206. package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
  207. package/dist/api/compiler/transformers/module.js +8 -8
  208. package/dist/api/compiler/transformers/named-evaluation.js +4 -4
  209. package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
  210. package/dist/api/compiler/transformers/optional-chain.js +10 -10
  211. package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
  212. package/dist/api/compiler/transformers/reference-resolver.js +131 -69
  213. package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
  214. package/dist/api/compiler/transformers/subtree-facts.js +47 -47
  215. package/dist/api/compiler/transformers/syntax-facts.js +56 -58
  216. package/dist/api/compiler/transformers/type-eraser.js +73 -66
  217. package/dist/api/compiler/transformers/type-serialization.js +24 -24
  218. package/dist/api/compiler/transformers/using.js +12 -12
  219. package/dist/api/compiler/transformers/utilities.js +77 -77
  220. package/dist/api/compiler/transformers/visitor-base.js +172 -172
  221. package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
  222. package/dist/api/compiler/tsconfig.d.ts +10 -2
  223. package/dist/api/compiler/tsconfig.js +136 -48
  224. package/dist/api/compiler/type-printer.js +40 -3
  225. package/dist/api/compiler/types.d.ts +2 -1
  226. package/dist/api/library/ast.generated.d.ts +42 -39
  227. package/dist/api/library/ast.generated.js +1 -1
  228. package/dist/api/library/compiler-options.generated.d.ts +111 -100
  229. package/dist/api/library/compiler-options.generated.js +1 -1
  230. package/dist/api/library/disk.js +12 -1
  231. package/dist/api/library/enums.generated.d.ts +206 -206
  232. package/dist/api/library/enums.generated.js +206 -206
  233. package/dist/api/library/nodes.js +26 -26
  234. package/package.json +9 -9
  235. package/src/compiler/ast-utilities.ts +99 -7
  236. package/src/compiler/ast.ts +74 -38
  237. package/src/compiler/binder.ts +39 -4
  238. package/src/compiler/cgroup.ts +157 -0
  239. package/src/compiler/character-codes.ts +2 -2
  240. package/src/compiler/checker-calls.ts +76 -8
  241. package/src/compiler/checker-classes.ts +80 -25
  242. package/src/compiler/checker-contextual.ts +110 -1
  243. package/src/compiler/checker-declarations.ts +31 -4
  244. package/src/compiler/checker-declared-types.ts +8 -5
  245. package/src/compiler/checker-decorators.ts +1 -1
  246. package/src/compiler/checker-deprecation.ts +29 -8
  247. package/src/compiler/checker-destructuring.ts +10 -3
  248. package/src/compiler/checker-emit-helpers.ts +1 -0
  249. package/src/compiler/checker-emit-resolver.ts +16 -6
  250. package/src/compiler/checker-expressions.ts +95 -47
  251. package/src/compiler/checker-functions.ts +21 -6
  252. package/src/compiler/checker-generated-code.ts +2 -22
  253. package/src/compiler/checker-grammar.ts +133 -60
  254. package/src/compiler/checker-heritage.ts +22 -21
  255. package/src/compiler/checker-inference.ts +514 -87
  256. package/src/compiler/checker-iteration.ts +18 -31
  257. package/src/compiler/checker-javascript.ts +1 -1
  258. package/src/compiler/checker-jsdoc.ts +50 -27
  259. package/src/compiler/checker-jsx.ts +28 -5
  260. package/src/compiler/checker-members.ts +197 -55
  261. package/src/compiler/checker-modules.ts +332 -65
  262. package/src/compiler/checker-narrowing.ts +98 -19
  263. package/src/compiler/checker-object-literals.ts +3 -0
  264. package/src/compiler/checker-operators.ts +11 -4
  265. package/src/compiler/checker-property-access.ts +7 -2
  266. package/src/compiler/checker-services.ts +39 -12
  267. package/src/compiler/checker-signatures.ts +15 -1
  268. package/src/compiler/checker-source-file.ts +39 -13
  269. package/src/compiler/checker-statements.ts +3 -2
  270. package/src/compiler/checker-symbol-types.ts +29 -6
  271. package/src/compiler/checker-symbols.ts +158 -15
  272. package/src/compiler/checker-type-factory.ts +173 -35
  273. package/src/compiler/checker-type-nodes.ts +46 -3
  274. package/src/compiler/checker-type-operators.ts +83 -26
  275. package/src/compiler/checker-types.ts +147 -4
  276. package/src/compiler/checker-unused.ts +9 -14
  277. package/src/compiler/checker.ts +175 -41
  278. package/src/compiler/command-line.ts +28 -28
  279. package/src/compiler/compile-program.ts +59 -25
  280. package/src/compiler/decoder.ts +15 -5
  281. package/src/compiler/diagnostic-messages.ts +1973 -1892
  282. package/src/compiler/doctor-report.ts +133 -0
  283. package/src/compiler/emitter.ts +57 -8
  284. package/src/compiler/encoder.ts +23 -8
  285. package/src/compiler/expr-record.ts +59 -0
  286. package/src/compiler/file-include.ts +9 -3
  287. package/src/compiler/file-loader.ts +139 -32
  288. package/src/compiler/help.ts +10 -14
  289. package/src/compiler/identifier-name.ts +13 -0
  290. package/src/compiler/incremental.ts +86 -18
  291. package/src/compiler/init.ts +2 -7
  292. package/src/compiler/instantiation.ts +77 -22
  293. package/src/compiler/jsdoc.ts +7 -3
  294. package/src/compiler/link-tables.ts +82 -37
  295. package/src/compiler/locales/cs-CZ.ts +1 -1
  296. package/src/compiler/locales/de-DE.ts +1 -1
  297. package/src/compiler/locales/es-ES.ts +1 -1
  298. package/src/compiler/locales/fr-FR.ts +1 -1
  299. package/src/compiler/locales/it-IT.ts +1 -1
  300. package/src/compiler/locales/ja-JP.ts +1 -1
  301. package/src/compiler/locales/ko-KR.ts +1 -1
  302. package/src/compiler/locales/pl-PL.ts +1 -1
  303. package/src/compiler/locales/pt-BR.ts +1 -1
  304. package/src/compiler/locales/ru-RU.ts +1 -1
  305. package/src/compiler/locales/tr-TR.ts +1 -1
  306. package/src/compiler/locales/zh-CN.ts +1 -1
  307. package/src/compiler/locales/zh-TW.ts +1 -1
  308. package/src/compiler/module-resolution.ts +44 -8
  309. package/src/compiler/module-specifiers.ts +62 -20
  310. package/src/compiler/name-resolver.ts +9 -1
  311. package/src/compiler/node-builder-names.ts +236 -54
  312. package/src/compiler/node-builder-pseudo.ts +4 -7
  313. package/src/compiler/node-builder-reuse.ts +5 -4
  314. package/src/compiler/node-builder.ts +130 -31
  315. package/src/compiler/option-declarations.ts +33 -103
  316. package/src/compiler/options.ts +23 -62
  317. package/src/compiler/output-paths.ts +5 -18
  318. package/src/compiler/package-entrypoints.ts +345 -0
  319. package/src/compiler/package-json.ts +4 -4
  320. package/src/compiler/parallel-check.ts +543 -147
  321. package/src/compiler/parallel-emit.ts +4 -4
  322. package/src/compiler/parser.ts +166 -47
  323. package/src/compiler/path.ts +22 -2
  324. package/src/compiler/printer/emit-context.ts +16 -0
  325. package/src/compiler/printer/factory-base.ts +10 -3
  326. package/src/compiler/printer/factory.ts +7 -3
  327. package/src/compiler/printer/helpers.ts +10 -1
  328. package/src/compiler/printer/name-generator.ts +24 -2
  329. package/src/compiler/printer/printer.ts +39 -16
  330. package/src/compiler/printer/utilities.ts +8 -2
  331. package/src/compiler/program-checker.ts +53 -5
  332. package/src/compiler/program-utilities.ts +23 -10
  333. package/src/compiler/program.ts +13 -1
  334. package/src/compiler/pseudo-bigint.ts +17 -0
  335. package/src/compiler/regexp-checker.ts +63 -30
  336. package/src/compiler/relations.ts +233 -77
  337. package/src/compiler/reparser.ts +14 -5
  338. package/src/compiler/run-config.ts +1383 -0
  339. package/src/compiler/run-record-read.ts +87 -0
  340. package/src/compiler/run-records.ts +575 -0
  341. package/src/compiler/scanner.ts +166 -120
  342. package/src/compiler/shared-results.ts +3144 -0
  343. package/src/compiler/show-config.ts +18 -1
  344. package/src/compiler/sourcemap.ts +2 -2
  345. package/src/compiler/symbol-accessibility.ts +26 -3
  346. package/src/compiler/symbol.ts +31 -14
  347. package/src/compiler/syntax-kind.ts +188 -187
  348. package/src/compiler/thread-entry.ts +22 -3
  349. package/src/compiler/transformers/alias-references.ts +123 -4
  350. package/src/compiler/transformers/async.ts +2 -17
  351. package/src/compiler/transformers/class-fields.ts +13 -12
  352. package/src/compiler/transformers/commonjs-module.ts +11 -7
  353. package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
  354. package/src/compiler/transformers/declarations-pseudo.ts +2 -4
  355. package/src/compiler/transformers/declarations-resolver.ts +0 -3
  356. package/src/compiler/transformers/declarations-syntactic.ts +1 -21
  357. package/src/compiler/transformers/declarations.ts +136 -49
  358. package/src/compiler/transformers/decorator-metadata.ts +9 -1
  359. package/src/compiler/transformers/destructuring.ts +4 -3
  360. package/src/compiler/transformers/external-module-info.ts +1 -1
  361. package/src/compiler/transformers/jsx.ts +2 -1
  362. package/src/compiler/transformers/reference-resolver.ts +83 -19
  363. package/src/compiler/transformers/runtime-syntax.ts +6 -1
  364. package/src/compiler/transformers/syntax-facts.ts +2 -7
  365. package/src/compiler/transformers/type-eraser.ts +10 -1
  366. package/src/compiler/transformers/type-serialization.ts +3 -2
  367. package/src/compiler/transformers/visitor-base.ts +2 -1
  368. package/src/compiler/transformers/visitor-hooks.ts +9 -4
  369. package/src/compiler/tsc-build.ts +67 -6
  370. package/src/compiler/tsc-cli.ts +35 -4
  371. package/src/compiler/tsc-compile.ts +220 -10
  372. package/src/compiler/tsc-watch.ts +97 -47
  373. package/src/compiler/tsconfig.ts +176 -19
  374. package/src/compiler/type-printer.ts +36 -2
  375. package/src/compiler/types.ts +2 -1
  376. package/src/library/ast.generated.ts +57 -41
  377. package/src/library/compiler-options.generated.ts +117 -103
  378. package/src/library/disk.ts +10 -1
  379. package/src/library/enums.generated.ts +196 -196
@@ -1,7 +1,7 @@
1
1
  // Instantiation: mappers that need the checker, and `instantiateType` for every kind of type.
2
2
  import { lazyObjectFlags, sideOf, sideOfIfAny } from './side-state.js';
3
3
  import { NodeVisitor, getBody, getInitializer, getParameters, getType, getTypeArguments as getTypeArgumentNodes, getTypeParameters as getTypeParameterNodes, } from './ast.js';
4
- import { cachedTypeKey, IndexInfo, Signature, TypeAlias, TypeMapper, emptyTypes, newTypeMapper, SimpleTypeMapper, TypeListCache, } from './checker-types.js';
4
+ import { cachedTypeKey, IndexInfo, Signature, TypeAlias, TypeMapper, emptyTypes, newTypeMapper, SimpleTypeMapper, TypeListCache, getMappedType, } from './checker-types.js';
5
5
  import { createDeferredTypeReference, createNormalizedTypeReference, getIntersectionType, getIntersectionTypeEx, getPropagatingFlagsOfTypes, getTemplateLiteralType, getTypeArguments, getUnionTypeEx, newObjectType, aliasKey, typesOf, typeListHash, } from './checker-type-factory.js';
6
6
  import { getOuterTypeParameters } from './checker-declared-types.js';
7
7
  import { getSymbolFromTypeReference, getResolvedSymbolOfIdentifier } from './checker-type-nodes.js';
@@ -10,6 +10,7 @@ import { getConstraintDeclaration } from './checker-declared-types.js';
10
10
  import { isTypeAssignableTo } from './relations.js';
11
11
  import { getFirstIdentifier } from './checker-symbols.js';
12
12
  import { copyDeclarations, declarationCount, getDeclarations, getSymbolId, } from './symbol.js';
13
+ import { symbolToString } from './type-printer.js';
13
14
  // ---- Mappers that need the checker
14
15
  /** Applies `m1`, then instantiates its result with `m2`, or applies `m2` when `m1` doesn't map. */
15
16
  export class CompositeTypeMapper extends TypeMapper {
@@ -23,8 +24,8 @@ export class CompositeTypeMapper extends TypeMapper {
23
24
  this.m2 = m2;
24
25
  }
25
26
  map(type) {
26
- const t1 = this.m1.map(type);
27
- return t1 !== type ? instantiateType(this.c, t1, this.m2) : this.m2.map(type);
27
+ const t1 = getMappedType(type, this.m1);
28
+ return t1 !== type ? instantiateType(this.c, t1, this.m2) : getMappedType(type, this.m2);
28
29
  }
29
30
  }
30
31
  /** Records unreliable or unmeasurable variance when it sees a marker type. */
@@ -103,25 +104,36 @@ export function instantiateTypeWithAlias(c, type, mapper, alias) {
103
104
  if (!could && (type.alias === undefined || !aliasCouldContainTypeVariables(c, type)))
104
105
  return type;
105
106
  if (c.instantiationDepth === 100 || c.instantiationCount >= 5000000) {
106
- // Probably infinitely expanding generic types; stop with the error type.
107
- c.error(c.currentNode, 737 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
107
+ // Probably infinitely expanding generic types; stop with the error type, naming the types whose
108
+ // instantiations nest three or more times.
109
+ const circularTypeNames = getCircularTypeNames(c);
110
+ if (circularTypeNames.length === 1)
111
+ c.error(c.currentNode, 1193 /* Diagnostics.Instantiations_of_type_0_appear_infinitely_circular */, circularTypeNames[0]);
112
+ else if (circularTypeNames.length > 1)
113
+ c.error(c.currentNode, 1194 /* Diagnostics.Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0 */, quotedAndCommaSeparated(circularTypeNames));
114
+ else
115
+ c.error(c.currentNode, 744 /* Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite */);
108
116
  return c.errorType;
109
117
  }
110
- const depth = c.activeMapperDepth;
111
- const activeMappers = c.activeMappers;
112
- let index = depth - 1;
113
- while (index >= 0 && activeMappers[index] !== mapper)
114
- index--;
118
+ const depth = c.activeMapperDepth | 0;
119
+ const mapperId = mapper.id | 0;
120
+ let index = (depth - 1) | 0;
121
+ while (index >= 0 && c.activeMapperIds[index] !== mapperId)
122
+ index = (index - 1) | 0;
115
123
  if (index === -1) {
116
124
  // A newly active mapper has no cached instantiations; its cache is created when a nested
117
125
  // instantiation with the same mapper stores one.
118
- if (depth < activeMappers.length) {
119
- activeMappers[depth] = mapper;
126
+ if (depth === c.activeMapperIds.length) {
127
+ const grown = new Int32Array(depth * 2);
128
+ grown.set(c.activeMapperIds);
129
+ c.activeMapperIds = grown;
130
+ }
131
+ c.activeMapperIds[depth] = mapperId;
132
+ if (depth < c.activeMapperCaches.length) {
120
133
  c.activeMapperCaches[depth] = undefined;
121
134
  c.activeMapperAliasCaches[depth] = undefined;
122
135
  }
123
136
  else {
124
- activeMappers.push(mapper);
125
137
  c.activeMapperCaches.push(undefined);
126
138
  c.activeMapperAliasCaches.push(undefined);
127
139
  }
@@ -144,7 +156,13 @@ export function instantiateTypeWithAlias(c, type, mapper, alias) {
144
156
  }
145
157
  c.instantiationCount++;
146
158
  c.totalInstantiations++;
147
- c.instantiationDepth++;
159
+ const instantiationDepth = c.instantiationDepth;
160
+ const instantiationStack = c.instantiationStack;
161
+ if (instantiationDepth < instantiationStack.length)
162
+ instantiationStack[instantiationDepth] = type;
163
+ else
164
+ instantiationStack.push(type);
165
+ c.instantiationDepth = instantiationDepth + 1;
148
166
  const result = instantiateTypeWorker(c, type, mapper, alias);
149
167
  if (index === -1) {
150
168
  // The mapper's slot stays until it is reused; its caches are released now.
@@ -187,6 +205,33 @@ export function instantiateTypeWithAlias(c, type, mapper, alias) {
187
205
  c.instantiationDepth--;
188
206
  return result;
189
207
  }
208
+ /**
209
+ * The names of the types that are instantiated three or more times on the current instantiation stack, by
210
+ * their alias where they have one, in the order they reach the third, each once.
211
+ */
212
+ function getCircularTypeNames(c) {
213
+ const counts = new Map();
214
+ const names = [];
215
+ const stack = c.instantiationStack;
216
+ for (let i = 0; i < c.instantiationDepth; i++) {
217
+ const t = stack[i];
218
+ const count = (counts.get(t) ?? 0) + 1;
219
+ counts.set(t, count);
220
+ if (count !== 3)
221
+ continue;
222
+ const symbol = t.alias !== undefined ? t.alias.symbol : t.symbol;
223
+ if (symbol === undefined || symbol.name.length === 0 || symbol.name.charCodeAt(0) === 0xfffe)
224
+ continue;
225
+ const name = symbolToString(c, symbol);
226
+ if (!names.includes(name))
227
+ names.push(name);
228
+ }
229
+ return names;
230
+ }
231
+ /** `'a', 'b', 'c'`. */
232
+ export function quotedAndCommaSeparated(items) {
233
+ return items.map((item) => "'" + item + "'").join(', ');
234
+ }
190
235
  function aliasCouldContainTypeVariables(c, type) {
191
236
  const alias = type.alias;
192
237
  if (alias === undefined || alias.typeArguments.length === 0)
@@ -261,18 +306,18 @@ function isNonGenericTopLevelType(type) {
261
306
  return false;
262
307
  let declaration;
263
308
  for (const d of getDeclarations(alias.symbol))
264
- if (d.kind === 266 /* SyntaxKind.TypeAliasDeclaration */ || d.kind === 345 /* SyntaxKind.JSTypeAliasDeclaration */) {
309
+ if (d.kind === 267 /* SyntaxKind.TypeAliasDeclaration */ || d.kind === 346 /* SyntaxKind.JSTypeAliasDeclaration */) {
265
310
  declaration = d;
266
311
  break;
267
312
  }
268
313
  if (declaration === undefined)
269
314
  return false;
270
315
  for (let n = declaration.parent; n !== undefined; n = n.parent) {
271
- if (n.kind === 307 /* SyntaxKind.SourceFile */)
316
+ if (n.kind === 308 /* SyntaxKind.SourceFile */)
272
317
  return true;
273
- if (n.kind === 268 /* SyntaxKind.ModuleDeclaration */)
318
+ if (n.kind === 269 /* SyntaxKind.ModuleDeclaration */)
274
319
  return false;
275
- if (n.kind !== 269 /* SyntaxKind.ModuleBlock */)
320
+ if (n.kind !== 270 /* SyntaxKind.ModuleBlock */)
276
321
  return false;
277
322
  }
278
323
  return false;
@@ -280,7 +325,7 @@ function isNonGenericTopLevelType(type) {
280
325
  function instantiateTypeWorker(c, type, mapper, alias) {
281
326
  const flags = type.flags;
282
327
  if ((flags & 524288 /* TypeFlags.TypeParameter */) !== 0)
283
- return mapper.map(type);
328
+ return getMappedType(type, mapper);
284
329
  if ((flags & 1048576 /* TypeFlags.Object */) !== 0) {
285
330
  const objectFlags = type.objectFlags;
286
331
  if ((objectFlags & (4 /* ObjectFlags.Reference */ | 16 /* ObjectFlags.Anonymous */ | 32 /* ObjectFlags.Mapped */)) === 0)
@@ -357,7 +402,7 @@ function instantiateTypeWorker(c, type, mapper, alias) {
357
402
  }
358
403
  /** Instantiates anonymous types, deferred references, instantiation expressions and mapped types. */
359
404
  function getObjectTypeInstantiation(c, type, mapper, alias) {
360
- if ((type.objectFlags & 4 /* ObjectFlags.Reference */) === 0 && c.withoutOuterTypeParameters.get(type.id) !== 0)
405
+ if ((type.objectFlags & 4 /* ObjectFlags.Reference */) === 0 && c.withoutOuterTypeParameters.has(type.id))
361
406
  return type;
362
407
  let declaration;
363
408
  if ((type.objectFlags & 4 /* ObjectFlags.Reference */) !== 0)
@@ -403,7 +448,7 @@ function getObjectTypeInstantiation(c, type, mapper, alias) {
403
448
  }
404
449
  if (typeParameters.length === 0) {
405
450
  if ((type.objectFlags & 4 /* ObjectFlags.Reference */) === 0)
406
- c.withoutOuterTypeParameters.set(type.id, 1);
451
+ c.withoutOuterTypeParameters.add(type.id);
407
452
  return type;
408
453
  }
409
454
  // The type arguments, mapped as `combineTypeMappers(c, type.mapper, mapper)` maps them, into a
@@ -412,10 +457,10 @@ function getObjectTypeInstantiation(c, type, mapper, alias) {
412
457
  const mapped = c.freeTypeLists.pop() ?? [];
413
458
  for (const tp of typeParameters) {
414
459
  if (typeMapper === undefined)
415
- mapped.push(mapper.map(tp));
460
+ mapped.push(getMappedType(tp, mapper));
416
461
  else {
417
- const t1 = typeMapper.map(tp);
418
- mapped.push(t1 !== tp ? instantiateType(c, t1, mapper) : mapper.map(tp));
462
+ const t1 = getMappedType(tp, typeMapper);
463
+ mapped.push(t1 !== tp ? instantiateType(c, t1, mapper) : getMappedType(tp, mapper));
419
464
  }
420
465
  }
421
466
  const newAlias = alias ?? instantiateTypeAlias(c, type.alias, mapper);
@@ -481,9 +526,9 @@ class ReferenceFinder extends NodeVisitor {
481
526
  containsReference(node) {
482
527
  const tp = this.tp;
483
528
  switch (node.kind) {
484
- case 198 /* SyntaxKind.ThisType */:
529
+ case 199 /* SyntaxKind.ThisType */:
485
530
  return tp.isThisType;
486
- case 184 /* SyntaxKind.TypeReference */: {
531
+ case 185 /* SyntaxKind.TypeReference */: {
487
532
  const args = getTypeArgumentNodes(node);
488
533
  if (!tp.isThisType &&
489
534
  (args === undefined || args.nodes.length === 0) &&
@@ -491,14 +536,14 @@ class ReferenceFinder extends NodeVisitor {
491
536
  return true;
492
537
  break;
493
538
  }
494
- case 187 /* SyntaxKind.TypeQuery */: {
539
+ case 188 /* SyntaxKind.TypeQuery */: {
495
540
  const firstIdentifier = getFirstIdentifier(node.exprName);
496
541
  if (firstIdentifier.kind !== 109 /* SyntaxKind.ThisKeyword */ &&
497
542
  !(firstIdentifier.kind === 79 /* SyntaxKind.Identifier */ && firstIdentifier.text === 'this')) {
498
543
  const symbol = getResolvedSymbolOfIdentifier(this.c, firstIdentifier);
499
544
  const tpDeclaration = tp.symbol.declaration;
500
545
  let scope;
501
- if (tpDeclaration.kind === 169 /* SyntaxKind.TypeParameter */)
546
+ if (tpDeclaration.kind === 170 /* SyntaxKind.TypeParameter */)
502
547
  scope = tpDeclaration.parent;
503
548
  else if (tp.isThisType)
504
549
  scope = tpDeclaration;
@@ -516,8 +561,8 @@ class ReferenceFinder extends NodeVisitor {
516
561
  }
517
562
  return true;
518
563
  }
519
- case 175 /* SyntaxKind.MethodDeclaration */:
520
- case 174 /* SyntaxKind.MethodSignature */: {
564
+ case 176 /* SyntaxKind.MethodDeclaration */:
565
+ case 175 /* SyntaxKind.MethodSignature */: {
521
566
  const returnType = getType(node);
522
567
  if (returnType === undefined && getBody(node) !== undefined)
523
568
  return true;
@@ -558,9 +603,9 @@ export function isTypeParameterPossiblyReferenced(c, tp, node) {
558
603
  const finder = new ReferenceFinder(c, typeParameter);
559
604
  const container = tp.symbol.declaration.parent;
560
605
  for (let n = node; n !== container; n = n.parent) {
561
- if (n === undefined || n.kind === 242 /* SyntaxKind.Block */)
606
+ if (n === undefined || n.kind === 243 /* SyntaxKind.Block */)
562
607
  return true;
563
- if (n.kind === 195 /* SyntaxKind.ConditionalType */ && finder.containsReference(n.extendsType))
608
+ if (n.kind === 196 /* SyntaxKind.ConditionalType */ && finder.containsReference(n.extendsType))
564
609
  return true;
565
610
  }
566
611
  return finder.containsReference(node);
@@ -697,11 +742,18 @@ export function instantiateSymbol(c, symbol, mapper) {
697
742
  * is resolved yet, so lazily instantiated members record it when tsgo would instantiate them.
698
743
  */
699
744
  export function keepsSymbolUnderInstantiation(c, symbol, mapper) {
700
- const symbolId = getSymbolId(symbol);
701
- if (mapper.mapsThisOnly() && isThisless(symbol))
745
+ if (mapper.mapsThisOnly() && isThisless(symbol)) {
746
+ getSymbolId(symbol);
702
747
  return true;
703
- // A resolved type that can't change under instantiation keeps the symbol.
704
- const type = c.symbolTypes.get(symbolId);
748
+ }
749
+ return keepsSymbolTypeUnderInstantiation(c, symbol);
750
+ }
751
+ /**
752
+ * Whether the resolved type of `symbol` (and its write type) can't change under instantiation, so that
753
+ * `instantiateSymbol` keeps it whatever the mapper. Once true, it stays true: types are resolved once.
754
+ */
755
+ export function keepsSymbolTypeUnderInstantiation(c, symbol) {
756
+ const type = c.symbolTypes.get(getSymbolId(symbol));
705
757
  if (type !== undefined && !couldContainTypeVariables(c, type)) {
706
758
  if ((symbol.flags & 65536 /* SymbolFlags.SetAccessor */) === 0)
707
759
  return true;
@@ -723,7 +775,7 @@ export function newInstantiatedSymbol(c, symbol, mapper) {
723
775
  result.checkFlags =
724
776
  1 /* CheckFlags.Instantiated */ |
725
777
  (symbol.checkFlags &
726
- (8 /* CheckFlags.Readonly */ | 4096 /* CheckFlags.Late */ | 16384 /* CheckFlags.OptionalParameter */ | 32768 /* CheckFlags.RestParameter */));
778
+ (8 /* CheckFlags.Readonly */ | 32768 /* CheckFlags.Late */ | 131072 /* CheckFlags.OptionalParameter */ | 262144 /* CheckFlags.RestParameter */));
727
779
  copyDeclarations(result, symbol);
728
780
  result.parent = symbol.parent;
729
781
  result.valueDeclaration = symbol.valueDeclaration;
@@ -739,15 +791,15 @@ export function isThisless(symbol) {
739
791
  return false;
740
792
  const declaration = symbol.declaration;
741
793
  switch (declaration.kind) {
742
- case 170 /* SyntaxKind.Parameter */:
743
- case 173 /* SyntaxKind.PropertyDeclaration */:
744
- case 172 /* SyntaxKind.PropertySignature */:
794
+ case 171 /* SyntaxKind.Parameter */:
795
+ case 174 /* SyntaxKind.PropertyDeclaration */:
796
+ case 173 /* SyntaxKind.PropertySignature */:
745
797
  return isThislessVariableLikeDeclaration(declaration);
746
- case 175 /* SyntaxKind.MethodDeclaration */:
747
- case 174 /* SyntaxKind.MethodSignature */:
748
- case 177 /* SyntaxKind.Constructor */:
749
- case 178 /* SyntaxKind.GetAccessor */:
750
- case 179 /* SyntaxKind.SetAccessor */:
798
+ case 176 /* SyntaxKind.MethodDeclaration */:
799
+ case 175 /* SyntaxKind.MethodSignature */:
800
+ case 178 /* SyntaxKind.Constructor */:
801
+ case 179 /* SyntaxKind.GetAccessor */:
802
+ case 180 /* SyntaxKind.SetAccessor */:
751
803
  return isThislessFunctionLikeDeclaration(declaration);
752
804
  }
753
805
  return false;
@@ -769,11 +821,11 @@ function isThislessType(node) {
769
821
  case 115 /* SyntaxKind.VoidKeyword */:
770
822
  case 157 /* SyntaxKind.UndefinedKeyword */:
771
823
  case 146 /* SyntaxKind.NeverKeyword */:
772
- case 202 /* SyntaxKind.LiteralType */:
824
+ case 203 /* SyntaxKind.LiteralType */:
773
825
  return true;
774
- case 189 /* SyntaxKind.ArrayType */:
826
+ case 190 /* SyntaxKind.ArrayType */:
775
827
  return isThislessType(node.elementType);
776
- case 184 /* SyntaxKind.TypeReference */: {
828
+ case 185 /* SyntaxKind.TypeReference */: {
777
829
  const args = getTypeArgumentNodes(node);
778
830
  if (args !== undefined)
779
831
  for (const a of args.nodes)
@@ -786,7 +838,7 @@ function isThislessType(node) {
786
838
  }
787
839
  function isThislessFunctionLikeDeclaration(node) {
788
840
  const returnType = getType(node);
789
- if (node.kind !== 177 /* SyntaxKind.Constructor */ && (returnType === undefined || !isThislessType(returnType)))
841
+ if (node.kind !== 178 /* SyntaxKind.Constructor */ && (returnType === undefined || !isThislessType(returnType)))
790
842
  return false;
791
843
  const parameters = getParameters(node);
792
844
  if (parameters !== undefined)
@@ -1,12 +1,13 @@
1
1
  // JSDoc comment parsing, a port of tsgo's parser/jsdoc.go.
2
2
  //
3
3
  // Comment indentation is measured in UTF-8 bytes, as in tsgo, so comment text matches it exactly.
4
- import { ArrayTypeNode, ExpressionWithTypeArguments, Identifier, JSDoc, JSDocAugmentsTag, JSDocCallbackTag, JSDocDeprecatedTag, JSDocImplementsTag, JSDocImportTag, JSDocLink, JSDocLinkCode, JSDocLinkPlain, JSDocNameReference, JSDocOverloadTag, JSDocOverrideTag, JSDocParameterOrPropertyTag, JSDocPrivateTag, JSDocProtectedTag, JSDocPublicTag, JSDocReadonlyTag, JSDocReturnTag, JSDocSatisfiesTag, JSDocSeeTag, JSDocSignature, JSDocTemplateTag, JSDocText, JSDocThisTag, JSDocThrowsTag, JSDocTypeExpression, JSDocTypeLiteral, JSDocTypeTag, JSDocTypedefTag, JSDocUnknownTag, ModuleDeclaration, NodeList, PropertyAccessExpression, QualifiedName, TypeParameterDeclaration, TypeReferenceNode, getTagName, getType, } from './ast.js';
4
+ import { ArrayTypeNode, ExpressionWithTypeArguments, Identifier, JSDoc, JSDocAugmentsTag, JSDocCallbackTag, JSDocDeprecatedTag, JSDocImplementsTag, JSDocImportTag, JSDocLink, JSDocLinkCode, JSDocLinkPlain, JSDocNameReference, JSDocOverloadTag, JSDocOverrideTag, JSDocParameterOrPropertyTag, JSDocPrivateTag, JSDocProtectedTag, JSDocPublicTag, JSDocReadonlyTag, JSDocReturnTag, JSDocSatisfiesTag, JSDocSeeTag, JSDocSignature, JSDocTemplateTag, JSDocText, JSDocThisTag, JSDocThrowsTag, JSDocTypeExpression, JSDocTypeLiteral, JSDocTypeTag, JSDocTypedefTag, JSDocUnknownTag, ModuleDeclaration, NodeList, PropertyAccessExpression, QualifiedName, TypeParameterDeclaration, TypeReferenceNode, getTagName, getType, getText, } from './ast.js';
5
5
  import { isReservedWord, tokenIsIdentifierOrKeyword } from './ast-utilities.js';
6
6
  import { isWhiteSpaceLike } from './character-codes.js';
7
7
  import { Diagnostic } from './diagnostics.js';
8
8
  import { Reparser } from './reparser.js';
9
9
  import { getLeadingCommentRanges, getTrailingCommentRanges } from './scanner.js';
10
+ import { IdentifierName } from './identifier-name.js';
10
11
  /** Comment text collected while parsing, with the indentation it has reached. */
11
12
  class CommentText {
12
13
  parts = [];
@@ -27,13 +28,13 @@ class CommentText {
27
28
  export function getJSDocCommentRanges(node, text) {
28
29
  const ranges = [];
29
30
  switch (node.kind) {
30
- case 170 /* SyntaxKind.Parameter */:
31
- case 169 /* SyntaxKind.TypeParameter */:
32
- case 219 /* SyntaxKind.FunctionExpression */:
33
- case 220 /* SyntaxKind.ArrowFunction */:
34
- case 218 /* SyntaxKind.ParenthesizedExpression */:
35
- case 261 /* SyntaxKind.VariableDeclaration */:
36
- case 282 /* SyntaxKind.ExportSpecifier */:
31
+ case 171 /* SyntaxKind.Parameter */:
32
+ case 170 /* SyntaxKind.TypeParameter */:
33
+ case 220 /* SyntaxKind.FunctionExpression */:
34
+ case 221 /* SyntaxKind.ArrowFunction */:
35
+ case 219 /* SyntaxKind.ParenthesizedExpression */:
36
+ case 262 /* SyntaxKind.VariableDeclaration */:
37
+ case 283 /* SyntaxKind.ExportSpecifier */:
37
38
  addRanges(ranges, getTrailingCommentRanges(text, node.pos));
38
39
  addRanges(ranges, getLeadingCommentRanges(text, node.pos));
39
40
  break;
@@ -656,7 +657,7 @@ export class JSDocParser {
656
657
  typeExpression = nestedTypeLiteral;
657
658
  isNameFirst = true;
658
659
  }
659
- const kind = target === 1 /* PropertyLikeParse.Property */ ? 340 /* SyntaxKind.JSDocPropertyTag */ : 333 /* SyntaxKind.JSDocParameterTag */;
660
+ const kind = target === 1 /* PropertyLikeParse.Property */ ? 341 /* SyntaxKind.JSDocPropertyTag */ : 334 /* SyntaxKind.JSDocParameterTag */;
660
661
  return p.finishNode(new JSDocParameterOrPropertyTag(kind, tagName, name, isBracketed, typeExpression, isNameFirst, comment), start);
661
662
  }
662
663
  parseNestedTypeLiteral(typeExpression, name, target, indent) {
@@ -675,24 +676,24 @@ export class JSDocParser {
675
676
  p.rewind(state);
676
677
  break;
677
678
  }
678
- if (child.kind === 333 /* SyntaxKind.JSDocParameterTag */ || child.kind === 340 /* SyntaxKind.JSDocPropertyTag */)
679
+ if (child.kind === 334 /* SyntaxKind.JSDocParameterTag */ || child.kind === 341 /* SyntaxKind.JSDocPropertyTag */)
679
680
  children.push(child);
680
- else if (child.kind === 337 /* SyntaxKind.JSDocTemplateTag */)
681
+ else if (child.kind === 338 /* SyntaxKind.JSDocTemplateTag */)
681
682
  this.reportTemplateAfterTypedef(child);
682
683
  }
683
684
  if (children.length === 0)
684
685
  return undefined;
685
- const literal = p.finishNode(new JSDocTypeLiteral(children, type.kind === 189 /* SyntaxKind.ArrayType */), pos);
686
+ const literal = p.finishNode(new JSDocTypeLiteral(children, type.kind === 190 /* SyntaxKind.ArrayType */), pos);
686
687
  return p.finishNode(new JSDocTypeExpression(literal), pos);
687
688
  }
688
689
  reportTemplateAfterTypedef(tag) {
689
690
  const tagName = getTagName(tag);
690
- this.p.parseErrorAt(tagName.pos, tagName.end, 1768 /* Diagnostics.A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag */);
691
+ this.p.parseErrorAt(tagName.pos, tagName.end, 1788 /* Diagnostics.A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag */);
691
692
  return true;
692
693
  }
693
694
  parseReturnTag(previousTags, start, tagName, indent, indentText) {
694
695
  const p = this.p;
695
- if (hasTagOfKind(previousTags, 334 /* SyntaxKind.JSDocReturnTag */))
696
+ if (hasTagOfKind(previousTags, 335 /* SyntaxKind.JSDocReturnTag */))
696
697
  p.parseErrorAt(tagName.pos, p.scanner.getTokenStart(), 173 /* Diagnostics.X_0_tag_already_specified */, [tagName.text]);
697
698
  const typeExpression = this.tryParseTypeExpression();
698
699
  return p.finishNode(new JSDocReturnTag(tagName, typeExpression, this.parseTrailingTagComments(start, p.nodePos(), indent, indentText)), start);
@@ -700,7 +701,7 @@ export class JSDocParser {
700
701
  /** `indent` -1 skips trailing comments, as for a type tag nested in a typedef. */
701
702
  parseTypeTag(previousTags, start, tagName, indent, indentText) {
702
703
  const p = this.p;
703
- if (hasTagOfKind(previousTags, 336 /* SyntaxKind.JSDocTypeTag */))
704
+ if (hasTagOfKind(previousTags, 337 /* SyntaxKind.JSDocTypeTag */))
704
705
  p.parseErrorAt(tagName.pos, p.scanner.getTokenStart(), 173 /* Diagnostics.X_0_tag_already_specified */, [tagName.text]);
705
706
  const typeExpression = this.parseJSDocTypeExpression(true);
706
707
  const comments = indent !== -1 ? this.parseTrailingTagComments(start, p.nodePos(), indent, indentText) : undefined;
@@ -790,7 +791,7 @@ export class JSDocParser {
790
791
  const typeNameOrNamespaceName = this.parseJSDocIdentifierName(undefined);
791
792
  if (this.parseOptionalJsdoc(24 /* SyntaxKind.DotToken */)) {
792
793
  const body = this.parseJSDocTypeNameWithNamespace(true);
793
- const jsDocNamespaceNode = new ModuleDeclaration(undefined, 145 /* SyntaxKind.NamespaceKeyword */, typeNameOrNamespaceName, body);
794
+ const jsDocNamespaceNode = new ModuleDeclaration(undefined, 145 /* SyntaxKind.NamespaceKeyword */, typeNameOrNamespaceName, undefined, body);
794
795
  if (nested)
795
796
  jsDocNamespaceNode.flags |= 32 /* NodeFlags.NestedNamespace */;
796
797
  return p.finishNode(jsDocNamespaceNode, start);
@@ -823,7 +824,7 @@ export class JSDocParser {
823
824
  break;
824
825
  }
825
826
  hasChildren = true;
826
- if (child.kind === 337 /* SyntaxKind.JSDocTemplateTag */) {
827
+ if (child.kind === 338 /* SyntaxKind.JSDocTemplateTag */) {
827
828
  this.reportTemplateAfterTypedef(child);
828
829
  }
829
830
  else if (child instanceof JSDocTypeTag) {
@@ -831,9 +832,9 @@ export class JSDocParser {
831
832
  childTypeTag = child;
832
833
  }
833
834
  else {
834
- const lastError = p.parseErrorAtCurrentToken(1762 /* Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags */);
835
+ const lastError = p.parseErrorAtCurrentToken(1782 /* Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags */);
835
836
  if (lastError !== undefined)
836
- lastError.addRelatedInfo(newDiagnosticAtStart(1763 /* Diagnostics.The_tag_was_first_specified_here */));
837
+ lastError.addRelatedInfo(newDiagnosticAtStart(1783 /* Diagnostics.The_tag_was_first_specified_here */));
837
838
  }
838
839
  }
839
840
  else {
@@ -841,7 +842,7 @@ export class JSDocParser {
841
842
  }
842
843
  }
843
844
  if (hasChildren) {
844
- const isArrayType = typeExpressionType !== undefined && typeExpressionType.kind === 189 /* SyntaxKind.ArrayType */;
845
+ const isArrayType = typeExpressionType !== undefined && typeExpressionType.kind === 190 /* SyntaxKind.ArrayType */;
845
846
  const jsdocTypeLiteral = new JSDocTypeLiteral(jsdocPropertyTags, isArrayType);
846
847
  const childType = childTypeTag !== undefined && childTypeTag.typeExpression !== undefined
847
848
  ? getType(childTypeTag.typeExpression)
@@ -889,7 +890,7 @@ export class JSDocParser {
889
890
  p.rewind(state);
890
891
  break;
891
892
  }
892
- if (child.kind === 337 /* SyntaxKind.JSDocTemplateTag */)
893
+ if (child.kind === 338 /* SyntaxKind.JSDocTemplateTag */)
893
894
  this.reportTemplateAfterTypedef(child);
894
895
  else
895
896
  parameters.push(child);
@@ -903,7 +904,7 @@ export class JSDocParser {
903
904
  const state = p.mark();
904
905
  if (this.parseOptionalJsdoc(59 /* SyntaxKind.AtToken */)) {
905
906
  const tag = this.parseTag([], indent);
906
- if (tag.kind === 334 /* SyntaxKind.JSDocReturnTag */)
907
+ if (tag.kind === 335 /* SyntaxKind.JSDocReturnTag */)
907
908
  returnTag = tag;
908
909
  }
909
910
  if (returnTag === undefined)
@@ -1076,16 +1077,17 @@ export class JSDocParser {
1076
1077
  p.parseErrorAtCurrentToken(293 /* Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here */, [
1077
1078
  p.scanner.getTokenText(),
1078
1079
  ]);
1079
- const missing = p.newIdentifier('');
1080
+ const missing = p.newIdentifier(new IdentifierName(''));
1080
1081
  p.finishNode(missing, p.nodePos());
1081
1082
  return missing;
1082
1083
  }
1083
1084
  const pos = p.scanner.getTokenStart();
1084
1085
  const end = p.scanner.getTokenEnd();
1085
1086
  const text = p.scanner.getIdentifierValue();
1087
+ const name = p.scanner.getIdentifierName();
1086
1088
  p.internIdentifier(text);
1087
1089
  p.nextTokenJSDoc();
1088
- const result = p.newIdentifier(text);
1090
+ const result = p.newIdentifier(name);
1089
1091
  p.finishNodeWithEnd(result, pos, end);
1090
1092
  return result;
1091
1093
  }
@@ -1116,7 +1118,7 @@ function textsEqual(a, b) {
1116
1118
  while (!(a instanceof Identifier) || !(b instanceof Identifier)) {
1117
1119
  if (a instanceof QualifiedName &&
1118
1120
  b instanceof QualifiedName &&
1119
- a.right.text === b.right.text) {
1121
+ getText(a.right) === getText(b.right)) {
1120
1122
  a = a.left;
1121
1123
  b = b.left;
1122
1124
  }
@@ -1,4 +1,3 @@
1
- import type { Symbol } from './symbol.js';
2
1
  /** Links are stored in pages of 256 ids. */
3
2
  export declare const enum LinkPaging {
4
3
  Bits = 8,
@@ -66,13 +65,16 @@ export declare class PagedIdSet {
66
65
  clear(): void;
67
66
  }
68
67
  /**
69
- * A page of a `CompactSymbolLinkTable`: one bit per id of the page in eight 32-id words, the number
70
- * of symbols stored before each word, and the symbols in id order. The words are fields, so a
71
- * lookup reads one object before the symbols. The class isn't generic, so natively the words are
72
- * 32-bit fields: every write stores an int32.
68
+ * A page of a `CompactLinkTable`'s presence bits: one bit per id of the page in eight 32-id words, the
69
+ * number of values stored before each word, and the position of the page's values in the table's
70
+ * `values`. The words are fields, so a lookup reads one object before the values. Natively the words
71
+ * are 32-bit fields, since every write stores an int32. A class that is generic or has a generic
72
+ * subclass keeps its number fields as doubles, so the values the bits index are in the table's
73
+ * `values`, not in this class or a subclass.
73
74
  */
74
75
  declare class CompactLinkPage {
75
- readonly values: Symbol[];
76
+ /** The position of the page's values in the table's `values`. */
77
+ readonly position: number;
76
78
  private w0;
77
79
  private w1;
78
80
  private w2;
@@ -84,29 +86,57 @@ declare class CompactLinkPage {
84
86
  /** Byte `w & 3` of `before0` (words 1 to 3) or of `before1` (words 4 to 7): the values before word `w`. */
85
87
  private before0;
86
88
  private before1;
87
- constructor();
89
+ constructor(position: number);
88
90
  /** The presence bits of ids `32 * word` to `32 * word + 31`. */
89
91
  word(word: number): number;
90
92
  setWord(word: number, bits: number): void;
91
93
  /** The index in `values` of the value of `slot` (an id's low bits), or of where it goes. */
92
94
  rank(slot: number, bits: number): number;
93
- /** Adds `delta` to the counts of the words after `word`. */
95
+ /**
96
+ * Adds 1 (`delta` 1) or subtracts 1 (`delta` -1) from the counts of the words after `word`, a byte
97
+ * of `before0` or `before1` each. No byte carries or borrows: a count is at most 224, and a count
98
+ * that goes down includes the value removed.
99
+ */
94
100
  shiftCounts(word: number, delta: number): void;
95
101
  }
96
102
  /**
97
- * Symbols by node id, for ids a checker resolves in one in four to one in eight of the ids of the
98
- * pages it touches, as it resolves the identifiers and names of the files it checks. Pages of
99
- * `LinkPaging.Size` ids keep a presence bit per id and only the symbols stored, so a symbol costs
100
- * about one array slot. A `LinkTable` page costs a slot for every id, and a `Map` entry also
101
- * stores its key and a share of the hash buckets. At fewer values per page than that, the page's
102
- * own allocations outweigh what it saves, and a `SparseLinkTable` costs less.
103
+ * Values by node or symbol id, for ids a checker stores a value for in more than about one in
104
+ * sixteen of the ids of the pages it touches: the symbols it resolves for the identifiers and names
105
+ * of the files it checks (one in four to one in eight), the types and signatures it resolves for
106
+ * their type nodes and calls (one in twelve to one in seventeen), and the symbol columns most
107
+ * symbols leave empty, such as the name type of a property (one in ten to one in three with
108
+ * `--checkers 16`, where every checker touches symbols across the whole program). Pages of
109
+ * `LinkPaging.Size` ids keep a presence bit per id and only the values stored, so a value costs
110
+ * about one array slot. A `LinkTable` page costs a slot for every id, and a `Map` entry also stores
111
+ * its key and a share of the hash buckets. At fewer values per page than that, the page's own
112
+ * allocations outweigh what it saves, and a `SparseLinkTable` costs less.
103
113
  */
104
- export declare class CompactSymbolLinkTable {
114
+ export declare class CompactLinkTable<T> {
115
+ /**
116
+ * The pages by `id >> LinkPaging.Bits`, up to the highest page stored; undefined where a page stores
117
+ * nothing. A checker stores values in a few percent of the pages of a large program, so the values
118
+ * are kept apart, one list for each page stored, rather than in a second slot per page.
119
+ */
105
120
  readonly pages: (CompactLinkPage | undefined)[];
106
- /** The number of symbols stored. */
121
+ /** The values of each page stored, in id order, at the page's `position`. */
122
+ readonly values: T[][];
123
+ /** The number of values stored. */
107
124
  size: number;
108
- get(id: number): Symbol | undefined;
109
- set(id: number, value: Symbol | undefined): void;
125
+ get(id: number): T | undefined;
126
+ set(id: number, value: T | undefined): void;
127
+ clear(): void;
128
+ }
129
+ /**
130
+ * Int32 values by id, zero where none is stored, in a `CompactLinkTable`: pages of
131
+ * `LinkPaging.Size` ids keep a presence bit per id and only the nonzero values. For columns where a
132
+ * checker stores a value for fewer than about one in three of the ids of the pages it touches, such
133
+ * as the reference kinds of the symbols its files reference: an `IntLinkTable` page costs four bytes
134
+ * for every id.
135
+ */
136
+ export declare class CompactIntLinkTable {
137
+ private readonly table;
138
+ get(id: number): number;
139
+ set(id: number, value: number): void;
110
140
  clear(): void;
111
141
  }
112
142
  export {};