@engine262/engine262 0.0.1-07c72085c73f960bcf0aa06db807321f3b446518

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 (941) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +179 -0
  3. package/bin/engine262.js +6 -0
  4. package/declaration/abstract-ops/all.d.mts +35 -0
  5. package/declaration/abstract-ops/all.d.mts.map +1 -0
  6. package/declaration/abstract-ops/arguments-operations.d.mts +17 -0
  7. package/declaration/abstract-ops/arguments-operations.d.mts.map +1 -0
  8. package/declaration/abstract-ops/array-objects.d.mts +23 -0
  9. package/declaration/abstract-ops/array-objects.d.mts.map +1 -0
  10. package/declaration/abstract-ops/arraybuffer-objects.d.mts +44 -0
  11. package/declaration/abstract-ops/arraybuffer-objects.d.mts.map +1 -0
  12. package/declaration/abstract-ops/async-function-operations.d.mts +9 -0
  13. package/declaration/abstract-ops/async-function-operations.d.mts.map +1 -0
  14. package/declaration/abstract-ops/async-generator-objects.d.mts +42 -0
  15. package/declaration/abstract-ops/async-generator-objects.d.mts.map +1 -0
  16. package/declaration/abstract-ops/data-types-and-values.d.mts +6 -0
  17. package/declaration/abstract-ops/data-types-and-values.d.mts.map +1 -0
  18. package/declaration/abstract-ops/dataview-objects.d.mts +32 -0
  19. package/declaration/abstract-ops/dataview-objects.d.mts.map +1 -0
  20. package/declaration/abstract-ops/date-objects.d.mts +46 -0
  21. package/declaration/abstract-ops/date-objects.d.mts.map +1 -0
  22. package/declaration/abstract-ops/error-objects.d.mts +5 -0
  23. package/declaration/abstract-ops/error-objects.d.mts.map +1 -0
  24. package/declaration/abstract-ops/execution-contexts.d.mts +22 -0
  25. package/declaration/abstract-ops/execution-contexts.d.mts.map +1 -0
  26. package/declaration/abstract-ops/function-operations.d.mts +85 -0
  27. package/declaration/abstract-ops/function-operations.d.mts.map +1 -0
  28. package/declaration/abstract-ops/generator-operations.d.mts +37 -0
  29. package/declaration/abstract-ops/generator-operations.d.mts.map +1 -0
  30. package/declaration/abstract-ops/global-object.d.mts +7 -0
  31. package/declaration/abstract-ops/global-object.d.mts.map +1 -0
  32. package/declaration/abstract-ops/immutable-prototype-objects.d.mts +7 -0
  33. package/declaration/abstract-ops/immutable-prototype-objects.d.mts.map +1 -0
  34. package/declaration/abstract-ops/import-calls.d.mts +5 -0
  35. package/declaration/abstract-ops/import-calls.d.mts.map +1 -0
  36. package/declaration/abstract-ops/iterator-operations.d.mts +56 -0
  37. package/declaration/abstract-ops/iterator-operations.d.mts.map +1 -0
  38. package/declaration/abstract-ops/module-namespace-exotic-objects.d.mts +13 -0
  39. package/declaration/abstract-ops/module-namespace-exotic-objects.d.mts.map +1 -0
  40. package/declaration/abstract-ops/module-records.d.mts +34 -0
  41. package/declaration/abstract-ops/module-records.d.mts.map +1 -0
  42. package/declaration/abstract-ops/notational-conventions.d.mts +8 -0
  43. package/declaration/abstract-ops/notational-conventions.d.mts.map +1 -0
  44. package/declaration/abstract-ops/object-operations.d.mts +96 -0
  45. package/declaration/abstract-ops/object-operations.d.mts.map +1 -0
  46. package/declaration/abstract-ops/objects.d.mts +31 -0
  47. package/declaration/abstract-ops/objects.d.mts.map +1 -0
  48. package/declaration/abstract-ops/private-names.d.mts +36 -0
  49. package/declaration/abstract-ops/private-names.d.mts.map +1 -0
  50. package/declaration/abstract-ops/promise-operations.d.mts +62 -0
  51. package/declaration/abstract-ops/promise-operations.d.mts.map +1 -0
  52. package/declaration/abstract-ops/proxy-objects.d.mts +7 -0
  53. package/declaration/abstract-ops/proxy-objects.d.mts.map +1 -0
  54. package/declaration/abstract-ops/realms.d.mts +174 -0
  55. package/declaration/abstract-ops/realms.d.mts.map +1 -0
  56. package/declaration/abstract-ops/reference-operations.d.mts +27 -0
  57. package/declaration/abstract-ops/reference-operations.d.mts.map +1 -0
  58. package/declaration/abstract-ops/regexp-objects.d.mts +40 -0
  59. package/declaration/abstract-ops/regexp-objects.d.mts.map +1 -0
  60. package/declaration/abstract-ops/spec-types.d.mts +39 -0
  61. package/declaration/abstract-ops/spec-types.d.mts.map +1 -0
  62. package/declaration/abstract-ops/string-objects.d.mts +8 -0
  63. package/declaration/abstract-ops/string-objects.d.mts.map +1 -0
  64. package/declaration/abstract-ops/symbol-objects.d.mts +6 -0
  65. package/declaration/abstract-ops/symbol-objects.d.mts.map +1 -0
  66. package/declaration/abstract-ops/testing-comparison.d.mts +46 -0
  67. package/declaration/abstract-ops/testing-comparison.d.mts.map +1 -0
  68. package/declaration/abstract-ops/type-conversion.d.mts +55 -0
  69. package/declaration/abstract-ops/type-conversion.d.mts.map +1 -0
  70. package/declaration/abstract-ops/typedarray-objects.d.mts +33 -0
  71. package/declaration/abstract-ops/typedarray-objects.d.mts.map +1 -0
  72. package/declaration/abstract-ops/weak-operations.d.mts +16 -0
  73. package/declaration/abstract-ops/weak-operations.d.mts.map +1 -0
  74. package/declaration/api-types.d.mts +3 -0
  75. package/declaration/api-types.d.mts.map +1 -0
  76. package/declaration/api.d.mts +63 -0
  77. package/declaration/api.d.mts.map +1 -0
  78. package/declaration/completion.d.mts +163 -0
  79. package/declaration/completion.d.mts.map +1 -0
  80. package/declaration/engine.d.mts +143 -0
  81. package/declaration/engine.d.mts.map +1 -0
  82. package/declaration/environment.d.mts +209 -0
  83. package/declaration/environment.d.mts.map +1 -0
  84. package/declaration/evaluator.d.mts +14 -0
  85. package/declaration/evaluator.d.mts.map +1 -0
  86. package/declaration/helpers.d.mts +92 -0
  87. package/declaration/helpers.d.mts.map +1 -0
  88. package/declaration/inspect.d.mts +4 -0
  89. package/declaration/inspect.d.mts.map +1 -0
  90. package/declaration/intrinsics/AggregateError.d.mts +3 -0
  91. package/declaration/intrinsics/AggregateError.d.mts.map +1 -0
  92. package/declaration/intrinsics/AggregateErrorPrototype.d.mts +3 -0
  93. package/declaration/intrinsics/AggregateErrorPrototype.d.mts.map +1 -0
  94. package/declaration/intrinsics/Array.d.mts +3 -0
  95. package/declaration/intrinsics/Array.d.mts.map +1 -0
  96. package/declaration/intrinsics/ArrayBuffer.d.mts +3 -0
  97. package/declaration/intrinsics/ArrayBuffer.d.mts.map +1 -0
  98. package/declaration/intrinsics/ArrayBufferPrototype.d.mts +3 -0
  99. package/declaration/intrinsics/ArrayBufferPrototype.d.mts.map +1 -0
  100. package/declaration/intrinsics/ArrayIteratorPrototype.d.mts +3 -0
  101. package/declaration/intrinsics/ArrayIteratorPrototype.d.mts.map +1 -0
  102. package/declaration/intrinsics/ArrayPrototype.d.mts +3 -0
  103. package/declaration/intrinsics/ArrayPrototype.d.mts.map +1 -0
  104. package/declaration/intrinsics/ArrayPrototypeShared.d.mts +10 -0
  105. package/declaration/intrinsics/ArrayPrototypeShared.d.mts.map +1 -0
  106. package/declaration/intrinsics/AsyncFromSyncIteratorPrototype.d.mts +6 -0
  107. package/declaration/intrinsics/AsyncFromSyncIteratorPrototype.d.mts.map +1 -0
  108. package/declaration/intrinsics/AsyncFunction.d.mts +3 -0
  109. package/declaration/intrinsics/AsyncFunction.d.mts.map +1 -0
  110. package/declaration/intrinsics/AsyncFunctionPrototype.d.mts +3 -0
  111. package/declaration/intrinsics/AsyncFunctionPrototype.d.mts.map +1 -0
  112. package/declaration/intrinsics/AsyncGeneratorFunction.d.mts +3 -0
  113. package/declaration/intrinsics/AsyncGeneratorFunction.d.mts.map +1 -0
  114. package/declaration/intrinsics/AsyncGeneratorFunctionPrototype.d.mts +3 -0
  115. package/declaration/intrinsics/AsyncGeneratorFunctionPrototype.d.mts.map +1 -0
  116. package/declaration/intrinsics/AsyncGeneratorFunctionPrototypePrototype.d.mts +3 -0
  117. package/declaration/intrinsics/AsyncGeneratorFunctionPrototypePrototype.d.mts.map +1 -0
  118. package/declaration/intrinsics/AsyncIteratorPrototype.d.mts +3 -0
  119. package/declaration/intrinsics/AsyncIteratorPrototype.d.mts.map +1 -0
  120. package/declaration/intrinsics/BigInt.d.mts +8 -0
  121. package/declaration/intrinsics/BigInt.d.mts.map +1 -0
  122. package/declaration/intrinsics/BigIntPrototype.d.mts +3 -0
  123. package/declaration/intrinsics/BigIntPrototype.d.mts.map +1 -0
  124. package/declaration/intrinsics/Boolean.d.mts +8 -0
  125. package/declaration/intrinsics/Boolean.d.mts.map +1 -0
  126. package/declaration/intrinsics/BooleanPrototype.d.mts +3 -0
  127. package/declaration/intrinsics/BooleanPrototype.d.mts.map +1 -0
  128. package/declaration/intrinsics/DataView.d.mts +11 -0
  129. package/declaration/intrinsics/DataView.d.mts.map +1 -0
  130. package/declaration/intrinsics/DataViewPrototype.d.mts +3 -0
  131. package/declaration/intrinsics/DataViewPrototype.d.mts.map +1 -0
  132. package/declaration/intrinsics/Date.d.mts +7 -0
  133. package/declaration/intrinsics/Date.d.mts.map +1 -0
  134. package/declaration/intrinsics/DatePrototype.d.mts +10 -0
  135. package/declaration/intrinsics/DatePrototype.d.mts.map +1 -0
  136. package/declaration/intrinsics/Error.d.mts +3 -0
  137. package/declaration/intrinsics/Error.d.mts.map +1 -0
  138. package/declaration/intrinsics/ErrorPrototype.d.mts +3 -0
  139. package/declaration/intrinsics/ErrorPrototype.d.mts.map +1 -0
  140. package/declaration/intrinsics/FinalizationRegistry.d.mts +16 -0
  141. package/declaration/intrinsics/FinalizationRegistry.d.mts.map +1 -0
  142. package/declaration/intrinsics/FinalizationRegistryPrototype.d.mts +3 -0
  143. package/declaration/intrinsics/FinalizationRegistryPrototype.d.mts.map +1 -0
  144. package/declaration/intrinsics/ForInIteratorPrototype.d.mts +13 -0
  145. package/declaration/intrinsics/ForInIteratorPrototype.d.mts.map +1 -0
  146. package/declaration/intrinsics/Function.d.mts +3 -0
  147. package/declaration/intrinsics/Function.d.mts.map +1 -0
  148. package/declaration/intrinsics/FunctionPrototype.d.mts +10 -0
  149. package/declaration/intrinsics/FunctionPrototype.d.mts.map +1 -0
  150. package/declaration/intrinsics/GeneratorFunction.d.mts +3 -0
  151. package/declaration/intrinsics/GeneratorFunction.d.mts.map +1 -0
  152. package/declaration/intrinsics/GeneratorFunctionPrototype.d.mts +3 -0
  153. package/declaration/intrinsics/GeneratorFunctionPrototype.d.mts.map +1 -0
  154. package/declaration/intrinsics/GeneratorFunctionPrototypePrototype.d.mts +3 -0
  155. package/declaration/intrinsics/GeneratorFunctionPrototypePrototype.d.mts.map +1 -0
  156. package/declaration/intrinsics/IteratorPrototype.d.mts +3 -0
  157. package/declaration/intrinsics/IteratorPrototype.d.mts.map +1 -0
  158. package/declaration/intrinsics/JSON.d.mts +3 -0
  159. package/declaration/intrinsics/JSON.d.mts.map +1 -0
  160. package/declaration/intrinsics/Map.d.mts +12 -0
  161. package/declaration/intrinsics/Map.d.mts.map +1 -0
  162. package/declaration/intrinsics/MapIteratorPrototype.d.mts +7 -0
  163. package/declaration/intrinsics/MapIteratorPrototype.d.mts.map +1 -0
  164. package/declaration/intrinsics/MapPrototype.d.mts +3 -0
  165. package/declaration/intrinsics/MapPrototype.d.mts.map +1 -0
  166. package/declaration/intrinsics/Math.d.mts +4 -0
  167. package/declaration/intrinsics/Math.d.mts.map +1 -0
  168. package/declaration/intrinsics/NativeError.d.mts +6 -0
  169. package/declaration/intrinsics/NativeError.d.mts.map +1 -0
  170. package/declaration/intrinsics/Number.d.mts +7 -0
  171. package/declaration/intrinsics/Number.d.mts.map +1 -0
  172. package/declaration/intrinsics/NumberPrototype.d.mts +3 -0
  173. package/declaration/intrinsics/NumberPrototype.d.mts.map +1 -0
  174. package/declaration/intrinsics/Object.d.mts +3 -0
  175. package/declaration/intrinsics/Object.d.mts.map +1 -0
  176. package/declaration/intrinsics/ObjectPrototype.d.mts +3 -0
  177. package/declaration/intrinsics/ObjectPrototype.d.mts.map +1 -0
  178. package/declaration/intrinsics/Promise.d.mts +12 -0
  179. package/declaration/intrinsics/Promise.d.mts.map +1 -0
  180. package/declaration/intrinsics/PromisePrototype.d.mts +3 -0
  181. package/declaration/intrinsics/PromisePrototype.d.mts.map +1 -0
  182. package/declaration/intrinsics/Proxy.d.mts +11 -0
  183. package/declaration/intrinsics/Proxy.d.mts.map +1 -0
  184. package/declaration/intrinsics/Reflect.d.mts +3 -0
  185. package/declaration/intrinsics/Reflect.d.mts.map +1 -0
  186. package/declaration/intrinsics/RegExp.d.mts +12 -0
  187. package/declaration/intrinsics/RegExp.d.mts.map +1 -0
  188. package/declaration/intrinsics/RegExpPrototype.d.mts +18 -0
  189. package/declaration/intrinsics/RegExpPrototype.d.mts.map +1 -0
  190. package/declaration/intrinsics/RegExpStringIteratorPrototype.d.mts +7 -0
  191. package/declaration/intrinsics/RegExpStringIteratorPrototype.d.mts.map +1 -0
  192. package/declaration/intrinsics/Set.d.mts +7 -0
  193. package/declaration/intrinsics/Set.d.mts.map +1 -0
  194. package/declaration/intrinsics/SetIteratorPrototype.d.mts +7 -0
  195. package/declaration/intrinsics/SetIteratorPrototype.d.mts.map +1 -0
  196. package/declaration/intrinsics/SetPrototype.d.mts +3 -0
  197. package/declaration/intrinsics/SetPrototype.d.mts.map +1 -0
  198. package/declaration/intrinsics/String.d.mts +9 -0
  199. package/declaration/intrinsics/String.d.mts.map +1 -0
  200. package/declaration/intrinsics/StringIteratorPrototype.d.mts +3 -0
  201. package/declaration/intrinsics/StringIteratorPrototype.d.mts.map +1 -0
  202. package/declaration/intrinsics/StringPrototype.d.mts +3 -0
  203. package/declaration/intrinsics/StringPrototype.d.mts.map +1 -0
  204. package/declaration/intrinsics/Symbol.d.mts +12 -0
  205. package/declaration/intrinsics/Symbol.d.mts.map +1 -0
  206. package/declaration/intrinsics/SymbolPrototype.d.mts +3 -0
  207. package/declaration/intrinsics/SymbolPrototype.d.mts.map +1 -0
  208. package/declaration/intrinsics/ThrowTypeError.d.mts +3 -0
  209. package/declaration/intrinsics/ThrowTypeError.d.mts.map +1 -0
  210. package/declaration/intrinsics/TypedArray.d.mts +181 -0
  211. package/declaration/intrinsics/TypedArray.d.mts.map +1 -0
  212. package/declaration/intrinsics/TypedArrayConstructors.d.mts +3 -0
  213. package/declaration/intrinsics/TypedArrayConstructors.d.mts.map +1 -0
  214. package/declaration/intrinsics/TypedArrayPrototype.d.mts +3 -0
  215. package/declaration/intrinsics/TypedArrayPrototype.d.mts.map +1 -0
  216. package/declaration/intrinsics/TypedArrayPrototypes.d.mts +4 -0
  217. package/declaration/intrinsics/TypedArrayPrototypes.d.mts.map +1 -0
  218. package/declaration/intrinsics/URIHandling.d.mts +3 -0
  219. package/declaration/intrinsics/URIHandling.d.mts.map +1 -0
  220. package/declaration/intrinsics/WeakMap.d.mts +11 -0
  221. package/declaration/intrinsics/WeakMap.d.mts.map +1 -0
  222. package/declaration/intrinsics/WeakMapPrototype.d.mts +3 -0
  223. package/declaration/intrinsics/WeakMapPrototype.d.mts.map +1 -0
  224. package/declaration/intrinsics/WeakRef.d.mts +8 -0
  225. package/declaration/intrinsics/WeakRef.d.mts.map +1 -0
  226. package/declaration/intrinsics/WeakRefPrototype.d.mts +3 -0
  227. package/declaration/intrinsics/WeakRefPrototype.d.mts.map +1 -0
  228. package/declaration/intrinsics/WeakSet.d.mts +8 -0
  229. package/declaration/intrinsics/WeakSet.d.mts.map +1 -0
  230. package/declaration/intrinsics/WeakSetPrototype.d.mts +3 -0
  231. package/declaration/intrinsics/WeakSetPrototype.d.mts.map +1 -0
  232. package/declaration/intrinsics/bootstrap.d.mts +14 -0
  233. package/declaration/intrinsics/bootstrap.d.mts.map +1 -0
  234. package/declaration/intrinsics/eval.d.mts +3 -0
  235. package/declaration/intrinsics/eval.d.mts.map +1 -0
  236. package/declaration/intrinsics/isFinite.d.mts +3 -0
  237. package/declaration/intrinsics/isFinite.d.mts.map +1 -0
  238. package/declaration/intrinsics/isNaN.d.mts +3 -0
  239. package/declaration/intrinsics/isNaN.d.mts.map +1 -0
  240. package/declaration/intrinsics/parseFloat.d.mts +3 -0
  241. package/declaration/intrinsics/parseFloat.d.mts.map +1 -0
  242. package/declaration/intrinsics/parseInt.d.mts +3 -0
  243. package/declaration/intrinsics/parseInt.d.mts.map +1 -0
  244. package/declaration/messages.d.mts +160 -0
  245. package/declaration/messages.d.mts.map +1 -0
  246. package/declaration/modules.d.mts +115 -0
  247. package/declaration/modules.d.mts.map +1 -0
  248. package/declaration/parse.d.mts +34 -0
  249. package/declaration/parse.d.mts.map +1 -0
  250. package/declaration/parser/BaseParser.d.mts +24 -0
  251. package/declaration/parser/BaseParser.d.mts.map +1 -0
  252. package/declaration/parser/ExpressionParser.d.mts +52 -0
  253. package/declaration/parser/ExpressionParser.d.mts.map +1 -0
  254. package/declaration/parser/FunctionParser.d.mts +43 -0
  255. package/declaration/parser/FunctionParser.d.mts.map +1 -0
  256. package/declaration/parser/IdentifierParser.d.mts +12 -0
  257. package/declaration/parser/IdentifierParser.d.mts.map +1 -0
  258. package/declaration/parser/LanguageParser.d.mts +10 -0
  259. package/declaration/parser/LanguageParser.d.mts.map +1 -0
  260. package/declaration/parser/Lexer.d.mts +71 -0
  261. package/declaration/parser/Lexer.d.mts.map +1 -0
  262. package/declaration/parser/ModuleParser.d.mts +16 -0
  263. package/declaration/parser/ModuleParser.d.mts.map +1 -0
  264. package/declaration/parser/ParseNode.d.mts +976 -0
  265. package/declaration/parser/ParseNode.d.mts.map +1 -0
  266. package/declaration/parser/Parser.d.mts +32 -0
  267. package/declaration/parser/Parser.d.mts.map +1 -0
  268. package/declaration/parser/RegExpParser.d.mts +46 -0
  269. package/declaration/parser/RegExpParser.d.mts.map +1 -0
  270. package/declaration/parser/Scope.d.mts +106 -0
  271. package/declaration/parser/Scope.d.mts.map +1 -0
  272. package/declaration/parser/StatementParser.d.mts +49 -0
  273. package/declaration/parser/StatementParser.d.mts.map +1 -0
  274. package/declaration/parser/tokens.d.mts +32 -0
  275. package/declaration/parser/tokens.d.mts.map +1 -0
  276. package/declaration/runtime-semantics/AdditiveExpression.d.mts +3 -0
  277. package/declaration/runtime-semantics/AdditiveExpression.d.mts.map +1 -0
  278. package/declaration/runtime-semantics/ApplyStringOrNumericBinaryOperator.d.mts +11 -0
  279. package/declaration/runtime-semantics/ApplyStringOrNumericBinaryOperator.d.mts.map +1 -0
  280. package/declaration/runtime-semantics/ArgumentListEvaluation.d.mts +6 -0
  281. package/declaration/runtime-semantics/ArgumentListEvaluation.d.mts.map +1 -0
  282. package/declaration/runtime-semantics/ArrayLiteral.d.mts +5 -0
  283. package/declaration/runtime-semantics/ArrayLiteral.d.mts.map +1 -0
  284. package/declaration/runtime-semantics/ArrowFunction.d.mts +4 -0
  285. package/declaration/runtime-semantics/ArrowFunction.d.mts.map +1 -0
  286. package/declaration/runtime-semantics/AssignmentExpression.d.mts +14 -0
  287. package/declaration/runtime-semantics/AssignmentExpression.d.mts.map +1 -0
  288. package/declaration/runtime-semantics/AsyncArrowFunction.d.mts +4 -0
  289. package/declaration/runtime-semantics/AsyncArrowFunction.d.mts.map +1 -0
  290. package/declaration/runtime-semantics/AsyncFunctionExpression.d.mts +4 -0
  291. package/declaration/runtime-semantics/AsyncFunctionExpression.d.mts.map +1 -0
  292. package/declaration/runtime-semantics/AsyncGeneratorExpression.d.mts +4 -0
  293. package/declaration/runtime-semantics/AsyncGeneratorExpression.d.mts.map +1 -0
  294. package/declaration/runtime-semantics/AwaitExpression.d.mts +5 -0
  295. package/declaration/runtime-semantics/AwaitExpression.d.mts.map +1 -0
  296. package/declaration/runtime-semantics/BindingInitialization.d.mts +8 -0
  297. package/declaration/runtime-semantics/BindingInitialization.d.mts.map +1 -0
  298. package/declaration/runtime-semantics/BitwiseOperators.d.mts +5 -0
  299. package/declaration/runtime-semantics/BitwiseOperators.d.mts.map +1 -0
  300. package/declaration/runtime-semantics/Block.d.mts +20 -0
  301. package/declaration/runtime-semantics/Block.d.mts.map +1 -0
  302. package/declaration/runtime-semantics/BreakStatement.d.mts +4 -0
  303. package/declaration/runtime-semantics/BreakStatement.d.mts.map +1 -0
  304. package/declaration/runtime-semantics/BreakableStatement.d.mts +4 -0
  305. package/declaration/runtime-semantics/BreakableStatement.d.mts.map +1 -0
  306. package/declaration/runtime-semantics/CallExpression.d.mts +5 -0
  307. package/declaration/runtime-semantics/CallExpression.d.mts.map +1 -0
  308. package/declaration/runtime-semantics/ClassDeclaration.d.mts +8 -0
  309. package/declaration/runtime-semantics/ClassDeclaration.d.mts.map +1 -0
  310. package/declaration/runtime-semantics/ClassDefinitionEvaluation.d.mts +12 -0
  311. package/declaration/runtime-semantics/ClassDefinitionEvaluation.d.mts.map +1 -0
  312. package/declaration/runtime-semantics/ClassExpression.d.mts +5 -0
  313. package/declaration/runtime-semantics/ClassExpression.d.mts.map +1 -0
  314. package/declaration/runtime-semantics/ClassFieldDefinitionEvaluation.d.mts +10 -0
  315. package/declaration/runtime-semantics/ClassFieldDefinitionEvaluation.d.mts.map +1 -0
  316. package/declaration/runtime-semantics/ClassStaticBlockDefinitionEvaluation.d.mts +10 -0
  317. package/declaration/runtime-semantics/ClassStaticBlockDefinitionEvaluation.d.mts.map +1 -0
  318. package/declaration/runtime-semantics/CoalesceExpression.d.mts +5 -0
  319. package/declaration/runtime-semantics/CoalesceExpression.d.mts.map +1 -0
  320. package/declaration/runtime-semantics/CommaOperator.d.mts +5 -0
  321. package/declaration/runtime-semantics/CommaOperator.d.mts.map +1 -0
  322. package/declaration/runtime-semantics/ConditionalExpression.d.mts +5 -0
  323. package/declaration/runtime-semantics/ConditionalExpression.d.mts.map +1 -0
  324. package/declaration/runtime-semantics/ContinueStatement.d.mts +4 -0
  325. package/declaration/runtime-semantics/ContinueStatement.d.mts.map +1 -0
  326. package/declaration/runtime-semantics/CreateDynamicFunction.d.mts +10 -0
  327. package/declaration/runtime-semantics/CreateDynamicFunction.d.mts.map +1 -0
  328. package/declaration/runtime-semantics/DebuggerStatement.d.mts +5 -0
  329. package/declaration/runtime-semantics/DebuggerStatement.d.mts.map +1 -0
  330. package/declaration/runtime-semantics/DefineMethod.d.mts +10 -0
  331. package/declaration/runtime-semantics/DefineMethod.d.mts.map +1 -0
  332. package/declaration/runtime-semantics/DestructuringAssignmentEvaluation.d.mts +5 -0
  333. package/declaration/runtime-semantics/DestructuringAssignmentEvaluation.d.mts.map +1 -0
  334. package/declaration/runtime-semantics/EmptyStatement.d.mts +5 -0
  335. package/declaration/runtime-semantics/EmptyStatement.d.mts.map +1 -0
  336. package/declaration/runtime-semantics/EqualityExpression.d.mts +5 -0
  337. package/declaration/runtime-semantics/EqualityExpression.d.mts.map +1 -0
  338. package/declaration/runtime-semantics/EvaluateBody.d.mts +69 -0
  339. package/declaration/runtime-semantics/EvaluateBody.d.mts.map +1 -0
  340. package/declaration/runtime-semantics/EvaluateCall.d.mts +11 -0
  341. package/declaration/runtime-semantics/EvaluateCall.d.mts.map +1 -0
  342. package/declaration/runtime-semantics/EvaluatePropertyAccess.d.mts +9 -0
  343. package/declaration/runtime-semantics/EvaluatePropertyAccess.d.mts.map +1 -0
  344. package/declaration/runtime-semantics/EvaluateStringOrNumericBinaryExpression.d.mts +6 -0
  345. package/declaration/runtime-semantics/EvaluateStringOrNumericBinaryExpression.d.mts.map +1 -0
  346. package/declaration/runtime-semantics/ExponentiationExpression.d.mts +5 -0
  347. package/declaration/runtime-semantics/ExponentiationExpression.d.mts.map +1 -0
  348. package/declaration/runtime-semantics/ExportDeclaration.d.mts +17 -0
  349. package/declaration/runtime-semantics/ExportDeclaration.d.mts.map +1 -0
  350. package/declaration/runtime-semantics/ExpressionStatement.d.mts +5 -0
  351. package/declaration/runtime-semantics/ExpressionStatement.d.mts.map +1 -0
  352. package/declaration/runtime-semantics/FunctionDeclaration.d.mts +5 -0
  353. package/declaration/runtime-semantics/FunctionDeclaration.d.mts.map +1 -0
  354. package/declaration/runtime-semantics/FunctionDeclarationInstantiation.d.mts +6 -0
  355. package/declaration/runtime-semantics/FunctionDeclarationInstantiation.d.mts.map +1 -0
  356. package/declaration/runtime-semantics/FunctionExpression.d.mts +4 -0
  357. package/declaration/runtime-semantics/FunctionExpression.d.mts.map +1 -0
  358. package/declaration/runtime-semantics/FunctionStatementList.d.mts +15 -0
  359. package/declaration/runtime-semantics/FunctionStatementList.d.mts.map +1 -0
  360. package/declaration/runtime-semantics/GeneratorExpression.d.mts +4 -0
  361. package/declaration/runtime-semantics/GeneratorExpression.d.mts.map +1 -0
  362. package/declaration/runtime-semantics/GetSubstitution.d.mts +5 -0
  363. package/declaration/runtime-semantics/GetSubstitution.d.mts.map +1 -0
  364. package/declaration/runtime-semantics/GlobalDeclarationInstantiation.d.mts +12 -0
  365. package/declaration/runtime-semantics/GlobalDeclarationInstantiation.d.mts.map +1 -0
  366. package/declaration/runtime-semantics/HoistableDeclaration.d.mts +5 -0
  367. package/declaration/runtime-semantics/HoistableDeclaration.d.mts.map +1 -0
  368. package/declaration/runtime-semantics/IdentifierReference.d.mts +6 -0
  369. package/declaration/runtime-semantics/IdentifierReference.d.mts.map +1 -0
  370. package/declaration/runtime-semantics/IfStatement.d.mts +17 -0
  371. package/declaration/runtime-semantics/IfStatement.d.mts.map +1 -0
  372. package/declaration/runtime-semantics/ImportCall.d.mts +6 -0
  373. package/declaration/runtime-semantics/ImportCall.d.mts.map +1 -0
  374. package/declaration/runtime-semantics/ImportDeclaration.d.mts +5 -0
  375. package/declaration/runtime-semantics/ImportDeclaration.d.mts.map +1 -0
  376. package/declaration/runtime-semantics/ImportMeta.d.mts +5 -0
  377. package/declaration/runtime-semantics/ImportMeta.d.mts.map +1 -0
  378. package/declaration/runtime-semantics/InstantiateArrowFunctionExpression.d.mts +5 -0
  379. package/declaration/runtime-semantics/InstantiateArrowFunctionExpression.d.mts.map +1 -0
  380. package/declaration/runtime-semantics/InstantiateAsyncArrowFunctionExpression.d.mts +5 -0
  381. package/declaration/runtime-semantics/InstantiateAsyncArrowFunctionExpression.d.mts.map +1 -0
  382. package/declaration/runtime-semantics/InstantiateAsyncFunctionExpression.d.mts +5 -0
  383. package/declaration/runtime-semantics/InstantiateAsyncFunctionExpression.d.mts.map +1 -0
  384. package/declaration/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.d.mts +5 -0
  385. package/declaration/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.d.mts.map +1 -0
  386. package/declaration/runtime-semantics/InstantiateFunctionObject.d.mts +12 -0
  387. package/declaration/runtime-semantics/InstantiateFunctionObject.d.mts.map +1 -0
  388. package/declaration/runtime-semantics/InstantiateGeneratorFunctionExpression.d.mts +5 -0
  389. package/declaration/runtime-semantics/InstantiateGeneratorFunctionExpression.d.mts.map +1 -0
  390. package/declaration/runtime-semantics/InstantiateOrdinaryFunctionExpression.d.mts +5 -0
  391. package/declaration/runtime-semantics/InstantiateOrdinaryFunctionExpression.d.mts.map +1 -0
  392. package/declaration/runtime-semantics/IteratorBindingInitialization.d.mts +9 -0
  393. package/declaration/runtime-semantics/IteratorBindingInitialization.d.mts.map +1 -0
  394. package/declaration/runtime-semantics/KeyedBindingInitialization.d.mts +6 -0
  395. package/declaration/runtime-semantics/KeyedBindingInitialization.d.mts.map +1 -0
  396. package/declaration/runtime-semantics/LabelledEvaluation.d.mts +9 -0
  397. package/declaration/runtime-semantics/LabelledEvaluation.d.mts.map +1 -0
  398. package/declaration/runtime-semantics/LabelledStatement.d.mts +4 -0
  399. package/declaration/runtime-semantics/LabelledStatement.d.mts.map +1 -0
  400. package/declaration/runtime-semantics/LexicalDeclaration.d.mts +10 -0
  401. package/declaration/runtime-semantics/LexicalDeclaration.d.mts.map +1 -0
  402. package/declaration/runtime-semantics/Literal.d.mts +6 -0
  403. package/declaration/runtime-semantics/Literal.d.mts.map +1 -0
  404. package/declaration/runtime-semantics/LogicalANDExpression.d.mts +5 -0
  405. package/declaration/runtime-semantics/LogicalANDExpression.d.mts.map +1 -0
  406. package/declaration/runtime-semantics/LogicalORExpression.d.mts +5 -0
  407. package/declaration/runtime-semantics/LogicalORExpression.d.mts.map +1 -0
  408. package/declaration/runtime-semantics/MV.d.mts +3 -0
  409. package/declaration/runtime-semantics/MV.d.mts.map +1 -0
  410. package/declaration/runtime-semantics/MemberExpression.d.mts +7 -0
  411. package/declaration/runtime-semantics/MemberExpression.d.mts.map +1 -0
  412. package/declaration/runtime-semantics/MethodDefinitionEvaluation.d.mts +16 -0
  413. package/declaration/runtime-semantics/MethodDefinitionEvaluation.d.mts.map +1 -0
  414. package/declaration/runtime-semantics/Module.d.mts +17 -0
  415. package/declaration/runtime-semantics/Module.d.mts.map +1 -0
  416. package/declaration/runtime-semantics/ModuleBody.d.mts +15 -0
  417. package/declaration/runtime-semantics/ModuleBody.d.mts.map +1 -0
  418. package/declaration/runtime-semantics/MultiplicativeExpression.d.mts +5 -0
  419. package/declaration/runtime-semantics/MultiplicativeExpression.d.mts.map +1 -0
  420. package/declaration/runtime-semantics/NamedEvaluation.d.mts +4 -0
  421. package/declaration/runtime-semantics/NamedEvaluation.d.mts.map +1 -0
  422. package/declaration/runtime-semantics/NewExpression.d.mts +5 -0
  423. package/declaration/runtime-semantics/NewExpression.d.mts.map +1 -0
  424. package/declaration/runtime-semantics/NewTarget.d.mts +3 -0
  425. package/declaration/runtime-semantics/NewTarget.d.mts.map +1 -0
  426. package/declaration/runtime-semantics/NumberToBigInt.d.mts +10 -0
  427. package/declaration/runtime-semantics/NumberToBigInt.d.mts.map +1 -0
  428. package/declaration/runtime-semantics/ObjectLiteral.d.mts +5 -0
  429. package/declaration/runtime-semantics/ObjectLiteral.d.mts.map +1 -0
  430. package/declaration/runtime-semantics/OptionalExpression.d.mts +5 -0
  431. package/declaration/runtime-semantics/OptionalExpression.d.mts.map +1 -0
  432. package/declaration/runtime-semantics/ParenthesizedExpression.d.mts +4 -0
  433. package/declaration/runtime-semantics/ParenthesizedExpression.d.mts.map +1 -0
  434. package/declaration/runtime-semantics/PropertyBindingInitialization.d.mts +6 -0
  435. package/declaration/runtime-semantics/PropertyBindingInitialization.d.mts.map +1 -0
  436. package/declaration/runtime-semantics/PropertyDefinitionEvaluation.d.mts +7 -0
  437. package/declaration/runtime-semantics/PropertyDefinitionEvaluation.d.mts.map +1 -0
  438. package/declaration/runtime-semantics/PropertyName.d.mts +6 -0
  439. package/declaration/runtime-semantics/PropertyName.d.mts.map +1 -0
  440. package/declaration/runtime-semantics/RegExp.d.mts +17 -0
  441. package/declaration/runtime-semantics/RegExp.d.mts.map +1 -0
  442. package/declaration/runtime-semantics/RegularExpressionLiteral.d.mts +4 -0
  443. package/declaration/runtime-semantics/RegularExpressionLiteral.d.mts.map +1 -0
  444. package/declaration/runtime-semantics/RelationalExpression.d.mts +26 -0
  445. package/declaration/runtime-semantics/RelationalExpression.d.mts.map +1 -0
  446. package/declaration/runtime-semantics/RestBindingInitialization.d.mts +5 -0
  447. package/declaration/runtime-semantics/RestBindingInitialization.d.mts.map +1 -0
  448. package/declaration/runtime-semantics/ReturnStatement.d.mts +6 -0
  449. package/declaration/runtime-semantics/ReturnStatement.d.mts.map +1 -0
  450. package/declaration/runtime-semantics/Script.d.mts +17 -0
  451. package/declaration/runtime-semantics/Script.d.mts.map +1 -0
  452. package/declaration/runtime-semantics/ScriptBody.d.mts +14 -0
  453. package/declaration/runtime-semantics/ScriptBody.d.mts.map +1 -0
  454. package/declaration/runtime-semantics/ShiftExpression.d.mts +7 -0
  455. package/declaration/runtime-semantics/ShiftExpression.d.mts.map +1 -0
  456. package/declaration/runtime-semantics/StatementList.d.mts +16 -0
  457. package/declaration/runtime-semantics/StatementList.d.mts.map +1 -0
  458. package/declaration/runtime-semantics/StringIndexOf.d.mts +3 -0
  459. package/declaration/runtime-semantics/StringIndexOf.d.mts.map +1 -0
  460. package/declaration/runtime-semantics/StringPad.d.mts +5 -0
  461. package/declaration/runtime-semantics/StringPad.d.mts.map +1 -0
  462. package/declaration/runtime-semantics/SuperCall.d.mts +11 -0
  463. package/declaration/runtime-semantics/SuperCall.d.mts.map +1 -0
  464. package/declaration/runtime-semantics/SuperProperty.d.mts +5 -0
  465. package/declaration/runtime-semantics/SuperProperty.d.mts.map +1 -0
  466. package/declaration/runtime-semantics/SwitchStatement.d.mts +20 -0
  467. package/declaration/runtime-semantics/SwitchStatement.d.mts.map +1 -0
  468. package/declaration/runtime-semantics/TaggedTemplateExpression.d.mts +5 -0
  469. package/declaration/runtime-semantics/TaggedTemplateExpression.d.mts.map +1 -0
  470. package/declaration/runtime-semantics/TemplateLiteral.d.mts +5 -0
  471. package/declaration/runtime-semantics/TemplateLiteral.d.mts.map +1 -0
  472. package/declaration/runtime-semantics/This.d.mts +5 -0
  473. package/declaration/runtime-semantics/This.d.mts.map +1 -0
  474. package/declaration/runtime-semantics/ThrowStatement.d.mts +10 -0
  475. package/declaration/runtime-semantics/ThrowStatement.d.mts.map +1 -0
  476. package/declaration/runtime-semantics/TrimString.d.mts +5 -0
  477. package/declaration/runtime-semantics/TrimString.d.mts.map +1 -0
  478. package/declaration/runtime-semantics/TryStatement.d.mts +16 -0
  479. package/declaration/runtime-semantics/TryStatement.d.mts.map +1 -0
  480. package/declaration/runtime-semantics/UnaryExpression.d.mts +4 -0
  481. package/declaration/runtime-semantics/UnaryExpression.d.mts.map +1 -0
  482. package/declaration/runtime-semantics/Unicode.d.mts +118 -0
  483. package/declaration/runtime-semantics/Unicode.d.mts.map +1 -0
  484. package/declaration/runtime-semantics/UpdateExpression.d.mts +4 -0
  485. package/declaration/runtime-semantics/UpdateExpression.d.mts.map +1 -0
  486. package/declaration/runtime-semantics/VariableStatement.d.mts +9 -0
  487. package/declaration/runtime-semantics/VariableStatement.d.mts.map +1 -0
  488. package/declaration/runtime-semantics/WithStatement.d.mts +16 -0
  489. package/declaration/runtime-semantics/WithStatement.d.mts.map +1 -0
  490. package/declaration/runtime-semantics/YieldExpression.d.mts +6 -0
  491. package/declaration/runtime-semantics/YieldExpression.d.mts.map +1 -0
  492. package/declaration/runtime-semantics/all.d.mts +109 -0
  493. package/declaration/runtime-semantics/all.d.mts.map +1 -0
  494. package/declaration/static-semantics/BodyText.d.mts +4 -0
  495. package/declaration/static-semantics/BodyText.d.mts.map +1 -0
  496. package/declaration/static-semantics/BoundNames.d.mts +4 -0
  497. package/declaration/static-semantics/BoundNames.d.mts.map +1 -0
  498. package/declaration/static-semantics/CharacterValue.d.mts +3 -0
  499. package/declaration/static-semantics/CharacterValue.d.mts.map +1 -0
  500. package/declaration/static-semantics/CodePointAt.d.mts +7 -0
  501. package/declaration/static-semantics/CodePointAt.d.mts.map +1 -0
  502. package/declaration/static-semantics/CodePointsToString.d.mts +3 -0
  503. package/declaration/static-semantics/CodePointsToString.d.mts.map +1 -0
  504. package/declaration/static-semantics/ConstructorMethod.d.mts +4 -0
  505. package/declaration/static-semantics/ConstructorMethod.d.mts.map +1 -0
  506. package/declaration/static-semantics/ContainsArguments.d.mts +4 -0
  507. package/declaration/static-semantics/ContainsArguments.d.mts.map +1 -0
  508. package/declaration/static-semantics/ContainsExpression.d.mts +3 -0
  509. package/declaration/static-semantics/ContainsExpression.d.mts.map +1 -0
  510. package/declaration/static-semantics/DeclarationPart.d.mts +3 -0
  511. package/declaration/static-semantics/DeclarationPart.d.mts.map +1 -0
  512. package/declaration/static-semantics/ExpectedArgumentCount.d.mts +3 -0
  513. package/declaration/static-semantics/ExpectedArgumentCount.d.mts.map +1 -0
  514. package/declaration/static-semantics/ExportEntries.d.mts +10 -0
  515. package/declaration/static-semantics/ExportEntries.d.mts.map +1 -0
  516. package/declaration/static-semantics/ExportEntriesForModule.d.mts +5 -0
  517. package/declaration/static-semantics/ExportEntriesForModule.d.mts.map +1 -0
  518. package/declaration/static-semantics/FlagText.d.mts +4 -0
  519. package/declaration/static-semantics/FlagText.d.mts.map +1 -0
  520. package/declaration/static-semantics/HasInitializer.d.mts +5 -0
  521. package/declaration/static-semantics/HasInitializer.d.mts.map +1 -0
  522. package/declaration/static-semantics/HasName.d.mts +3 -0
  523. package/declaration/static-semantics/HasName.d.mts.map +1 -0
  524. package/declaration/static-semantics/ImportEntries.d.mts +9 -0
  525. package/declaration/static-semantics/ImportEntries.d.mts.map +1 -0
  526. package/declaration/static-semantics/ImportEntriesForModule.d.mts +5 -0
  527. package/declaration/static-semantics/ImportEntriesForModule.d.mts.map +1 -0
  528. package/declaration/static-semantics/ImportedLocalNames.d.mts +4 -0
  529. package/declaration/static-semantics/ImportedLocalNames.d.mts.map +1 -0
  530. package/declaration/static-semantics/IsAnonymousFunctionDefinition.d.mts +4 -0
  531. package/declaration/static-semantics/IsAnonymousFunctionDefinition.d.mts.map +1 -0
  532. package/declaration/static-semantics/IsComputedPropertyKey.d.mts +3 -0
  533. package/declaration/static-semantics/IsComputedPropertyKey.d.mts.map +1 -0
  534. package/declaration/static-semantics/IsConstantDeclaration.d.mts +3 -0
  535. package/declaration/static-semantics/IsConstantDeclaration.d.mts.map +1 -0
  536. package/declaration/static-semantics/IsDestructuring.d.mts +4 -0
  537. package/declaration/static-semantics/IsDestructuring.d.mts.map +1 -0
  538. package/declaration/static-semantics/IsFunctionDefinition.d.mts +6 -0
  539. package/declaration/static-semantics/IsFunctionDefinition.d.mts.map +1 -0
  540. package/declaration/static-semantics/IsIdentifierRef.d.mts +3 -0
  541. package/declaration/static-semantics/IsIdentifierRef.d.mts.map +1 -0
  542. package/declaration/static-semantics/IsInTailPosition.d.mts +3 -0
  543. package/declaration/static-semantics/IsInTailPosition.d.mts.map +1 -0
  544. package/declaration/static-semantics/IsSimpleParameterList.d.mts +3 -0
  545. package/declaration/static-semantics/IsSimpleParameterList.d.mts.map +1 -0
  546. package/declaration/static-semantics/IsStatic.d.mts +4 -0
  547. package/declaration/static-semantics/IsStatic.d.mts.map +1 -0
  548. package/declaration/static-semantics/IsStrict.d.mts +4 -0
  549. package/declaration/static-semantics/IsStrict.d.mts.map +1 -0
  550. package/declaration/static-semantics/IsStringWellFormedUnicode.d.mts +3 -0
  551. package/declaration/static-semantics/IsStringWellFormedUnicode.d.mts.map +1 -0
  552. package/declaration/static-semantics/LexicallyDeclaredNames.d.mts +4 -0
  553. package/declaration/static-semantics/LexicallyDeclaredNames.d.mts.map +1 -0
  554. package/declaration/static-semantics/LexicallyScopedDeclarations.d.mts +3 -0
  555. package/declaration/static-semantics/LexicallyScopedDeclarations.d.mts.map +1 -0
  556. package/declaration/static-semantics/ModuleRequests.d.mts +4 -0
  557. package/declaration/static-semantics/ModuleRequests.d.mts.map +1 -0
  558. package/declaration/static-semantics/NonConstructorElements.d.mts +4 -0
  559. package/declaration/static-semantics/NonConstructorElements.d.mts.map +1 -0
  560. package/declaration/static-semantics/NumericValue.d.mts +4 -0
  561. package/declaration/static-semantics/NumericValue.d.mts.map +1 -0
  562. package/declaration/static-semantics/PrivateBoundIdentifiers.d.mts +5 -0
  563. package/declaration/static-semantics/PrivateBoundIdentifiers.d.mts.map +1 -0
  564. package/declaration/static-semantics/PropName.d.mts +3 -0
  565. package/declaration/static-semantics/PropName.d.mts.map +1 -0
  566. package/declaration/static-semantics/StringToCodePoints.d.mts +3 -0
  567. package/declaration/static-semantics/StringToCodePoints.d.mts.map +1 -0
  568. package/declaration/static-semantics/StringValue.d.mts +3 -0
  569. package/declaration/static-semantics/StringValue.d.mts.map +1 -0
  570. package/declaration/static-semantics/TemplateStrings.d.mts +4 -0
  571. package/declaration/static-semantics/TemplateStrings.d.mts.map +1 -0
  572. package/declaration/static-semantics/TopLevelLexicallyDeclaredNames.d.mts +4 -0
  573. package/declaration/static-semantics/TopLevelLexicallyDeclaredNames.d.mts.map +1 -0
  574. package/declaration/static-semantics/TopLevelLexicallyScopedDeclarations.d.mts +4 -0
  575. package/declaration/static-semantics/TopLevelLexicallyScopedDeclarations.d.mts.map +1 -0
  576. package/declaration/static-semantics/TopLevelVarDeclaredNames.d.mts +4 -0
  577. package/declaration/static-semantics/TopLevelVarDeclaredNames.d.mts.map +1 -0
  578. package/declaration/static-semantics/TopLevelVarScopedDeclarations.d.mts +4 -0
  579. package/declaration/static-semantics/TopLevelVarScopedDeclarations.d.mts.map +1 -0
  580. package/declaration/static-semantics/UTF16EncodeCodePoint.d.mts +3 -0
  581. package/declaration/static-semantics/UTF16EncodeCodePoint.d.mts.map +1 -0
  582. package/declaration/static-semantics/UTF16SurrogatePairToCodePoint.d.mts +3 -0
  583. package/declaration/static-semantics/UTF16SurrogatePairToCodePoint.d.mts.map +1 -0
  584. package/declaration/static-semantics/VarDeclaredNames.d.mts +4 -0
  585. package/declaration/static-semantics/VarDeclaredNames.d.mts.map +1 -0
  586. package/declaration/static-semantics/VarScopedDeclarations.d.mts +4 -0
  587. package/declaration/static-semantics/VarScopedDeclarations.d.mts.map +1 -0
  588. package/declaration/static-semantics/all.d.mts +48 -0
  589. package/declaration/static-semantics/all.d.mts.map +1 -0
  590. package/declaration/value.d.mts +283 -0
  591. package/declaration/value.d.mts.map +1 -0
  592. package/lib/engine262.js +58136 -0
  593. package/lib/engine262.js.map +1 -0
  594. package/lib/engine262.mjs +57577 -0
  595. package/lib/engine262.mjs.map +1 -0
  596. package/lib/inspector/context.d.mts +17 -0
  597. package/lib/inspector/context.d.mts.map +1 -0
  598. package/lib/inspector/context.mjs +343 -0
  599. package/lib/inspector/context.mjs.map +1 -0
  600. package/lib/inspector/index.d.mts +15 -0
  601. package/lib/inspector/index.d.mts.map +1 -0
  602. package/lib/inspector/index.mjs +64 -0
  603. package/lib/inspector/index.mjs.map +1 -0
  604. package/lib/inspector/methods.d.mts +6 -0
  605. package/lib/inspector/methods.d.mts.map +1 -0
  606. package/lib/inspector/methods.mjs +117 -0
  607. package/lib/inspector/methods.mjs.map +1 -0
  608. package/lib/inspector/types.d.mts +208 -0
  609. package/lib/inspector/types.d.mts.map +1 -0
  610. package/lib/inspector/types.mjs +2 -0
  611. package/lib/inspector/types.mjs.map +1 -0
  612. package/lib/inspector/utils.d.mts +7 -0
  613. package/lib/inspector/utils.d.mts.map +1 -0
  614. package/lib/inspector/utils.mjs +72 -0
  615. package/lib/inspector/utils.mjs.map +1 -0
  616. package/lib/inspector.js +682 -0
  617. package/lib/inspector.js.map +1 -0
  618. package/lib/inspector.mjs +674 -0
  619. package/lib/inspector.mjs.map +1 -0
  620. package/lib/node/bin.d.mts +3 -0
  621. package/lib/node/bin.d.mts.map +1 -0
  622. package/lib/node/bin.mjs +194 -0
  623. package/lib/node/bin.mjs.map +1 -0
  624. package/lib/node/inspector.d.mts +15 -0
  625. package/lib/node/inspector.d.mts.map +1 -0
  626. package/lib/node/inspector.mjs +112 -0
  627. package/lib/node/inspector.mjs.map +1 -0
  628. package/lib/node/module.d.mts +7 -0
  629. package/lib/node/module.d.mts.map +1 -0
  630. package/lib/node/module.mjs +61 -0
  631. package/lib/node/module.mjs.map +1 -0
  632. package/lib-src/inspector/context.mts +370 -0
  633. package/lib-src/inspector/index.mts +79 -0
  634. package/lib-src/inspector/js_protocol.json +3288 -0
  635. package/lib-src/inspector/methods.mts +123 -0
  636. package/lib-src/inspector/tsconfig.json +23 -0
  637. package/lib-src/inspector/types.mts +213 -0
  638. package/lib-src/inspector/utils.mts +86 -0
  639. package/lib-src/node/bin.mts +200 -0
  640. package/lib-src/node/inspector.mts +124 -0
  641. package/lib-src/node/module.mts +64 -0
  642. package/lib-src/node/tsconfig.json +20 -0
  643. package/package.json +127 -0
  644. package/src/abstract-ops/all.mts +34 -0
  645. package/src/abstract-ops/arguments-operations.mts +246 -0
  646. package/src/abstract-ops/array-objects.mts +316 -0
  647. package/src/abstract-ops/arraybuffer-objects.mts +247 -0
  648. package/src/abstract-ops/async-function-operations.mts +43 -0
  649. package/src/abstract-ops/async-generator-objects.mts +383 -0
  650. package/src/abstract-ops/data-types-and-values.mts +43 -0
  651. package/src/abstract-ops/dataview-objects.mts +151 -0
  652. package/src/abstract-ops/date-objects.mts +232 -0
  653. package/src/abstract-ops/error-objects.mts +26 -0
  654. package/src/abstract-ops/execution-contexts.mts +80 -0
  655. package/src/abstract-ops/function-operations.mts +606 -0
  656. package/src/abstract-ops/generator-operations.mts +291 -0
  657. package/src/abstract-ops/global-object.mts +386 -0
  658. package/src/abstract-ops/immutable-prototype-objects.mts +20 -0
  659. package/src/abstract-ops/import-calls.mts +73 -0
  660. package/src/abstract-ops/iterator-operations.mts +306 -0
  661. package/src/abstract-ops/module-namespace-exotic-objects.mts +223 -0
  662. package/src/abstract-ops/module-records.mts +458 -0
  663. package/src/abstract-ops/notational-conventions.mts +53 -0
  664. package/src/abstract-ops/object-operations.mts +468 -0
  665. package/src/abstract-ops/objects.mts +435 -0
  666. package/src/abstract-ops/private-names.mts +106 -0
  667. package/src/abstract-ops/promise-operations.mts +478 -0
  668. package/src/abstract-ops/proxy-objects.mts +585 -0
  669. package/src/abstract-ops/realms.mts +517 -0
  670. package/src/abstract-ops/reference-operations.mts +211 -0
  671. package/src/abstract-ops/regexp-objects.mts +299 -0
  672. package/src/abstract-ops/spec-types.mts +239 -0
  673. package/src/abstract-ops/string-objects.mts +156 -0
  674. package/src/abstract-ops/symbol-objects.mts +30 -0
  675. package/src/abstract-ops/testing-comparison.mts +387 -0
  676. package/src/abstract-ops/type-conversion.mts +579 -0
  677. package/src/abstract-ops/typedarray-objects.mts +402 -0
  678. package/src/abstract-ops/weak-operations.mts +83 -0
  679. package/src/api-types.mts +2 -0
  680. package/src/api.mts +326 -0
  681. package/src/completion.mts +466 -0
  682. package/src/data-gen.json +1 -0
  683. package/src/engine.mts +451 -0
  684. package/src/environment.mts +1013 -0
  685. package/src/evaluator.mts +268 -0
  686. package/src/helpers.mts +538 -0
  687. package/src/inspect.mts +236 -0
  688. package/src/intrinsics/AggregateError.mts +64 -0
  689. package/src/intrinsics/AggregateErrorPrototype.mts +12 -0
  690. package/src/intrinsics/Array.mts +216 -0
  691. package/src/intrinsics/ArrayBuffer.mts +48 -0
  692. package/src/intrinsics/ArrayBufferPrototype.mts +120 -0
  693. package/src/intrinsics/ArrayIteratorPrototype.mts +25 -0
  694. package/src/intrinsics/ArrayPrototype.mts +630 -0
  695. package/src/intrinsics/ArrayPrototypeShared.mts +644 -0
  696. package/src/intrinsics/AsyncFromSyncIteratorPrototype.mts +163 -0
  697. package/src/intrinsics/AsyncFunction.mts +31 -0
  698. package/src/intrinsics/AsyncFunctionPrototype.mts +8 -0
  699. package/src/intrinsics/AsyncGeneratorFunction.mts +37 -0
  700. package/src/intrinsics/AsyncGeneratorFunctionPrototype.mts +19 -0
  701. package/src/intrinsics/AsyncGeneratorFunctionPrototypePrototype.mts +148 -0
  702. package/src/intrinsics/AsyncIteratorPrototype.mts +17 -0
  703. package/src/intrinsics/BigInt.mts +69 -0
  704. package/src/intrinsics/BigIntPrototype.mts +81 -0
  705. package/src/intrinsics/Boolean.mts +47 -0
  706. package/src/intrinsics/BooleanPrototype.mts +58 -0
  707. package/src/intrinsics/DataView.mts +82 -0
  708. package/src/intrinsics/DataViewPrototype.mts +271 -0
  709. package/src/intrinsics/Date.mts +215 -0
  710. package/src/intrinsics/DatePrototype.mts +736 -0
  711. package/src/intrinsics/Error.mts +59 -0
  712. package/src/intrinsics/ErrorPrototype.mts +62 -0
  713. package/src/intrinsics/FinalizationRegistry.mts +64 -0
  714. package/src/intrinsics/FinalizationRegistryPrototype.mts +109 -0
  715. package/src/intrinsics/ForInIteratorPrototype.mts +120 -0
  716. package/src/intrinsics/Function.mts +21 -0
  717. package/src/intrinsics/FunctionPrototype.mts +272 -0
  718. package/src/intrinsics/GeneratorFunction.mts +32 -0
  719. package/src/intrinsics/GeneratorFunctionPrototype.mts +21 -0
  720. package/src/intrinsics/GeneratorFunctionPrototypePrototype.mts +57 -0
  721. package/src/intrinsics/IteratorPrototype.mts +17 -0
  722. package/src/intrinsics/JSON.mts +570 -0
  723. package/src/intrinsics/Map.mts +98 -0
  724. package/src/intrinsics/MapIteratorPrototype.mts +79 -0
  725. package/src/intrinsics/MapPrototype.mts +226 -0
  726. package/src/intrinsics/Math.mts +178 -0
  727. package/src/intrinsics/NativeError.mts +82 -0
  728. package/src/intrinsics/Number.mts +131 -0
  729. package/src/intrinsics/NumberPrototype.mts +123 -0
  730. package/src/intrinsics/Object.mts +442 -0
  731. package/src/intrinsics/ObjectPrototype.mts +297 -0
  732. package/src/intrinsics/Promise.mts +693 -0
  733. package/src/intrinsics/PromisePrototype.mts +120 -0
  734. package/src/intrinsics/Proxy.mts +100 -0
  735. package/src/intrinsics/Reflect.mts +211 -0
  736. package/src/intrinsics/RegExp.mts +103 -0
  737. package/src/intrinsics/RegExpPrototype.mts +803 -0
  738. package/src/intrinsics/RegExpStringIteratorPrototype.mts +81 -0
  739. package/src/intrinsics/Set.mts +72 -0
  740. package/src/intrinsics/SetIteratorPrototype.mts +77 -0
  741. package/src/intrinsics/SetPrototype.mts +191 -0
  742. package/src/intrinsics/String.mts +134 -0
  743. package/src/intrinsics/StringIteratorPrototype.mts +25 -0
  744. package/src/intrinsics/StringPrototype.mts +833 -0
  745. package/src/intrinsics/Symbol.mts +103 -0
  746. package/src/intrinsics/SymbolPrototype.mts +83 -0
  747. package/src/intrinsics/ThrowTypeError.mts +21 -0
  748. package/src/intrinsics/TypedArray.mts +574 -0
  749. package/src/intrinsics/TypedArrayConstructors.mts +85 -0
  750. package/src/intrinsics/TypedArrayPrototype.mts +648 -0
  751. package/src/intrinsics/TypedArrayPrototypes.mts +17 -0
  752. package/src/intrinsics/URIHandling.mts +321 -0
  753. package/src/intrinsics/WeakMap.mts +56 -0
  754. package/src/intrinsics/WeakMapPrototype.mts +129 -0
  755. package/src/intrinsics/WeakRef.mts +42 -0
  756. package/src/intrinsics/WeakRefPrototype.mts +23 -0
  757. package/src/intrinsics/WeakSet.mts +66 -0
  758. package/src/intrinsics/WeakSetPrototype.mts +99 -0
  759. package/src/intrinsics/bootstrap.mts +145 -0
  760. package/src/intrinsics/eval.mts +25 -0
  761. package/src/intrinsics/isFinite.mts +23 -0
  762. package/src/intrinsics/isNaN.mts +23 -0
  763. package/src/intrinsics/parseFloat.mts +78 -0
  764. package/src/intrinsics/parseInt.mts +101 -0
  765. package/src/messages.mts +176 -0
  766. package/src/modules.mts +720 -0
  767. package/src/parse.mts +222 -0
  768. package/src/parser/BaseParser.mts +36 -0
  769. package/src/parser/ExpressionParser.mts +1498 -0
  770. package/src/parser/FunctionParser.mts +389 -0
  771. package/src/parser/IdentifierParser.mts +144 -0
  772. package/src/parser/LanguageParser.mts +94 -0
  773. package/src/parser/Lexer.mts +986 -0
  774. package/src/parser/ModuleParser.mts +271 -0
  775. package/src/parser/ParseNode.mts +2510 -0
  776. package/src/parser/Parser.mts +192 -0
  777. package/src/parser/RegExpParser.mts +930 -0
  778. package/src/parser/Scope.mts +535 -0
  779. package/src/parser/StatementParser.mts +958 -0
  780. package/src/parser/tokens.mts +212 -0
  781. package/src/parser/unicode.d.ts +20 -0
  782. package/src/runtime-semantics/AdditiveExpression.mts +29 -0
  783. package/src/runtime-semantics/ApplyStringOrNumericBinaryOperator.mts +78 -0
  784. package/src/runtime-semantics/ArgumentListEvaluation.mts +178 -0
  785. package/src/runtime-semantics/ArrayLiteral.mts +97 -0
  786. package/src/runtime-semantics/ArrowFunction.mts +8 -0
  787. package/src/runtime-semantics/AssignmentExpression.mts +282 -0
  788. package/src/runtime-semantics/AsyncArrowFunction.mts +8 -0
  789. package/src/runtime-semantics/AsyncFunctionExpression.mts +11 -0
  790. package/src/runtime-semantics/AsyncGeneratorExpression.mts +11 -0
  791. package/src/runtime-semantics/AwaitExpression.mts +17 -0
  792. package/src/runtime-semantics/BindingInitialization.mts +93 -0
  793. package/src/runtime-semantics/BitwiseOperators.mts +14 -0
  794. package/src/runtime-semantics/Block.mts +73 -0
  795. package/src/runtime-semantics/BreakStatement.mts +18 -0
  796. package/src/runtime-semantics/BreakableStatement.mts +18 -0
  797. package/src/runtime-semantics/CallExpression.mts +59 -0
  798. package/src/runtime-semantics/ClassDeclaration.mts +46 -0
  799. package/src/runtime-semantics/ClassDefinitionEvaluation.mts +343 -0
  800. package/src/runtime-semantics/ClassExpression.mts +32 -0
  801. package/src/runtime-semantics/ClassFieldDefinitionEvaluation.mts +61 -0
  802. package/src/runtime-semantics/ClassStaticBlockDefinitionEvaluation.mts +44 -0
  803. package/src/runtime-semantics/CoalesceExpression.mts +24 -0
  804. package/src/runtime-semantics/CommaOperator.mts +18 -0
  805. package/src/runtime-semantics/ConditionalExpression.mts +31 -0
  806. package/src/runtime-semantics/ContinueStatement.mts +18 -0
  807. package/src/runtime-semantics/CreateDynamicFunction.mts +200 -0
  808. package/src/runtime-semantics/DebuggerStatement.mts +20 -0
  809. package/src/runtime-semantics/DefineMethod.mts +42 -0
  810. package/src/runtime-semantics/DestructuringAssignmentEvaluation.mts +311 -0
  811. package/src/runtime-semantics/EmptyStatement.mts +9 -0
  812. package/src/runtime-semantics/EqualityExpression.mts +61 -0
  813. package/src/runtime-semantics/EvaluateBody.mts +196 -0
  814. package/src/runtime-semantics/EvaluateCall.mts +63 -0
  815. package/src/runtime-semantics/EvaluatePropertyAccess.mts +47 -0
  816. package/src/runtime-semantics/EvaluateStringOrNumericBinaryExpression.mts +19 -0
  817. package/src/runtime-semantics/ExponentiationExpression.mts +11 -0
  818. package/src/runtime-semantics/ExportDeclaration.mts +90 -0
  819. package/src/runtime-semantics/ExpressionStatement.mts +14 -0
  820. package/src/runtime-semantics/FunctionDeclaration.mts +11 -0
  821. package/src/runtime-semantics/FunctionDeclarationInstantiation.mts +272 -0
  822. package/src/runtime-semantics/FunctionExpression.mts +11 -0
  823. package/src/runtime-semantics/FunctionStatementList.mts +11 -0
  824. package/src/runtime-semantics/GeneratorExpression.mts +11 -0
  825. package/src/runtime-semantics/GetSubstitution.mts +119 -0
  826. package/src/runtime-semantics/GlobalDeclarationInstantiation.mts +146 -0
  827. package/src/runtime-semantics/HoistableDeclaration.mts +12 -0
  828. package/src/runtime-semantics/IdentifierReference.mts +15 -0
  829. package/src/runtime-semantics/IfStatement.mts +49 -0
  830. package/src/runtime-semantics/ImportCall.mts +43 -0
  831. package/src/runtime-semantics/ImportDeclaration.mts +9 -0
  832. package/src/runtime-semantics/ImportMeta.mts +45 -0
  833. package/src/runtime-semantics/InstantiateArrowFunctionExpression.mts +35 -0
  834. package/src/runtime-semantics/InstantiateAsyncArrowFunctionExpression.mts +37 -0
  835. package/src/runtime-semantics/InstantiateAsyncFunctionExpression.mts +75 -0
  836. package/src/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.mts +90 -0
  837. package/src/runtime-semantics/InstantiateFunctionObject.mts +123 -0
  838. package/src/runtime-semantics/InstantiateGeneratorFunctionExpression.mts +82 -0
  839. package/src/runtime-semantics/InstantiateOrdinaryFunctionExpression.mts +64 -0
  840. package/src/runtime-semantics/IteratorBindingInitialization.mts +214 -0
  841. package/src/runtime-semantics/KeyedBindingInitialization.mts +61 -0
  842. package/src/runtime-semantics/LabelledEvaluation.mts +753 -0
  843. package/src/runtime-semantics/LabelledStatement.mts +11 -0
  844. package/src/runtime-semantics/LexicalDeclaration.mts +96 -0
  845. package/src/runtime-semantics/Literal.mts +36 -0
  846. package/src/runtime-semantics/LogicalANDExpression.mts +25 -0
  847. package/src/runtime-semantics/LogicalORExpression.mts +25 -0
  848. package/src/runtime-semantics/MV.mts +10 -0
  849. package/src/runtime-semantics/MemberExpression.mts +73 -0
  850. package/src/runtime-semantics/MethodDefinitionEvaluation.mts +273 -0
  851. package/src/runtime-semantics/Module.mts +15 -0
  852. package/src/runtime-semantics/ModuleBody.mts +10 -0
  853. package/src/runtime-semantics/MultiplicativeExpression.mts +18 -0
  854. package/src/runtime-semantics/NamedEvaluation.mts +98 -0
  855. package/src/runtime-semantics/NewExpression.mts +52 -0
  856. package/src/runtime-semantics/NewTarget.mts +8 -0
  857. package/src/runtime-semantics/NumberToBigInt.mts +17 -0
  858. package/src/runtime-semantics/ObjectLiteral.mts +26 -0
  859. package/src/runtime-semantics/OptionalExpression.mts +132 -0
  860. package/src/runtime-semantics/ParenthesizedExpression.mts +8 -0
  861. package/src/runtime-semantics/PropertyBindingInitialization.mts +46 -0
  862. package/src/runtime-semantics/PropertyDefinitionEvaluation.mts +124 -0
  863. package/src/runtime-semantics/PropertyName.mts +62 -0
  864. package/src/runtime-semantics/RegExp.mts +1187 -0
  865. package/src/runtime-semantics/RegularExpressionLiteral.mts +16 -0
  866. package/src/runtime-semantics/RelationalExpression.mts +156 -0
  867. package/src/runtime-semantics/RestBindingInitialization.mts +29 -0
  868. package/src/runtime-semantics/ReturnStatement.mts +32 -0
  869. package/src/runtime-semantics/Script.mts +15 -0
  870. package/src/runtime-semantics/ScriptBody.mts +7 -0
  871. package/src/runtime-semantics/ShiftExpression.mts +17 -0
  872. package/src/runtime-semantics/StatementList.mts +31 -0
  873. package/src/runtime-semantics/StringIndexOf.mts +43 -0
  874. package/src/runtime-semantics/StringPad.mts +33 -0
  875. package/src/runtime-semantics/SuperCall.mts +65 -0
  876. package/src/runtime-semantics/SuperProperty.mts +61 -0
  877. package/src/runtime-semantics/SwitchStatement.mts +221 -0
  878. package/src/runtime-semantics/TaggedTemplateExpression.mts +23 -0
  879. package/src/runtime-semantics/TemplateLiteral.mts +34 -0
  880. package/src/runtime-semantics/This.mts +9 -0
  881. package/src/runtime-semantics/ThrowStatement.mts +22 -0
  882. package/src/runtime-semantics/TrimString.mts +19 -0
  883. package/src/runtime-semantics/TryStatement.mts +120 -0
  884. package/src/runtime-semantics/UnaryExpression.mts +219 -0
  885. package/src/runtime-semantics/Unicode.mts +555 -0
  886. package/src/runtime-semantics/UpdateExpression.mts +126 -0
  887. package/src/runtime-semantics/VariableStatement.mts +72 -0
  888. package/src/runtime-semantics/WithStatement.mts +33 -0
  889. package/src/runtime-semantics/YieldExpression.mts +175 -0
  890. package/src/runtime-semantics/all.mts +108 -0
  891. package/src/static-semantics/BodyText.mts +7 -0
  892. package/src/static-semantics/BoundNames.mts +101 -0
  893. package/src/static-semantics/CharacterValue.mts +92 -0
  894. package/src/static-semantics/CodePointAt.mts +53 -0
  895. package/src/static-semantics/CodePointsToString.mts +16 -0
  896. package/src/static-semantics/ConstructorMethod.mts +10 -0
  897. package/src/static-semantics/ContainsArguments.mts +33 -0
  898. package/src/static-semantics/ContainsExpression.mts +59 -0
  899. package/src/static-semantics/DeclarationPart.mts +5 -0
  900. package/src/static-semantics/ExpectedArgumentCount.mts +26 -0
  901. package/src/static-semantics/ExportEntries.mts +127 -0
  902. package/src/static-semantics/ExportEntriesForModule.mts +63 -0
  903. package/src/static-semantics/FlagText.mts +7 -0
  904. package/src/static-semantics/HasInitializer.mts +5 -0
  905. package/src/static-semantics/HasName.mts +8 -0
  906. package/src/static-semantics/ImportEntries.mts +36 -0
  907. package/src/static-semantics/ImportEntriesForModule.mts +95 -0
  908. package/src/static-semantics/ImportedLocalNames.mts +14 -0
  909. package/src/static-semantics/IsAnonymousFunctionDefinition.mts +18 -0
  910. package/src/static-semantics/IsComputedPropertyKey.mts +7 -0
  911. package/src/static-semantics/IsConstantDeclaration.mts +5 -0
  912. package/src/static-semantics/IsDestructuring.mts +21 -0
  913. package/src/static-semantics/IsFunctionDefinition.mts +15 -0
  914. package/src/static-semantics/IsIdentifierRef.mts +5 -0
  915. package/src/static-semantics/IsInTailPosition.mts +5 -0
  916. package/src/static-semantics/IsSimpleParameterList.mts +23 -0
  917. package/src/static-semantics/IsStatic.mts +10 -0
  918. package/src/static-semantics/IsStrict.mts +7 -0
  919. package/src/static-semantics/IsStringWellFormedUnicode.mts +24 -0
  920. package/src/static-semantics/LexicallyDeclaredNames.mts +26 -0
  921. package/src/static-semantics/LexicallyScopedDeclarations.mts +82 -0
  922. package/src/static-semantics/ModuleRequests.mts +34 -0
  923. package/src/static-semantics/NonConstructorElements.mts +15 -0
  924. package/src/static-semantics/NumericValue.mts +7 -0
  925. package/src/static-semantics/PrivateBoundIdentifiers.mts +23 -0
  926. package/src/static-semantics/PropName.mts +18 -0
  927. package/src/static-semantics/StringToCodePoints.mts +23 -0
  928. package/src/static-semantics/StringValue.mts +19 -0
  929. package/src/static-semantics/TemplateStrings.mts +108 -0
  930. package/src/static-semantics/TopLevelLexicallyDeclaredNames.mts +21 -0
  931. package/src/static-semantics/TopLevelLexicallyScopedDeclarations.mts +23 -0
  932. package/src/static-semantics/TopLevelVarDeclaredNames.mts +26 -0
  933. package/src/static-semantics/TopLevelVarScopedDeclarations.mts +34 -0
  934. package/src/static-semantics/UTF16EncodeCodePoint.mts +17 -0
  935. package/src/static-semantics/UTF16SurrogatePairToCodePoint.mts +12 -0
  936. package/src/static-semantics/VarDeclaredNames.mts +109 -0
  937. package/src/static-semantics/VarScopedDeclarations.mts +115 -0
  938. package/src/static-semantics/all.mts +47 -0
  939. package/src/syntax-error.d.ts +4 -0
  940. package/src/tsconfig.json +11 -0
  941. package/src/value.mts +981 -0
@@ -0,0 +1,1498 @@
1
+ import {
2
+ TV,
3
+ PropName,
4
+ StringValue,
5
+ IsComputedPropertyKey,
6
+ ContainsArguments,
7
+ } from '../static-semantics/all.mts';
8
+ import type { Mutable } from '../helpers.mts';
9
+ import {
10
+ Token, TokenPrecedence,
11
+ isPropertyOrCall,
12
+ isMember,
13
+ isKeywordRaw,
14
+ isAutomaticSemicolon,
15
+ } from './tokens.mts';
16
+ import { isLineTerminator, type TokenData } from './Lexer.mts';
17
+ import { FunctionParser, FunctionKind } from './FunctionParser.mts';
18
+ import { RegExpParser, type RegExpParserContext } from './RegExpParser.mts';
19
+ import type { ParseNode } from './ParseNode.mts';
20
+
21
+ export abstract class ExpressionParser extends FunctionParser {
22
+ protected abstract readonly state: {
23
+ hasTopLevelAwait: boolean;
24
+ strict: boolean;
25
+ json: boolean;
26
+ };
27
+
28
+ abstract parseBindingPattern(): ParseNode.BindingPattern;
29
+
30
+ abstract markNodeStart(node: ParseNode.BaseParseNode | ParseNode.Unfinished): void;
31
+
32
+ abstract parseInitializerOpt(): ParseNode.Initializer | null;
33
+
34
+ abstract semicolon(): void;
35
+
36
+ // Expression :
37
+ // AssignmentExpression
38
+ // Expression `,` AssignmentExpression
39
+ parseExpression(): ParseNode.Expression {
40
+ const AssignmentExpression = this.parseAssignmentExpression();
41
+ if (this.eat(Token.COMMA)) {
42
+ const CommaOperator = this.startNode<ParseNode.CommaOperator>(AssignmentExpression);
43
+ const ExpressionList = [AssignmentExpression];
44
+ do {
45
+ ExpressionList.push(this.parseAssignmentExpression());
46
+ } while (this.eat(Token.COMMA));
47
+ CommaOperator.ExpressionList = ExpressionList;
48
+ return this.finishNode(CommaOperator, 'CommaOperator');
49
+ }
50
+ return AssignmentExpression;
51
+ }
52
+
53
+ // AssignmentExpression :
54
+ // ConditionalExpression
55
+ // [+Yield] YieldExpression
56
+ // ArrowFunction
57
+ // AsyncArrowFunction
58
+ // LeftHandSideExpression `=` AssignmentExpression
59
+ // LeftHandSideExpression AssignmentOperator AssignmentExpression
60
+ // LeftHandSideExpression LogicalAssignmentOperator AssignmentExpression
61
+ //
62
+ // AssignmentOperator : one of
63
+ // *= /= %= += -= <<= >>= >>>= &= ^= |= **=
64
+ //
65
+ // LogicalAssignmentOperator : one of
66
+ // &&= ||= ??=
67
+ parseAssignmentExpression(): ParseNode.AssignmentExpressionOrHigher {
68
+ if (this.test(Token.YIELD) && this.scope.hasYield()) {
69
+ return this.parseYieldExpression();
70
+ }
71
+
72
+ this.scope.pushAssignmentInfo('assign');
73
+ const left = this.parseConditionalExpression();
74
+ const assignmentInfo = this.scope.popAssignmentInfo();
75
+
76
+ if (left.type === 'IdentifierReference') {
77
+ // `async` [no LineTerminator here] IdentifierReference [no LineTerminator here] `=>`
78
+ if (left.name === 'async'
79
+ && this.test(Token.IDENTIFIER)
80
+ && !this.peek().hadLineTerminatorBefore
81
+ && this.testAhead(Token.ARROW)
82
+ && !this.peekAhead().hadLineTerminatorBefore) {
83
+ assignmentInfo.clear();
84
+ const node = this.startNode<ParseNode.AsyncArrowFunction>(left);
85
+ return this.parseArrowFunction(node, {
86
+ Arguments: [this.parseIdentifierReference()],
87
+ }, FunctionKind.ASYNC);
88
+ }
89
+ // IdentifierReference [no LineTerminator here] `=>`
90
+ if (this.test(Token.ARROW) && !this.peek().hadLineTerminatorBefore) {
91
+ assignmentInfo.clear();
92
+ const node = this.startNode<ParseNode.ArrowFunction>(left);
93
+ return this.parseArrowFunction(node, { Arguments: [left] }, FunctionKind.NORMAL);
94
+ }
95
+ }
96
+
97
+ // `async` [no LineTerminator here] Arguments [no LineTerminator here] `=>`
98
+ if (left.type === 'CallExpression' && left.arrowInfo && this.test(Token.ARROW)
99
+ && !this.peek().hadLineTerminatorBefore) {
100
+ const last = left.Arguments[left.Arguments.length - 1];
101
+ if (!left.arrowInfo.hasTrailingComma || (last && last.type !== 'AssignmentRestElement')) {
102
+ assignmentInfo.clear();
103
+ const node = this.startNode<ParseNode.AsyncArrowFunction>(left);
104
+ return this.parseArrowFunction(node, left, FunctionKind.ASYNC);
105
+ }
106
+ }
107
+
108
+ if (left.type === 'CoverParenthesizedExpressionAndArrowParameterList') {
109
+ assignmentInfo.clear();
110
+ const node = this.startNode<ParseNode.ArrowFunction>(left);
111
+ return this.parseArrowFunction(node, left, FunctionKind.NORMAL);
112
+ }
113
+
114
+ switch (this.peek().type) {
115
+ case Token.ASSIGN:
116
+ case Token.ASSIGN_MUL:
117
+ case Token.ASSIGN_DIV:
118
+ case Token.ASSIGN_MOD:
119
+ case Token.ASSIGN_ADD:
120
+ case Token.ASSIGN_SUB:
121
+ case Token.ASSIGN_SHL:
122
+ case Token.ASSIGN_SAR:
123
+ case Token.ASSIGN_SHR:
124
+ case Token.ASSIGN_BIT_AND:
125
+ case Token.ASSIGN_BIT_XOR:
126
+ case Token.ASSIGN_BIT_OR:
127
+ case Token.ASSIGN_EXP:
128
+ case Token.ASSIGN_AND:
129
+ case Token.ASSIGN_OR:
130
+ case Token.ASSIGN_NULLISH: {
131
+ assignmentInfo.clear();
132
+ const node = this.startNode<ParseNode.AssignmentExpression>(left);
133
+ this.validateAssignmentTarget(left);
134
+ node.LeftHandSideExpression = left;
135
+ // NOTE: This cast isn't strictly sound as it depends on an expectation that `this.next.value` is correlated
136
+ // to `this.peek().type` which cannot be verified by the type system.
137
+ node.AssignmentOperator = this.next().value as ParseNode.AssignmentExpression['AssignmentOperator'];
138
+ node.AssignmentExpression = this.parseAssignmentExpression();
139
+ return this.finishNode(node, 'AssignmentExpression');
140
+ }
141
+ default:
142
+ return left;
143
+ }
144
+ }
145
+
146
+ validateAssignmentTarget(node: ParseNode) {
147
+ switch (node.type) {
148
+ case 'IdentifierReference':
149
+ if (this.isStrictMode() && (node.name === 'eval' || node.name === 'arguments')) {
150
+ break;
151
+ }
152
+ return;
153
+ case 'CoverInitializedName':
154
+ this.validateAssignmentTarget(node.IdentifierReference);
155
+ return;
156
+ case 'MemberExpression':
157
+ return;
158
+ case 'SuperProperty':
159
+ return;
160
+ case 'ParenthesizedExpression':
161
+ if (node.Expression.type === 'ObjectLiteral' || node.Expression.type === 'ArrayLiteral') {
162
+ break;
163
+ }
164
+ this.validateAssignmentTarget(node.Expression);
165
+ return;
166
+ case 'ArrayLiteral':
167
+ node.ElementList.forEach((p, i) => {
168
+ if (p.type === 'SpreadElement' && (i !== node.ElementList.length - 1 || node.hasTrailingComma)) {
169
+ this.raiseEarly('InvalidAssignmentTarget', p);
170
+ }
171
+ if (p.type === 'AssignmentExpression') {
172
+ this.validateAssignmentTarget(p.LeftHandSideExpression);
173
+ } else {
174
+ this.validateAssignmentTarget(p);
175
+ }
176
+ });
177
+ return;
178
+ case 'ObjectLiteral':
179
+ node.PropertyDefinitionList.forEach((p, i) => {
180
+ if (p.type === 'PropertyDefinition' && !p.PropertyName
181
+ && i !== node.PropertyDefinitionList.length - 1) {
182
+ this.raiseEarly('InvalidAssignmentTarget', p);
183
+ }
184
+ this.validateAssignmentTarget(p);
185
+ });
186
+ return;
187
+ case 'PropertyDefinition':
188
+ if (node.AssignmentExpression.type === 'AssignmentExpression') {
189
+ this.validateAssignmentTarget(node.AssignmentExpression.LeftHandSideExpression);
190
+ } else {
191
+ this.validateAssignmentTarget(node.AssignmentExpression);
192
+ }
193
+ return;
194
+ case 'Elision':
195
+ return;
196
+ case 'SpreadElement':
197
+ if (node.AssignmentExpression.type === 'AssignmentExpression') {
198
+ break;
199
+ }
200
+ this.validateAssignmentTarget(node.AssignmentExpression);
201
+ return;
202
+ default:
203
+ break;
204
+ }
205
+ this.raiseEarly('InvalidAssignmentTarget', node);
206
+ }
207
+
208
+ // YieldExpression :
209
+ // `yield`
210
+ // `yield` [no LineTerminator here] AssignmentExpression
211
+ // `yield` [no LineTerminator here] `*` AssignmentExpression
212
+ parseYieldExpression(): ParseNode.YieldExpression {
213
+ if (this.scope.inParameters()) {
214
+ this.raiseEarly('YieldInFormalParameters');
215
+ }
216
+ const node = this.startNode<ParseNode.YieldExpression>();
217
+ this.expect(Token.YIELD);
218
+ if (this.peek().hadLineTerminatorBefore) {
219
+ node.hasStar = false;
220
+ node.AssignmentExpression = null;
221
+ } else {
222
+ node.hasStar = this.eat(Token.MUL);
223
+ if (node.hasStar) {
224
+ node.AssignmentExpression = this.parseAssignmentExpression();
225
+ } else {
226
+ switch (this.peek().type) {
227
+ case Token.EOS:
228
+ case Token.SEMICOLON:
229
+ case Token.RBRACE:
230
+ case Token.RBRACK:
231
+ case Token.RPAREN:
232
+ case Token.COLON:
233
+ case Token.COMMA:
234
+ case Token.IN:
235
+ node.AssignmentExpression = null;
236
+ break;
237
+ default:
238
+ node.AssignmentExpression = this.parseAssignmentExpression();
239
+ }
240
+ }
241
+ }
242
+ this.scope.arrowInfo?.yieldExpressions.push(node as ParseNode.YieldExpression);
243
+ return this.finishNode(node, 'YieldExpression');
244
+ }
245
+
246
+ // ConditionalExpression :
247
+ // ShortCircuitExpression
248
+ // ShortCircuitExpression `?` AssignmentExpression `:` AssignmentExpression
249
+ parseConditionalExpression(): ParseNode.ConditionalExpressionOrHigher {
250
+ const ShortCircuitExpression = this.parseShortCircuitExpression();
251
+ if (this.eat(Token.CONDITIONAL)) {
252
+ const node = this.startNode<ParseNode.ConditionalExpression>(ShortCircuitExpression);
253
+ node.ShortCircuitExpression = ShortCircuitExpression;
254
+ this.scope.with({ in: true }, () => {
255
+ node.AssignmentExpression_a = this.parseAssignmentExpression();
256
+ });
257
+ this.expect(Token.COLON);
258
+ node.AssignmentExpression_b = this.parseAssignmentExpression();
259
+ return this.finishNode(node, 'ConditionalExpression');
260
+ }
261
+ return ShortCircuitExpression;
262
+ }
263
+
264
+ // ShortCircuitExpression :
265
+ // LogicalORExpression
266
+ // CoalesceExpression
267
+ //
268
+ // CoalesceExpression :
269
+ // CoalesceExpressionHead `??` BitwiseORExpression
270
+ //
271
+ // CoalesceExpressionHead :
272
+ // CoalesceExpression
273
+ // BitwiseORExpression
274
+ parseShortCircuitExpression(): ParseNode.ShortCircuitExpressionOrHigher {
275
+ // Start parse at BIT_OR, right above AND/OR/NULLISH
276
+ const expression = this.parseBinaryExpression(TokenPrecedence[Token.BIT_OR]) as ParseNode.BitwiseORExpressionOrHigher;
277
+ switch (this.peek().type) {
278
+ case Token.AND:
279
+ case Token.OR:
280
+ // Drop into normal binary chain starting at OR
281
+ return this.parseBinaryExpression(TokenPrecedence[Token.OR], expression) as ParseNode.LogicalORExpressionOrHigher;
282
+ case Token.NULLISH: {
283
+ let x: ParseNode.CoalesceExpressionHead = expression;
284
+ while (this.eat(Token.NULLISH)) {
285
+ const node = this.startNode<ParseNode.CoalesceExpression>();
286
+ node.CoalesceExpressionHead = x;
287
+ node.BitwiseORExpression = this.parseBinaryExpression(TokenPrecedence[Token.BIT_OR]) as ParseNode.BitwiseORExpressionOrHigher;
288
+ x = this.finishNode(node, 'CoalesceExpression');
289
+ }
290
+ return x;
291
+ }
292
+ default:
293
+ return expression;
294
+ }
295
+ }
296
+
297
+ parseBinaryExpression(precedence: number, x?: ParseNode.BinaryExpressionOrHigher | ParseNode.PrivateIdentifier): ParseNode.BinaryExpressionOrHigher | ParseNode.PrivateIdentifier {
298
+ if (!x) {
299
+ if (this.test(Token.PRIVATE_IDENTIFIER)) {
300
+ x = this.parsePrivateIdentifier();
301
+ const p = TokenPrecedence[this.peek().type];
302
+ if (!this.test(Token.IN) || p < precedence) {
303
+ this.raise('UnexpectedToken');
304
+ }
305
+ this.scope.checkUndefinedPrivate(x);
306
+ return this.parseBinaryExpression(p, x);
307
+ } else {
308
+ x = this.parseUnaryExpression();
309
+ }
310
+ }
311
+
312
+ // NOTE: While the algorithm may be efficient, many casts below are inherently unsound as they depend on assumptions
313
+ // that cannot be proven in the type system without runtime assertions.
314
+ let p = TokenPrecedence[this.peek().type];
315
+ if (p >= precedence) {
316
+ do {
317
+ while (TokenPrecedence[this.peek().type] === p) {
318
+ const left = x;
319
+ if (p === TokenPrecedence[Token.EXP] && (left.type === 'UnaryExpression' || left.type === 'AwaitExpression')) {
320
+ return left;
321
+ }
322
+ let node: ParseNode.Unfinished<ParseNode.BinaryExpression>;
323
+ if (this.peek().type === Token.IN && !this.scope.hasIn()) {
324
+ return left;
325
+ }
326
+ const op = this.next();
327
+ const right = this.parseBinaryExpression(op.type === Token.EXP ? p : p + 1);
328
+ let name: 'ExponentiationExpression'
329
+ | 'MultiplicativeExpression'
330
+ | 'AdditiveExpression'
331
+ | 'ShiftExpression'
332
+ | 'RelationalExpression'
333
+ | 'EqualityExpression'
334
+ | 'BitwiseANDExpression'
335
+ | 'BitwiseXORExpression'
336
+ | 'BitwiseORExpression'
337
+ | 'LogicalANDExpression'
338
+ | 'LogicalORExpression';
339
+ switch (op.type) {
340
+ case Token.EXP:
341
+ name = 'ExponentiationExpression';
342
+ node = this.startNode<ParseNode.ExponentiationExpression>(left);
343
+ node.UpdateExpression = left as ParseNode.UpdateExpressionOrHigher; // NOTE: unsound cast
344
+ node.ExponentiationExpression = right as ParseNode.ExponentiationExpressionOrHigher; // NOTE: unsound cast
345
+ break;
346
+ case Token.MUL:
347
+ case Token.DIV:
348
+ case Token.MOD:
349
+ name = 'MultiplicativeExpression';
350
+ node = this.startNode<ParseNode.MultiplicativeExpression>(left);
351
+ node.MultiplicativeExpression = left as ParseNode.MultiplicativeExpressionOrHigher; // NOTE: unsound cast
352
+ node.MultiplicativeOperator = op.value as ParseNode.MultiplicativeOperator; // NOTE: unsound cast
353
+ node.ExponentiationExpression = right as ParseNode.ExponentiationExpressionOrHigher; // NOTE: unsound cast
354
+ break;
355
+ case Token.ADD:
356
+ case Token.SUB:
357
+ name = 'AdditiveExpression';
358
+ node = this.startNode<ParseNode.AdditiveExpression>(left);
359
+ node.AdditiveExpression = left as ParseNode.AdditiveExpressionOrHigher; // NOTE: unsound cast
360
+ node.MultiplicativeExpression = right as ParseNode.MultiplicativeExpressionOrHigher; // NOTE: unsound cast
361
+ node.operator = op.value as ParseNode.AdditiveExpression['operator']; // NOTE: unsound cast
362
+ break;
363
+ case Token.SHL:
364
+ case Token.SAR:
365
+ case Token.SHR:
366
+ name = 'ShiftExpression';
367
+ node = this.startNode<ParseNode.ShiftExpression>(left);
368
+ node.ShiftExpression = left as ParseNode.ShiftExpressionOrHigher; // NOTE: unsound cast
369
+ node.AdditiveExpression = right as ParseNode.AdditiveExpressionOrHigher; // NOTE: unsound cast
370
+ node.operator = op.value as ParseNode.ShiftExpression['operator']; // NOTE: unsound cast
371
+ break;
372
+ case Token.LT:
373
+ case Token.GT:
374
+ case Token.LTE:
375
+ case Token.GTE:
376
+ case Token.INSTANCEOF:
377
+ case Token.IN:
378
+ name = 'RelationalExpression';
379
+ node = this.startNode<ParseNode.RelationalExpression>(left);
380
+ if (left.type === 'PrivateIdentifier') {
381
+ node.PrivateIdentifier = left;
382
+ } else {
383
+ node.RelationalExpression = left as ParseNode.RelationalExpressionOrHigher; // NOTE: unsound cast
384
+ }
385
+ node.ShiftExpression = right as ParseNode.ShiftExpressionOrHigher; // NOTE: unsound cast
386
+ node.operator = op.value as ParseNode.RelationalExpression['operator']; // NOTE: unsound cast
387
+ break;
388
+ case Token.EQ:
389
+ case Token.NE:
390
+ case Token.EQ_STRICT:
391
+ case Token.NE_STRICT:
392
+ name = 'EqualityExpression';
393
+ node = this.startNode<ParseNode.EqualityExpression>(left);
394
+ node.EqualityExpression = left as ParseNode.EqualityExpressionOrHigher; // NOTE: unsound cast
395
+ node.RelationalExpression = right as ParseNode.RelationalExpressionOrHigher; // NOTE: unsound cast
396
+ node.operator = op.value as ParseNode.EqualityExpression['operator']; // NOTE: unsound cast
397
+ break;
398
+ case Token.BIT_AND:
399
+ name = 'BitwiseANDExpression';
400
+ node = this.startNode<ParseNode.BitwiseANDExpression>(left);
401
+ node.A = left as ParseNode.BitwiseANDExpressionOrHigher; // NOTE: unsound cast
402
+ node.operator = op.value as ParseNode.BitwiseANDExpression['operator']; // NOTE: unsound cast
403
+ node.B = right as ParseNode.EqualityExpressionOrHigher; // NOTE: unsound cast
404
+ break;
405
+ case Token.BIT_XOR:
406
+ name = 'BitwiseXORExpression';
407
+ node = this.startNode<ParseNode.BitwiseXORExpression>(left);
408
+ node.A = left as ParseNode.BitwiseXORExpressionOrHigher; // NOTE: unsound cast
409
+ node.operator = op.value as ParseNode.BitwiseXORExpression['operator']; // NOTE: unsound cast
410
+ node.B = right as ParseNode.BitwiseANDExpressionOrHigher; // NOTE: unsound cast
411
+ break;
412
+ case Token.BIT_OR:
413
+ name = 'BitwiseORExpression';
414
+ node = this.startNode<ParseNode.BitwiseORExpression>(left);
415
+ node.A = left as ParseNode.BitwiseORExpressionOrHigher; // NOTE: unsound cast
416
+ node.operator = op.value as ParseNode.BitwiseORExpression['operator']; // NOTE: unsound cast
417
+ node.B = right as ParseNode.BitwiseXORExpressionOrHigher; // NOTE: unsound cast
418
+ break;
419
+ case Token.AND:
420
+ name = 'LogicalANDExpression';
421
+ node = this.startNode<ParseNode.LogicalANDExpression>(left);
422
+ node.LogicalANDExpression = left as ParseNode.LogicalANDExpressionOrHigher; // NOTE: unsound cast
423
+ node.BitwiseORExpression = right as ParseNode.BitwiseORExpressionOrHigher; // NOTE: unsound cast
424
+ break;
425
+ case Token.OR:
426
+ name = 'LogicalORExpression';
427
+ node = this.startNode<ParseNode.LogicalORExpression>(left);
428
+ node.LogicalORExpression = left as ParseNode.LogicalORExpressionOrHigher; // NOTE: unsound cast
429
+ node.LogicalANDExpression = right as ParseNode.LogicalANDExpressionOrHigher; // NOTE: unsound cast
430
+ break;
431
+ default:
432
+ this.unexpected(op);
433
+ }
434
+ x = this.finishNode(node, name);
435
+ }
436
+ p -= 1;
437
+ } while (p >= precedence);
438
+ }
439
+ return x;
440
+ }
441
+
442
+ // UnaryExpression :
443
+ // UpdateExpression
444
+ // `delete` UnaryExpression
445
+ // `void` UnaryExpression
446
+ // `typeof` UnaryExpression
447
+ // `+` UnaryExpression
448
+ // `-` UnaryExpression
449
+ // `~` UnaryExpression
450
+ // `!` UnaryExpression
451
+ // [+Await] AwaitExpression
452
+ parseUnaryExpression(): ParseNode.UnaryExpressionOrHigher {
453
+ return this.scope.with({ in: true }, () => {
454
+ if (this.test(Token.AWAIT) && this.scope.hasAwait()) {
455
+ return this.parseAwaitExpression();
456
+ }
457
+ switch (this.peek().type) {
458
+ case Token.DELETE:
459
+ case Token.VOID:
460
+ case Token.TYPEOF:
461
+ case Token.ADD:
462
+ case Token.SUB:
463
+ case Token.BIT_NOT:
464
+ case Token.NOT: {
465
+ const node = this.startNode<ParseNode.UnaryExpression>();
466
+ node.operator = this.next().value as ParseNode.UnaryExpression['operator']; // NOTE: unsound cast
467
+ node.UnaryExpression = this.parseUnaryExpression();
468
+ if (node.operator === 'delete') {
469
+ let target: ParseNode.Expression = node.UnaryExpression;
470
+ while (target.type === 'ParenthesizedExpression') {
471
+ target = target.Expression;
472
+ }
473
+ if (this.isStrictMode() && target.type === 'IdentifierReference') {
474
+ this.raiseEarly('DeleteIdentifier', target);
475
+ }
476
+ if (target.type === 'MemberExpression' && target.PrivateIdentifier) {
477
+ this.raiseEarly('DeletePrivateName', target);
478
+ }
479
+ }
480
+ return this.finishNode(node, 'UnaryExpression');
481
+ }
482
+ default:
483
+ return this.parseUpdateExpression();
484
+ }
485
+ });
486
+ }
487
+
488
+ // AwaitExpression : `await` UnaryExpression
489
+ parseAwaitExpression(): ParseNode.AwaitExpression {
490
+ if (this.scope.inParameters()) {
491
+ this.raiseEarly('AwaitInFormalParameters');
492
+ } else if (this.scope.inClassStaticBlock()) {
493
+ this.raiseEarly('AwaitInClassStaticBlock');
494
+ }
495
+ const node = this.startNode<ParseNode.AwaitExpression>();
496
+ this.expect(Token.AWAIT);
497
+ node.UnaryExpression = this.parseUnaryExpression();
498
+ this.scope.arrowInfo?.awaitExpressions.push(node as ParseNode.AwaitExpression);
499
+ if (!this.scope.hasReturn()) {
500
+ this.state.hasTopLevelAwait = true;
501
+ }
502
+ return this.finishNode(node, 'AwaitExpression');
503
+ }
504
+
505
+ // UpdateExpression :
506
+ // LeftHandSideExpression
507
+ // LeftHandSideExpression [no LineTerminator here] `++`
508
+ // LeftHandSideExpression [no LineTerminator here] `--`
509
+ // `++` UnaryExpression
510
+ // `--` UnaryExpression
511
+ parseUpdateExpression(): ParseNode.UpdateExpressionOrHigher {
512
+ if (this.test(Token.INC) || this.test(Token.DEC)) {
513
+ const node = this.startNode<ParseNode.UpdateExpression>();
514
+ node.operator = this.next().value as ParseNode.UpdateExpression['operator']; // NOTE: unsound cast
515
+ node.LeftHandSideExpression = null;
516
+ node.UnaryExpression = this.parseUnaryExpression();
517
+ this.validateAssignmentTarget(node.UnaryExpression);
518
+ return this.finishNode(node, 'UpdateExpression');
519
+ }
520
+ const argument = this.parseLeftHandSideExpression();
521
+ if (!this.peek().hadLineTerminatorBefore) {
522
+ if (this.test(Token.INC) || this.test(Token.DEC)) {
523
+ this.validateAssignmentTarget(argument);
524
+ const node = this.startNode<ParseNode.UpdateExpression>(argument);
525
+ node.operator = this.next().value as ParseNode.UpdateExpression['operator']; // NOTE: unsound cast
526
+ node.LeftHandSideExpression = argument;
527
+ node.UnaryExpression = null;
528
+ return this.finishNode(node, 'UpdateExpression');
529
+ }
530
+ }
531
+ return argument;
532
+ }
533
+
534
+ // LeftHandSideExpression
535
+ parseLeftHandSideExpression(allowCalls = true): ParseNode.LeftHandSideExpression {
536
+ let result: ParseNode.LeftHandSideExpression;
537
+ switch (this.peek().type) {
538
+ case Token.NEW:
539
+ result = this.parseNewExpression();
540
+ break;
541
+ case Token.SUPER: {
542
+ const node = this.startNode<ParseNode.SuperCall | ParseNode.SuperProperty>();
543
+ this.next();
544
+ if (this.test(Token.LPAREN)) {
545
+ if (!this.scope.hasSuperCall()) {
546
+ this.raiseEarly('InvalidSuperCall');
547
+ }
548
+ node.Arguments = this.parseArguments().Arguments;
549
+ result = this.finishNode(node, 'SuperCall');
550
+ } else {
551
+ if (!this.scope.hasSuperProperty()) {
552
+ this.raiseEarly('InvalidSuperProperty');
553
+ }
554
+ if (this.eat(Token.LBRACK)) {
555
+ node.Expression = this.parseExpression();
556
+ this.expect(Token.RBRACK);
557
+ node.IdentifierName = null;
558
+ } else {
559
+ this.expect(Token.PERIOD);
560
+ node.Expression = null;
561
+ node.IdentifierName = this.parseIdentifierName();
562
+ }
563
+ result = this.finishNode(node, 'SuperProperty');
564
+ }
565
+ break;
566
+ }
567
+ case Token.IMPORT: {
568
+ const node = this.startNode<ParseNode.ImportMeta | ParseNode.ImportCall>();
569
+ this.next();
570
+ if (this.scope.hasImportMeta() && this.eat(Token.PERIOD)) {
571
+ this.expect('meta');
572
+ result = this.finishNode(node, 'ImportMeta');
573
+ } else {
574
+ if (!allowCalls) {
575
+ this.unexpected();
576
+ }
577
+ this.expect(Token.LPAREN);
578
+ node.AssignmentExpression = this.parseAssignmentExpression();
579
+ this.expect(Token.RPAREN);
580
+ result = this.finishNode(node, 'ImportCall');
581
+ }
582
+ break;
583
+ }
584
+ default:
585
+ result = this.parsePrimaryExpression();
586
+ break;
587
+ }
588
+
589
+ const check = allowCalls ? isPropertyOrCall : isMember;
590
+ while (check(this.peek().type)) {
591
+ let finished: ParseNode.LeftHandSideExpression;
592
+ switch (this.peek().type) {
593
+ case Token.LBRACK: {
594
+ const node = this.startNode<ParseNode.MemberExpression>(result);
595
+ this.next();
596
+ node.MemberExpression = result;
597
+ node.IdentifierName = null;
598
+ node.Expression = this.parseExpression();
599
+ this.expect(Token.RBRACK);
600
+ finished = this.finishNode(node, 'MemberExpression');
601
+ break;
602
+ }
603
+ case Token.PERIOD: {
604
+ const node = this.startNode<ParseNode.MemberExpression>(result);
605
+ this.next();
606
+ node.MemberExpression = result;
607
+ if (this.test(Token.PRIVATE_IDENTIFIER)) {
608
+ node.PrivateIdentifier = this.parsePrivateIdentifier();
609
+ this.scope.checkUndefinedPrivate(node.PrivateIdentifier);
610
+ node.IdentifierName = null;
611
+ } else {
612
+ node.IdentifierName = this.parseIdentifierName();
613
+ node.PrivateIdentifier = null;
614
+ }
615
+ node.Expression = null;
616
+ finished = this.finishNode(node, 'MemberExpression');
617
+ break;
618
+ }
619
+ case Token.LPAREN: {
620
+ const node = this.startNode<ParseNode.CallExpression>(result);
621
+ // `async` [no LineTerminator here] `(`
622
+ const couldBeArrow = this.matches('async', this.currentToken!)
623
+ && result.type === 'IdentifierReference'
624
+ && !this.peek().hadLineTerminatorBefore;
625
+ if (couldBeArrow) {
626
+ this.scope.pushArrowInfo(true);
627
+ }
628
+ const { Arguments, trailingComma } = this.parseArguments();
629
+ node.CallExpression = result;
630
+ node.Arguments = Arguments;
631
+ if (couldBeArrow) {
632
+ node.arrowInfo = this.scope.popArrowInfo();
633
+ node.arrowInfo.hasTrailingComma = trailingComma;
634
+ }
635
+ finished = this.finishNode(node, 'CallExpression');
636
+ break;
637
+ }
638
+ case Token.OPTIONAL: {
639
+ const node = this.startNode<ParseNode.OptionalExpression>(result);
640
+ node.MemberExpression = result;
641
+ node.OptionalChain = this.parseOptionalChain();
642
+ finished = this.finishNode(node, 'OptionalExpression');
643
+ break;
644
+ }
645
+ case Token.TEMPLATE: {
646
+ const node = this.startNode<ParseNode.TaggedTemplateExpression>(result);
647
+ node.MemberExpression = result;
648
+ node.TemplateLiteral = this.parseTemplateLiteral(true);
649
+ finished = this.finishNode(node, 'TaggedTemplateExpression');
650
+ break;
651
+ }
652
+ default:
653
+ this.unexpected();
654
+ }
655
+ // NOTE: unwinds ParseNode.Finish type alias to avoid circularity issues in type checker
656
+ result = finished as ParseNode.CallExpressionOrHigher | ParseNode.MemberExpressionOrHigher;
657
+ }
658
+ return result;
659
+ }
660
+
661
+ // OptionalChain
662
+ parseOptionalChain(): ParseNode.OptionalChain {
663
+ this.expect(Token.OPTIONAL);
664
+ const base = this.startNode<ParseNode.OptionalChain>();
665
+ base.OptionalChain = null;
666
+ if (this.test(Token.LPAREN)) {
667
+ base.Arguments = this.parseArguments().Arguments;
668
+ } else if (this.eat(Token.LBRACK)) {
669
+ base.Expression = this.parseExpression();
670
+ this.expect(Token.RBRACK);
671
+ } else if (this.test(Token.TEMPLATE)) {
672
+ this.raise('TemplateInOptionalChain');
673
+ } else if (this.test(Token.PRIVATE_IDENTIFIER)) {
674
+ base.PrivateIdentifier = this.parsePrivateIdentifier();
675
+ this.scope.checkUndefinedPrivate(base.PrivateIdentifier);
676
+ } else {
677
+ base.IdentifierName = this.parseIdentifierName();
678
+ }
679
+
680
+ let chain = this.finishNode(base, 'OptionalChain');
681
+ while (true) {
682
+ const node = this.startNode<ParseNode.OptionalChain>();
683
+ if (this.test(Token.LPAREN)) {
684
+ node.OptionalChain = chain;
685
+ node.Arguments = this.parseArguments().Arguments;
686
+ chain = this.finishNode(node, 'OptionalChain');
687
+ } else if (this.eat(Token.LBRACK)) {
688
+ node.OptionalChain = chain;
689
+ node.Expression = this.parseExpression();
690
+ this.expect(Token.RBRACK);
691
+ chain = this.finishNode(node, 'OptionalChain');
692
+ } else if (this.test(Token.TEMPLATE)) {
693
+ this.raise('TemplateInOptionalChain');
694
+ } else if (this.eat(Token.PERIOD)) {
695
+ node.OptionalChain = chain;
696
+ if (this.test(Token.PRIVATE_IDENTIFIER)) {
697
+ node.PrivateIdentifier = this.parsePrivateIdentifier();
698
+ this.scope.checkUndefinedPrivate(node.PrivateIdentifier);
699
+ } else {
700
+ node.IdentifierName = this.parseIdentifierName();
701
+ }
702
+ chain = this.finishNode(node, 'OptionalChain');
703
+ } else {
704
+ return chain;
705
+ }
706
+ }
707
+ }
708
+
709
+ // NewExpression
710
+ parseNewExpression(): ParseNode.NewExpressionOrHigher {
711
+ const node = this.startNode<ParseNode.NewTarget | ParseNode.NewExpression>();
712
+ this.expect(Token.NEW);
713
+ if (this.scope.hasNewTarget() && this.eat(Token.PERIOD)) {
714
+ this.expect('target');
715
+ return this.finishNode(node as ParseNode.NewTarget, 'NewTarget');
716
+ }
717
+ node.MemberExpression = this.parseLeftHandSideExpression(false);
718
+ if (this.test(Token.LPAREN)) {
719
+ node.Arguments = this.parseArguments().Arguments;
720
+ } else {
721
+ node.Arguments = null;
722
+ }
723
+ return this.finishNode(node as ParseNode.NewExpression, 'NewExpression');
724
+ }
725
+
726
+ // PrimaryExpression :
727
+ // ...
728
+ parsePrimaryExpression(): ParseNode.PrimaryExpression {
729
+ switch (this.peek().type) {
730
+ case Token.IDENTIFIER:
731
+ case Token.ESCAPED_KEYWORD:
732
+ case Token.YIELD:
733
+ case Token.AWAIT:
734
+ // `async` [no LineTerminator here] `function`
735
+ if (this.test('async') && this.testAhead(Token.FUNCTION)
736
+ && !this.peekAhead().hadLineTerminatorBefore) {
737
+ return this.parseFunctionExpression(FunctionKind.ASYNC);
738
+ }
739
+ return this.parseIdentifierReference();
740
+ case Token.THIS: {
741
+ const node = this.startNode<ParseNode.ThisExpression>();
742
+ this.next();
743
+ return this.finishNode(node, 'ThisExpression');
744
+ }
745
+ case Token.NUMBER:
746
+ case Token.BIGINT:
747
+ return this.parseNumericLiteral();
748
+ case Token.STRING:
749
+ return this.parseStringLiteral();
750
+ case Token.NULL: {
751
+ const node = this.startNode<ParseNode.NullLiteral>();
752
+ this.next();
753
+ return this.finishNode(node, 'NullLiteral');
754
+ }
755
+ case Token.TRUE:
756
+ case Token.FALSE:
757
+ return this.parseBooleanLiteral();
758
+ case Token.LBRACK:
759
+ return this.parseArrayLiteral();
760
+ case Token.LBRACE:
761
+ return this.parseObjectLiteral();
762
+ case Token.FUNCTION:
763
+ return this.parseFunctionExpression(FunctionKind.NORMAL);
764
+ case Token.CLASS:
765
+ return this.parseClassExpression();
766
+ case Token.TEMPLATE:
767
+ return this.parseTemplateLiteral();
768
+ case Token.DIV:
769
+ case Token.ASSIGN_DIV:
770
+ return this.parseRegularExpressionLiteral();
771
+ case Token.LPAREN:
772
+ return this.parseCoverParenthesizedExpressionAndArrowParameterList();
773
+ default:
774
+ return this.unexpected();
775
+ }
776
+ }
777
+
778
+ // NumericLiteral
779
+ parseNumericLiteral(): ParseNode.NumericLiteral {
780
+ const node = this.startNode<ParseNode.NumericLiteral>();
781
+ if (!this.test(Token.NUMBER) && !this.test(Token.BIGINT)) {
782
+ this.unexpected();
783
+ }
784
+ node.value = this.next().valueAsNumeric();
785
+ return this.finishNode(node, 'NumericLiteral');
786
+ }
787
+
788
+ // StringLiteral
789
+ parseStringLiteral(): ParseNode.StringLiteral {
790
+ const node = this.startNode<ParseNode.StringLiteral>();
791
+ if (!this.test(Token.STRING)) {
792
+ this.unexpected();
793
+ }
794
+ node.value = this.next().valueAsString();
795
+ return this.finishNode(node, 'StringLiteral');
796
+ }
797
+
798
+ // BooleanLiteral :
799
+ // `true`
800
+ // `false`
801
+ parseBooleanLiteral(): ParseNode.BooleanLiteral {
802
+ const node = this.startNode<ParseNode.BooleanLiteral>();
803
+ switch (this.peek().type) {
804
+ case Token.TRUE:
805
+ this.next();
806
+ node.value = true;
807
+ break;
808
+ case Token.FALSE:
809
+ this.next();
810
+ node.value = false;
811
+ break;
812
+ default:
813
+ this.unexpected();
814
+ }
815
+ return this.finishNode(node, 'BooleanLiteral');
816
+ }
817
+
818
+ // ArrayLiteral :
819
+ // `[` `]`
820
+ // `[` Elision `]`
821
+ // `[` ElementList `]`
822
+ // `[` ElementList `,` `]`
823
+ // `[` ElementList `,` Elision `]`
824
+ parseArrayLiteral(): ParseNode.ArrayLiteral {
825
+ const node = this.startNode<ParseNode.ArrayLiteral>();
826
+ this.expect(Token.LBRACK);
827
+ const ElementList: Mutable<ParseNode.ElementList> = [];
828
+ node.ElementList = ElementList;
829
+ node.hasTrailingComma = false;
830
+ while (true) {
831
+ while (this.test(Token.COMMA)) {
832
+ const elision = this.startNode<ParseNode.Elision>();
833
+ this.next();
834
+ ElementList.push(this.finishNode(elision, 'Elision'));
835
+ }
836
+ if (this.eat(Token.RBRACK)) {
837
+ break;
838
+ }
839
+ if (this.test(Token.ELLIPSIS)) {
840
+ const spread = this.startNode<ParseNode.SpreadElement>();
841
+ this.next();
842
+ spread.AssignmentExpression = this.parseAssignmentExpression();
843
+ ElementList.push(this.finishNode(spread, 'SpreadElement'));
844
+ } else {
845
+ ElementList.push(this.parseAssignmentExpression());
846
+ }
847
+ if (this.eat(Token.RBRACK)) {
848
+ node.hasTrailingComma = false;
849
+ break;
850
+ }
851
+ node.hasTrailingComma = true;
852
+ this.expect(Token.COMMA);
853
+ }
854
+ return this.finishNode(node, 'ArrayLiteral');
855
+ }
856
+
857
+ // ObjectLiteral :
858
+ // `{` `}`
859
+ // `{` PropertyDefinitionList `}`
860
+ // `{` PropertyDefinitionList `,` `}`
861
+ parseObjectLiteral(): ParseNode.ObjectLiteral {
862
+ const node = this.startNode<ParseNode.ObjectLiteral>();
863
+ this.expect(Token.LBRACE);
864
+ const PropertyDefinitionList: Mutable<ParseNode.PropertyDefinitionList> = [];
865
+ node.PropertyDefinitionList = PropertyDefinitionList;
866
+ let hasProto = false;
867
+ while (true) {
868
+ if (this.eat(Token.RBRACE)) {
869
+ break;
870
+ }
871
+ const PropertyDefinition = this.parsePropertyDefinition();
872
+ if (!this.state.json
873
+ && PropertyDefinition.type === 'PropertyDefinition'
874
+ && PropertyDefinition.PropertyName
875
+ && !IsComputedPropertyKey(PropertyDefinition.PropertyName)
876
+ && PropertyDefinition.PropertyName.type !== 'NumericLiteral'
877
+ && StringValue(PropertyDefinition.PropertyName).stringValue() === '__proto__') {
878
+ if (hasProto) {
879
+ this.scope.registerObjectLiteralEarlyError(this.raiseEarly('DuplicateProto', PropertyDefinition.PropertyName));
880
+ } else {
881
+ hasProto = true;
882
+ }
883
+ }
884
+ PropertyDefinitionList.push(PropertyDefinition);
885
+ if (this.eat(Token.RBRACE)) {
886
+ break;
887
+ }
888
+ this.expect(Token.COMMA);
889
+ }
890
+ return this.finishNode(node, 'ObjectLiteral');
891
+ }
892
+
893
+ parsePropertyDefinition(): ParseNode.PropertyDefinitionLike {
894
+ return this.parseBracketedDefinition('property');
895
+ }
896
+
897
+ parseFunctionExpression(kind: FunctionKind): ParseNode.FunctionExpressionLike {
898
+ return this.parseFunction(true, kind) as ParseNode.FunctionExpressionLike;
899
+ }
900
+
901
+ parseArguments(): { Arguments: ParseNode.Arguments, trailingComma: boolean } {
902
+ this.expect(Token.LPAREN);
903
+ if (this.eat(Token.RPAREN)) {
904
+ return { Arguments: [], trailingComma: false };
905
+ }
906
+ const Arguments: Mutable<ParseNode.Arguments> = [];
907
+ let trailingComma = false;
908
+ while (true) {
909
+ const node = this.startNode<ParseNode.AssignmentRestElement>();
910
+ if (this.eat(Token.ELLIPSIS)) {
911
+ node.AssignmentExpression = this.parseAssignmentExpression();
912
+ Arguments.push(this.finishNode(node, 'AssignmentRestElement'));
913
+ } else {
914
+ Arguments.push(this.parseAssignmentExpression());
915
+ }
916
+ if (this.eat(Token.RPAREN)) {
917
+ break;
918
+ }
919
+ this.expect(Token.COMMA);
920
+ if (this.eat(Token.RPAREN)) {
921
+ trailingComma = true;
922
+ break;
923
+ }
924
+ }
925
+ return { Arguments, trailingComma };
926
+ }
927
+
928
+ /** https://tc39.es/ecma262/#sec-class-definitions */
929
+ // ClassDeclaration :
930
+ // `class` BindingIdentifier ClassTail
931
+ // [+Default] `class` ClassTail
932
+ //
933
+ // ClassExpression :
934
+ // `class` BindingIdentifier? ClassTail
935
+ parseClass(isExpression: boolean): ParseNode.ClassLike {
936
+ const node = this.startNode<ParseNode.ClassLike>();
937
+
938
+ this.expect(Token.CLASS);
939
+
940
+ this.scope.with({ strict: true }, () => {
941
+ if (!this.test(Token.LBRACE) && !this.test(Token.EXTENDS)) {
942
+ node.BindingIdentifier = this.parseBindingIdentifier();
943
+ if (!isExpression) {
944
+ this.scope.declare(node.BindingIdentifier, 'lexical');
945
+ }
946
+ } else if (isExpression === false && !this.scope.isDefault()) {
947
+ this.raise('ClassMissingBindingIdentifier');
948
+ } else {
949
+ node.BindingIdentifier = null;
950
+ }
951
+ node.ClassTail = this.scope.with({ default: false }, () => this.parseClassTail());
952
+ });
953
+
954
+ return this.finishNode(node, isExpression ? 'ClassExpression' : 'ClassDeclaration');
955
+ }
956
+
957
+ // ClassTail : ClassHeritage? `{` ClassBody? `}`
958
+ // ClassHeritage : `extends` LeftHandSideExpression
959
+ // ClassBody : ClassElementList
960
+ parseClassTail(): ParseNode.ClassTail {
961
+ const node = this.startNode<ParseNode.ClassTail>();
962
+
963
+ if (this.eat(Token.EXTENDS)) {
964
+ node.ClassHeritage = this.parseLeftHandSideExpression();
965
+ } else {
966
+ node.ClassHeritage = null;
967
+ }
968
+
969
+ this.expect(Token.LBRACE);
970
+ if (this.eat(Token.RBRACE)) {
971
+ node.ClassBody = null;
972
+ } else {
973
+ node.ClassBody = this.scope.with({
974
+ superCall: !!node.ClassHeritage,
975
+ private: true,
976
+ }, () => {
977
+ const ClassBody: Mutable<ParseNode.ClassElementList> = [];
978
+ let hasConstructor = false;
979
+ while (this.eat(Token.SEMICOLON)) {
980
+ // nothing
981
+ }
982
+ const staticPrivates = new Set();
983
+ const instancePrivates = new Set();
984
+ while (!this.eat(Token.RBRACE)) {
985
+ const m = this.parseClassElement();
986
+ ClassBody.push(m);
987
+ while (this.eat(Token.SEMICOLON)) {
988
+ // nothing
989
+ }
990
+ if (m.type === 'ClassStaticBlock') {
991
+ continue;
992
+ }
993
+
994
+ if (m.ClassElementName?.type === 'PrivateIdentifier') {
995
+ let type: 'field' | 'method' | 'set' | 'get';
996
+ if (m.type === 'FieldDefinition') {
997
+ type = 'field';
998
+ } else if (m.UniqueFormalParameters) {
999
+ type = 'method';
1000
+ } else if (m.PropertySetParameterList) {
1001
+ type = 'set';
1002
+ } else {
1003
+ type = 'get';
1004
+ }
1005
+ if (type === 'get' || type === 'set') {
1006
+ if (m.static) {
1007
+ if (instancePrivates.has(m.ClassElementName.name)) {
1008
+ this.raiseEarly('InvalidMethodName', m, m.ClassElementName.name);
1009
+ } else {
1010
+ staticPrivates.add(m.ClassElementName.name);
1011
+ }
1012
+ } else {
1013
+ if (staticPrivates.has(m.ClassElementName.name)) {
1014
+ this.raiseEarly('InvalidMethodName', m, m.ClassElementName.name);
1015
+ } else {
1016
+ instancePrivates.add(m.ClassElementName.name);
1017
+ }
1018
+ }
1019
+ }
1020
+ this.scope.declare(m.ClassElementName, 'private', type);
1021
+ if (m.ClassElementName.name === 'constructor') {
1022
+ this.raiseEarly('InvalidMethodName', m, m.ClassElementName.name);
1023
+ }
1024
+ }
1025
+
1026
+ const name = PropName(m);
1027
+ const isActualConstructor = !m.static
1028
+ && m.type === 'MethodDefinition'
1029
+ && !!m.UniqueFormalParameters
1030
+ && name === 'constructor';
1031
+ if (isActualConstructor) {
1032
+ if (hasConstructor) {
1033
+ this.raiseEarly('DuplicateConstructor', m);
1034
+ } else {
1035
+ hasConstructor = true;
1036
+ }
1037
+ }
1038
+ if ((m.static && name === 'prototype')
1039
+ || (!m.static && !isActualConstructor && name === 'constructor')) {
1040
+ this.raiseEarly('InvalidMethodName', m, name);
1041
+ }
1042
+ if (m.static && m.type === 'FieldDefinition' && name === 'constructor') {
1043
+ this.raiseEarly('InvalidMethodName', m, name);
1044
+ }
1045
+ }
1046
+ return ClassBody;
1047
+ });
1048
+ }
1049
+
1050
+ return this.finishNode(node, 'ClassTail');
1051
+ }
1052
+
1053
+ parseClassElement(): ParseNode.ClassElement {
1054
+ let element;
1055
+ if (this.test('static') && this.testAhead(Token.LBRACE)) {
1056
+ const node = this.startNode<ParseNode.ClassStaticBlock>();
1057
+ this.expect('static');
1058
+ node.static = true;
1059
+ this.expect(Token.LBRACE);
1060
+ const ClassStaticBlockBody = this.startNode<ParseNode.ClassStaticBlockBody>();
1061
+ ClassStaticBlockBody.ClassStaticBlockStatementList = this.scope.with(
1062
+ {
1063
+ lexical: true,
1064
+ yield: false,
1065
+ await: true,
1066
+ return: false,
1067
+ superProperty: true,
1068
+ superCall: false,
1069
+ newTarget: true,
1070
+ label: 'boundary',
1071
+ classStaticBlock: true,
1072
+ },
1073
+ () => this.parseStatementList(Token.RBRACE),
1074
+ );
1075
+ node.ClassStaticBlockBody = this.finishNode(ClassStaticBlockBody, 'ClassStaticBlockBody');
1076
+ element = this.finishNode(node, 'ClassStaticBlock');
1077
+ } else {
1078
+ element = this.parseBracketedDefinition('class element');
1079
+ }
1080
+ return element;
1081
+ }
1082
+
1083
+ parseClassExpression(): ParseNode.ClassExpression {
1084
+ return this.parseClass(true) as ParseNode.ClassExpression;
1085
+ }
1086
+
1087
+ parseTemplateLiteral(tagged = false): ParseNode.TemplateLiteral {
1088
+ const node = this.startNode<ParseNode.TemplateLiteral>();
1089
+ const TemplateSpanList: string[] = [];
1090
+ const ExpressionList: ParseNode.Expression[] = [];
1091
+ let buffer = '';
1092
+ while (true) {
1093
+ if (this.position >= this.source.length) {
1094
+ this.raise('UnterminatedTemplate', this.position);
1095
+ }
1096
+ const c = this.source[this.position];
1097
+ switch (c) {
1098
+ case '`':
1099
+ this.position += 1;
1100
+ TemplateSpanList.push(buffer);
1101
+ this.next();
1102
+ if (!tagged) {
1103
+ TemplateSpanList.forEach((s) => {
1104
+ if (TV(s) === undefined) {
1105
+ this.raise('InvalidTemplateEscape');
1106
+ }
1107
+ });
1108
+ }
1109
+ node.TemplateSpanList = TemplateSpanList;
1110
+ node.ExpressionList = ExpressionList;
1111
+ return this.finishNode(node, 'TemplateLiteral');
1112
+ case '$':
1113
+ this.position += 1;
1114
+ if (this.source[this.position] === '{') {
1115
+ this.position += 1;
1116
+ TemplateSpanList.push(buffer);
1117
+ buffer = '';
1118
+ this.next();
1119
+ ExpressionList.push(this.parseExpression());
1120
+ break;
1121
+ }
1122
+ buffer += c;
1123
+ break;
1124
+ default: {
1125
+ if (c === '\\') {
1126
+ buffer += c;
1127
+ this.position += 1;
1128
+ }
1129
+ const l = this.source[this.position];
1130
+ this.position += 1;
1131
+ if (isLineTerminator(l)) {
1132
+ if (l === '\r' && this.source[this.position] === '\n') {
1133
+ this.position += 1;
1134
+ }
1135
+ if (l === '\u{2028}' || l === '\u{2029}') {
1136
+ buffer += l;
1137
+ } else {
1138
+ buffer += '\n';
1139
+ }
1140
+ this.line += 1;
1141
+ this.columnOffset = this.position;
1142
+ } else {
1143
+ buffer += l;
1144
+ }
1145
+ break;
1146
+ }
1147
+ }
1148
+ }
1149
+ }
1150
+
1151
+ // RegularExpressionLiteral :
1152
+ // `/` RegularExpressionBody `/` RegularExpressionFlags
1153
+ parseRegularExpressionLiteral(): ParseNode.RegularExpressionLiteral {
1154
+ const node = this.startNode<ParseNode.RegularExpressionLiteral>();
1155
+ this.scanRegularExpressionBody();
1156
+ const body = this.scannedValue as string; // NOTE: unsound cast
1157
+ node.RegularExpressionBody = body;
1158
+ this.scanRegularExpressionFlags();
1159
+ node.RegularExpressionFlags = this.scannedValue as string; // NOTE: unsound cast
1160
+ try {
1161
+ const parse = (flags: RegExpParserContext) => {
1162
+ const p = new RegExpParser(body);
1163
+ return p.scope(flags, () => p.parsePattern());
1164
+ };
1165
+ if (node.RegularExpressionFlags.includes('u')) {
1166
+ parse({ U: true, N: true });
1167
+ } else {
1168
+ const pattern = parse({ U: false, N: false });
1169
+ if (pattern.groupSpecifiers.size > 0) {
1170
+ parse({ U: false, N: true });
1171
+ }
1172
+ }
1173
+ } catch (e) {
1174
+ if (e instanceof SyntaxError) {
1175
+ this.raise('Raw', node.location.startIndex + e.position! + 1, e.message);
1176
+ } else {
1177
+ throw e;
1178
+ }
1179
+ }
1180
+ const fakeToken = {
1181
+ endIndex: this.position - 1,
1182
+ line: this.line - 1,
1183
+ column: this.position - this.columnOffset,
1184
+ } as TokenData; // NOTE: unsound cast
1185
+ this.next();
1186
+ this.currentToken = fakeToken;
1187
+ return this.finishNode(node, 'RegularExpressionLiteral');
1188
+ }
1189
+
1190
+ // CoverParenthesizedExpressionAndArrowParameterList :
1191
+ // `(` Expression `)`
1192
+ // `(` Expression `,` `)`
1193
+ // `(` `)`
1194
+ // `(` `...` BindingIdentifier `)`
1195
+ // `(` `...` BindingPattern `)`
1196
+ // `(` Expression `,` `...` BindingIdentifier `)`
1197
+ // `(` Expression `.` `...` BindingPattern `)`
1198
+ parseCoverParenthesizedExpressionAndArrowParameterList(): ParseNode.CoverParenthesizedExpressionAndArrowParameterList | ParseNode.ParenthesizedExpression {
1199
+ const node = this.startNode<ParseNode.CoverParenthesizedExpressionAndArrowParameterList | ParseNode.ParenthesizedExpression>();
1200
+ const commaOp = this.startNode<ParseNode.CommaOperator>();
1201
+ this.expect(Token.LPAREN);
1202
+ if (this.test(Token.RPAREN)) {
1203
+ if (!this.testAhead(Token.ARROW) || this.peekAhead().hadLineTerminatorBefore) {
1204
+ this.unexpected();
1205
+ }
1206
+ this.next();
1207
+ node.Arguments = [];
1208
+ return this.finishNode(node, 'CoverParenthesizedExpressionAndArrowParameterList');
1209
+ }
1210
+
1211
+ this.scope.pushArrowInfo();
1212
+ this.scope.pushAssignmentInfo('arrow');
1213
+
1214
+ const expressions: (ParseNode.ArgumentListElement | ParseNode.BindingRestElement)[] = [];
1215
+ let rparenAfterComma;
1216
+ while (true) {
1217
+ if (this.test(Token.ELLIPSIS)) {
1218
+ const inner = this.startNode<ParseNode.BindingRestElement>();
1219
+ this.next();
1220
+ switch (this.peek().type) {
1221
+ case Token.LBRACE:
1222
+ case Token.LBRACK:
1223
+ inner.BindingPattern = this.parseBindingPattern();
1224
+ break;
1225
+ default:
1226
+ inner.BindingIdentifier = this.parseBindingIdentifier();
1227
+ break;
1228
+ }
1229
+ expressions.push(this.finishNode(inner, 'BindingRestElement'));
1230
+ this.expect(Token.RPAREN);
1231
+ break;
1232
+ }
1233
+ expressions.push(this.parseAssignmentExpression());
1234
+ if (this.eat(Token.COMMA)) {
1235
+ if (this.eat(Token.RPAREN)) {
1236
+ rparenAfterComma = this.currentToken;
1237
+ break;
1238
+ }
1239
+ } else {
1240
+ this.expect(Token.RPAREN);
1241
+ break;
1242
+ }
1243
+ }
1244
+
1245
+ const arrowInfo = this.scope.popArrowInfo();
1246
+ const assignmentInfo = this.scope.popAssignmentInfo();
1247
+
1248
+ // ArrowParameters :
1249
+ // CoverParenthesizedExpressionAndArrowParameterList
1250
+ if (this.test(Token.ARROW) && !this.peek().hadLineTerminatorBefore) {
1251
+ node.Arguments = expressions;
1252
+ node.arrowInfo = arrowInfo;
1253
+ assignmentInfo.clear();
1254
+ return this.finishNode(node, 'CoverParenthesizedExpressionAndArrowParameterList');
1255
+ } else {
1256
+ this.scope.arrowInfo?.merge(arrowInfo);
1257
+ }
1258
+
1259
+ // ParenthesizedExpression :
1260
+ // `(` Expression `)`
1261
+ if (expressions[expressions.length - 1].type === 'BindingRestElement') {
1262
+ this.unexpected(expressions[expressions.length - 1]);
1263
+ }
1264
+ if (rparenAfterComma) {
1265
+ this.unexpected(rparenAfterComma);
1266
+ }
1267
+ if (expressions.length === 1) {
1268
+ node.Expression = expressions[0] as ParseNode.Expression; // NOTE: unsound cast due to potential BindingRestElement
1269
+ } else {
1270
+ commaOp.ExpressionList = expressions as ParseNode.AssignmentExpressionOrHigher[]; // NOTE: unsound cast
1271
+ node.Expression = this.finishNode(commaOp, 'CommaOperator');
1272
+ }
1273
+ return this.finishNode(node, 'ParenthesizedExpression');
1274
+ }
1275
+
1276
+ // PropertyName :
1277
+ // LiteralPropertyName
1278
+ // ComputedPropertyName
1279
+ // LiteralPropertyName :
1280
+ // IdentifierName
1281
+ // StringLiteral
1282
+ // NumericLiteral
1283
+ // ComputedPropertyName :
1284
+ // `[` AssignmentExpression `]`
1285
+ parsePropertyName(): ParseNode.PropertyNameLike {
1286
+ if (this.test(Token.LBRACK)) {
1287
+ const node = this.startNode<ParseNode.PropertyName>();
1288
+ this.next();
1289
+ node.ComputedPropertyName = this.parseAssignmentExpression();
1290
+ this.expect(Token.RBRACK);
1291
+ return this.finishNode(node, 'PropertyName');
1292
+ }
1293
+ if (this.test(Token.STRING)) {
1294
+ return this.parseStringLiteral();
1295
+ }
1296
+ if (this.test(Token.NUMBER) || this.test(Token.BIGINT)) {
1297
+ return this.parseNumericLiteral();
1298
+ }
1299
+ return this.parseIdentifierName();
1300
+ }
1301
+
1302
+ // ClassElementName :
1303
+ // PropertyName
1304
+ // PrivateIdentifier
1305
+ parseClassElementName(): ParseNode.ClassElementName {
1306
+ if (this.test(Token.PRIVATE_IDENTIFIER)) {
1307
+ return this.parsePrivateIdentifier();
1308
+ }
1309
+ return this.parsePropertyName();
1310
+ }
1311
+
1312
+ // PropertyDefinition :
1313
+ // IdentifierReference
1314
+ // CoverInitializedName
1315
+ // PropertyName `:` AssignmentExpression
1316
+ // MethodDefinition
1317
+ // `...` AssignmentExpression
1318
+ // MethodDefinition :
1319
+ // ClassElementName `(` UniqueFormalParameters `)` `{` FunctionBody `}`
1320
+ // GeneratorMethod
1321
+ // AsyncMethod
1322
+ // AsyncGeneratorMethod
1323
+ // `get` ClassElementName `(` `)` `{` FunctionBody `}`
1324
+ // `set` ClassElementName `(` PropertySetParameterList `)` `{` FunctionBody `}`
1325
+ // GeneratorMethod :
1326
+ // `*` ClassElementName `(` UniqueFormalParameters `)` `{` GeneratorBody `}`
1327
+ // AsyncMethod :
1328
+ // `async` [no LineTerminator here] ClassElementName `(` UniqueFormalParameters `)` `{` AsyncBody `}`
1329
+ // AsyncGeneratorMethod :
1330
+ // `async` [no LineTerminator here] `*` ClassElementName `(` UniqueFormalParameters `)` `{` AsyncGeneratorBody `}`
1331
+ parseBracketedDefinition(type: 'class element'): ParseNode.ClassElement;
1332
+
1333
+ parseBracketedDefinition(type: 'property'): ParseNode.PropertyDefinitionLike;
1334
+
1335
+ parseBracketedDefinition(type: 'property' | 'class element'): ParseNode.PropertyDefinitionLike | ParseNode.ClassElement;
1336
+
1337
+ parseBracketedDefinition(type: 'property' | 'class element'): ParseNode.PropertyDefinitionLike | ParseNode.ClassElement {
1338
+ const node = this.startNode<ParseNode.PropertyDefinitionLike | ParseNode.ClassElement>();
1339
+
1340
+ if (type === 'property' && this.eat(Token.ELLIPSIS)) {
1341
+ node.PropertyName = null;
1342
+ node.AssignmentExpression = this.parseAssignmentExpression();
1343
+ return this.finishNode(node, 'PropertyDefinition');
1344
+ }
1345
+
1346
+ let firstFirstName;
1347
+ if (type === 'class element') {
1348
+ if (this.test('static') && (
1349
+ this.testAhead(Token.ASSIGN)
1350
+ || this.testAhead(Token.SEMICOLON)
1351
+ || this.peekAhead().hadLineTerminatorBefore
1352
+ || isAutomaticSemicolon(this.peekAhead().type)
1353
+ )) {
1354
+ node.static = false;
1355
+ firstFirstName = this.parseIdentifierName();
1356
+ } else {
1357
+ node.static = this.eat('static');
1358
+ this.markNodeStart(node);
1359
+ }
1360
+ }
1361
+
1362
+ let isGenerator = this.eat(Token.MUL);
1363
+ let isGetter = false;
1364
+ let isSetter = false;
1365
+ let isAsync = false;
1366
+ if (!isGenerator) {
1367
+ if (this.test('get')) {
1368
+ isGetter = true;
1369
+ } else if (this.test('set')) {
1370
+ isSetter = true;
1371
+ } else if (this.test('async') && !this.peekAhead().hadLineTerminatorBefore) {
1372
+ isAsync = true;
1373
+ }
1374
+ }
1375
+
1376
+ const firstName = firstFirstName || (type === 'property'
1377
+ ? this.parsePropertyName()
1378
+ : this.parseClassElementName());
1379
+
1380
+ if (!isGenerator && isAsync) {
1381
+ isGenerator = this.eat(Token.MUL);
1382
+ }
1383
+
1384
+ const isSpecialMethod = isGenerator || ((isSetter || isGetter || isAsync) && !this.test(Token.LPAREN));
1385
+
1386
+ if (!isGenerator) {
1387
+ if (type === 'property' && this.eat(Token.COLON)) {
1388
+ node.PropertyName = firstName as ParseNode.PropertyName; // NOTE: unsound cast
1389
+ node.AssignmentExpression = this.parseAssignmentExpression();
1390
+ return this.finishNode(node, 'PropertyDefinition');
1391
+ }
1392
+
1393
+ if (type === 'class element' && (
1394
+ this.test(Token.ASSIGN)
1395
+ || this.test(Token.SEMICOLON)
1396
+ || this.peek().hadLineTerminatorBefore
1397
+ || isAutomaticSemicolon(this.peek().type)
1398
+ )) {
1399
+ node.ClassElementName = firstName;
1400
+ node.Initializer = this.scope.with({ superProperty: true }, () => this.parseInitializerOpt());
1401
+ const argumentNode = node.Initializer && ContainsArguments(node.Initializer);
1402
+ if (argumentNode) {
1403
+ this.raiseEarly('UnexpectedToken', argumentNode);
1404
+ }
1405
+ const finished = this.finishNode(node, 'FieldDefinition');
1406
+ this.semicolon();
1407
+ return finished;
1408
+ }
1409
+
1410
+ if (type === 'property' && this.scope.assignmentInfoStack.length > 0 && this.test(Token.ASSIGN)) {
1411
+ // NOTE: The next line is unsafe because firstName could be something other than IdentifierName
1412
+ node.IdentifierReference = this.repurpose(firstName, 'IdentifierReference');
1413
+ node.Initializer = this.parseInitializerOpt();
1414
+ const finished = this.finishNode(node, 'CoverInitializedName');
1415
+ this.scope.registerObjectLiteralEarlyError(this.raiseEarly('UnexpectedToken', finished));
1416
+ return finished;
1417
+ }
1418
+
1419
+ if (type === 'property'
1420
+ && !isSpecialMethod
1421
+ && firstName.type === 'IdentifierName'
1422
+ && !this.test(Token.LPAREN)
1423
+ && (!isKeywordRaw(firstName.name)
1424
+ || (firstName.name === 'yield' && !this.scope.hasYield())
1425
+ || (firstName.name === 'await' && !this.scope.hasAwait()))) {
1426
+ const IdentifierReference = this.repurpose(firstName, 'IdentifierReference');
1427
+ this.validateIdentifierReference(firstName.name, firstName);
1428
+ return IdentifierReference;
1429
+ }
1430
+ }
1431
+
1432
+ if (isSpecialMethod && (!isGenerator || isAsync)) {
1433
+ if (type === 'property') {
1434
+ node.ClassElementName = this.parsePropertyName();
1435
+ } else {
1436
+ node.ClassElementName = this.parseClassElementName();
1437
+ }
1438
+ } else {
1439
+ node.ClassElementName = firstName;
1440
+ }
1441
+
1442
+ this.scope.with({
1443
+ lexical: true,
1444
+ variable: true,
1445
+ superProperty: true,
1446
+ await: isAsync,
1447
+ yield: isGenerator,
1448
+ classStaticBlock: false,
1449
+ }, () => {
1450
+ if (isSpecialMethod && isGetter) {
1451
+ this.expect(Token.LPAREN);
1452
+ this.expect(Token.RPAREN);
1453
+ node.PropertySetParameterList = null;
1454
+ node.UniqueFormalParameters = null;
1455
+ } else if (isSpecialMethod && isSetter) {
1456
+ this.expect(Token.LPAREN);
1457
+ node.PropertySetParameterList = [this.parseFormalParameter()];
1458
+ this.expect(Token.RPAREN);
1459
+ node.UniqueFormalParameters = null;
1460
+ } else {
1461
+ node.PropertySetParameterList = null;
1462
+ node.UniqueFormalParameters = this.parseUniqueFormalParameters();
1463
+ }
1464
+
1465
+ this.scope.with({
1466
+ superCall: !isSpecialMethod
1467
+ && !node.static
1468
+ && node.ClassElementName
1469
+ && ((node.ClassElementName.type === 'IdentifierName' && node.ClassElementName.name === 'constructor')
1470
+ || (node.ClassElementName.type === 'StringLiteral' && node.ClassElementName.value === 'constructor'))
1471
+ && this.scope.hasSuperCall(),
1472
+ }, () => {
1473
+ const body = this.parseFunctionBody(isAsync, isGenerator, false);
1474
+ // Unsafe cast below
1475
+ if (!isAsync && !isGenerator) {
1476
+ (node as ParseNode.Unfinished<ParseNode.MethodDefinition>).FunctionBody = body as ParseNode.FunctionBody;
1477
+ } else if (isAsync && !isGenerator) {
1478
+ (node as ParseNode.Unfinished<ParseNode.AsyncMethod>).AsyncBody = body as ParseNode.AsyncBody;
1479
+ } else if (!isAsync && isGenerator) {
1480
+ (node as ParseNode.Unfinished<ParseNode.GeneratorMethod>).GeneratorBody = body as ParseNode.GeneratorBody;
1481
+ } else if (isAsync && isGenerator) {
1482
+ (node as ParseNode.Unfinished<ParseNode.AsyncGeneratorMethod>).AsyncGeneratorBody = body as ParseNode.AsyncGeneratorBody;
1483
+ }
1484
+ if (node.UniqueFormalParameters || node.PropertySetParameterList) {
1485
+ this.validateFormalParameters(node.UniqueFormalParameters || node.PropertySetParameterList!, body, true);
1486
+ }
1487
+ });
1488
+ });
1489
+
1490
+ let name: ParseNode.MethodDefinitionLike['type'];
1491
+ if (isAsync) {
1492
+ name = isGenerator ? 'AsyncGeneratorMethod' : 'AsyncMethod';
1493
+ } else {
1494
+ name = isGenerator ? 'GeneratorMethod' : 'MethodDefinition';
1495
+ }
1496
+ return this.finishNode(node, name);
1497
+ }
1498
+ }