@engine262/engine262 0.0.1-0574c6b92a2925de851f895445b7cfd7e97cc0ba

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 (993) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +149 -0
  3. package/bin/engine262.js +5 -0
  4. package/declaration/abstract-ops/all.d.mts +36 -0
  5. package/declaration/abstract-ops/all.d.mts.map +1 -0
  6. package/declaration/abstract-ops/arguments-operations.d.mts +14 -0
  7. package/declaration/abstract-ops/arguments-operations.d.mts.map +1 -0
  8. package/declaration/abstract-ops/array-objects.d.mts +15 -0
  9. package/declaration/abstract-ops/array-objects.d.mts.map +1 -0
  10. package/declaration/abstract-ops/arraybuffer-objects.d.mts +41 -0
  11. package/declaration/abstract-ops/arraybuffer-objects.d.mts.map +1 -0
  12. package/declaration/abstract-ops/async-function-operations.d.mts +7 -0
  13. package/declaration/abstract-ops/async-function-operations.d.mts.map +1 -0
  14. package/declaration/abstract-ops/async-generator-objects.d.mts +39 -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 +8 -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 +96 -0
  27. package/declaration/abstract-ops/function-operations.d.mts.map +1 -0
  28. package/declaration/abstract-ops/generator-operations.d.mts +39 -0
  29. package/declaration/abstract-ops/generator-operations.d.mts.map +1 -0
  30. package/declaration/abstract-ops/global-object.d.mts +12 -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 +54 -0
  37. package/declaration/abstract-ops/iterator-operations.d.mts.map +1 -0
  38. package/declaration/abstract-ops/keyed-collections.d.mts +4 -0
  39. package/declaration/abstract-ops/keyed-collections.d.mts.map +1 -0
  40. package/declaration/abstract-ops/module-namespace-exotic-objects.d.mts +16 -0
  41. package/declaration/abstract-ops/module-namespace-exotic-objects.d.mts.map +1 -0
  42. package/declaration/abstract-ops/module-records.d.mts +38 -0
  43. package/declaration/abstract-ops/module-records.d.mts.map +1 -0
  44. package/declaration/abstract-ops/notational-conventions.d.mts +14 -0
  45. package/declaration/abstract-ops/notational-conventions.d.mts.map +1 -0
  46. package/declaration/abstract-ops/object-operations.d.mts +91 -0
  47. package/declaration/abstract-ops/object-operations.d.mts.map +1 -0
  48. package/declaration/abstract-ops/objects.d.mts +31 -0
  49. package/declaration/abstract-ops/objects.d.mts.map +1 -0
  50. package/declaration/abstract-ops/private-names.d.mts +36 -0
  51. package/declaration/abstract-ops/private-names.d.mts.map +1 -0
  52. package/declaration/abstract-ops/promise-operations.d.mts +63 -0
  53. package/declaration/abstract-ops/promise-operations.d.mts.map +1 -0
  54. package/declaration/abstract-ops/proxy-objects.d.mts +6 -0
  55. package/declaration/abstract-ops/proxy-objects.d.mts.map +1 -0
  56. package/declaration/abstract-ops/realms.d.mts +173 -0
  57. package/declaration/abstract-ops/realms.d.mts.map +1 -0
  58. package/declaration/abstract-ops/reference-operations.d.mts +30 -0
  59. package/declaration/abstract-ops/reference-operations.d.mts.map +1 -0
  60. package/declaration/abstract-ops/regexp-objects.d.mts +40 -0
  61. package/declaration/abstract-ops/regexp-objects.d.mts.map +1 -0
  62. package/declaration/abstract-ops/shared-arraybuffer.d.mts +4 -0
  63. package/declaration/abstract-ops/shared-arraybuffer.d.mts.map +1 -0
  64. package/declaration/abstract-ops/spec-types.d.mts +34 -0
  65. package/declaration/abstract-ops/spec-types.d.mts.map +1 -0
  66. package/declaration/abstract-ops/string-objects.d.mts +8 -0
  67. package/declaration/abstract-ops/string-objects.d.mts.map +1 -0
  68. package/declaration/abstract-ops/symbol-objects.d.mts +6 -0
  69. package/declaration/abstract-ops/symbol-objects.d.mts.map +1 -0
  70. package/declaration/abstract-ops/testing-comparison.d.mts +47 -0
  71. package/declaration/abstract-ops/testing-comparison.d.mts.map +1 -0
  72. package/declaration/abstract-ops/type-conversion.d.mts +56 -0
  73. package/declaration/abstract-ops/type-conversion.d.mts.map +1 -0
  74. package/declaration/abstract-ops/typedarray-objects.d.mts +33 -0
  75. package/declaration/abstract-ops/typedarray-objects.d.mts.map +1 -0
  76. package/declaration/abstract-ops/weak-operations.d.mts +12 -0
  77. package/declaration/abstract-ops/weak-operations.d.mts.map +1 -0
  78. package/declaration/api.d.mts +71 -0
  79. package/declaration/api.d.mts.map +1 -0
  80. package/declaration/completion.d.mts +165 -0
  81. package/declaration/completion.d.mts.map +1 -0
  82. package/declaration/environment.d.mts +201 -0
  83. package/declaration/environment.d.mts.map +1 -0
  84. package/declaration/evaluator.d.mts +42 -0
  85. package/declaration/evaluator.d.mts.map +1 -0
  86. package/declaration/helpers.d.mts +103 -0
  87. package/declaration/helpers.d.mts.map +1 -0
  88. package/declaration/host-defined/debugger-eval.d.mts +3 -0
  89. package/declaration/host-defined/debugger-eval.d.mts.map +1 -0
  90. package/declaration/host-defined/debugger-util.d.mts +2 -0
  91. package/declaration/host-defined/debugger-util.d.mts.map +1 -0
  92. package/declaration/host-defined/engine.d.mts +178 -0
  93. package/declaration/host-defined/engine.d.mts.map +1 -0
  94. package/declaration/host-defined/inspect.d.mts +4 -0
  95. package/declaration/host-defined/inspect.d.mts.map +1 -0
  96. package/declaration/host-defined/test262-intrinsics.d.mts +8 -0
  97. package/declaration/host-defined/test262-intrinsics.d.mts.map +1 -0
  98. package/declaration/index.d.mts +32 -0
  99. package/declaration/index.d.mts.map +1 -0
  100. package/declaration/intrinsics/AggregateError.d.mts +3 -0
  101. package/declaration/intrinsics/AggregateError.d.mts.map +1 -0
  102. package/declaration/intrinsics/AggregateErrorPrototype.d.mts +3 -0
  103. package/declaration/intrinsics/AggregateErrorPrototype.d.mts.map +1 -0
  104. package/declaration/intrinsics/Array.d.mts +3 -0
  105. package/declaration/intrinsics/Array.d.mts.map +1 -0
  106. package/declaration/intrinsics/ArrayBuffer.d.mts +3 -0
  107. package/declaration/intrinsics/ArrayBuffer.d.mts.map +1 -0
  108. package/declaration/intrinsics/ArrayBufferPrototype.d.mts +3 -0
  109. package/declaration/intrinsics/ArrayBufferPrototype.d.mts.map +1 -0
  110. package/declaration/intrinsics/ArrayIteratorPrototype.d.mts +3 -0
  111. package/declaration/intrinsics/ArrayIteratorPrototype.d.mts.map +1 -0
  112. package/declaration/intrinsics/ArrayPrototype.d.mts +3 -0
  113. package/declaration/intrinsics/ArrayPrototype.d.mts.map +1 -0
  114. package/declaration/intrinsics/ArrayPrototypeShared.d.mts +11 -0
  115. package/declaration/intrinsics/ArrayPrototypeShared.d.mts.map +1 -0
  116. package/declaration/intrinsics/AsyncFromSyncIteratorPrototype.d.mts +6 -0
  117. package/declaration/intrinsics/AsyncFromSyncIteratorPrototype.d.mts.map +1 -0
  118. package/declaration/intrinsics/AsyncFunction.d.mts +3 -0
  119. package/declaration/intrinsics/AsyncFunction.d.mts.map +1 -0
  120. package/declaration/intrinsics/AsyncFunctionPrototype.d.mts +3 -0
  121. package/declaration/intrinsics/AsyncFunctionPrototype.d.mts.map +1 -0
  122. package/declaration/intrinsics/AsyncGeneratorFunction.d.mts +3 -0
  123. package/declaration/intrinsics/AsyncGeneratorFunction.d.mts.map +1 -0
  124. package/declaration/intrinsics/AsyncGeneratorFunctionPrototype.d.mts +3 -0
  125. package/declaration/intrinsics/AsyncGeneratorFunctionPrototype.d.mts.map +1 -0
  126. package/declaration/intrinsics/AsyncGeneratorFunctionPrototypePrototype.d.mts +3 -0
  127. package/declaration/intrinsics/AsyncGeneratorFunctionPrototypePrototype.d.mts.map +1 -0
  128. package/declaration/intrinsics/AsyncIteratorPrototype.d.mts +3 -0
  129. package/declaration/intrinsics/AsyncIteratorPrototype.d.mts.map +1 -0
  130. package/declaration/intrinsics/BigInt.d.mts +8 -0
  131. package/declaration/intrinsics/BigInt.d.mts.map +1 -0
  132. package/declaration/intrinsics/BigIntPrototype.d.mts +3 -0
  133. package/declaration/intrinsics/BigIntPrototype.d.mts.map +1 -0
  134. package/declaration/intrinsics/Boolean.d.mts +8 -0
  135. package/declaration/intrinsics/Boolean.d.mts.map +1 -0
  136. package/declaration/intrinsics/BooleanPrototype.d.mts +3 -0
  137. package/declaration/intrinsics/BooleanPrototype.d.mts.map +1 -0
  138. package/declaration/intrinsics/DataView.d.mts +11 -0
  139. package/declaration/intrinsics/DataView.d.mts.map +1 -0
  140. package/declaration/intrinsics/DataViewPrototype.d.mts +3 -0
  141. package/declaration/intrinsics/DataViewPrototype.d.mts.map +1 -0
  142. package/declaration/intrinsics/Date.d.mts +8 -0
  143. package/declaration/intrinsics/Date.d.mts.map +1 -0
  144. package/declaration/intrinsics/DatePrototype.d.mts +12 -0
  145. package/declaration/intrinsics/DatePrototype.d.mts.map +1 -0
  146. package/declaration/intrinsics/Error.d.mts +10 -0
  147. package/declaration/intrinsics/Error.d.mts.map +1 -0
  148. package/declaration/intrinsics/ErrorPrototype.d.mts +3 -0
  149. package/declaration/intrinsics/ErrorPrototype.d.mts.map +1 -0
  150. package/declaration/intrinsics/FinalizationRegistry.d.mts +16 -0
  151. package/declaration/intrinsics/FinalizationRegistry.d.mts.map +1 -0
  152. package/declaration/intrinsics/FinalizationRegistryPrototype.d.mts +3 -0
  153. package/declaration/intrinsics/FinalizationRegistryPrototype.d.mts.map +1 -0
  154. package/declaration/intrinsics/ForInIteratorPrototype.d.mts +13 -0
  155. package/declaration/intrinsics/ForInIteratorPrototype.d.mts.map +1 -0
  156. package/declaration/intrinsics/Function.d.mts +3 -0
  157. package/declaration/intrinsics/Function.d.mts.map +1 -0
  158. package/declaration/intrinsics/FunctionPrototype.d.mts +13 -0
  159. package/declaration/intrinsics/FunctionPrototype.d.mts.map +1 -0
  160. package/declaration/intrinsics/GeneratorFunction.d.mts +3 -0
  161. package/declaration/intrinsics/GeneratorFunction.d.mts.map +1 -0
  162. package/declaration/intrinsics/GeneratorFunctionPrototype.d.mts +3 -0
  163. package/declaration/intrinsics/GeneratorFunctionPrototype.d.mts.map +1 -0
  164. package/declaration/intrinsics/GeneratorFunctionPrototypePrototype.d.mts +3 -0
  165. package/declaration/intrinsics/GeneratorFunctionPrototypePrototype.d.mts.map +1 -0
  166. package/declaration/intrinsics/Iterator.d.mts +3 -0
  167. package/declaration/intrinsics/Iterator.d.mts.map +1 -0
  168. package/declaration/intrinsics/IteratorHelperPrototype.d.mts +3 -0
  169. package/declaration/intrinsics/IteratorHelperPrototype.d.mts.map +1 -0
  170. package/declaration/intrinsics/IteratorPrototype.d.mts +3 -0
  171. package/declaration/intrinsics/IteratorPrototype.d.mts.map +1 -0
  172. package/declaration/intrinsics/JSON.d.mts +9 -0
  173. package/declaration/intrinsics/JSON.d.mts.map +1 -0
  174. package/declaration/intrinsics/Map.d.mts +13 -0
  175. package/declaration/intrinsics/Map.d.mts.map +1 -0
  176. package/declaration/intrinsics/MapIteratorPrototype.d.mts +7 -0
  177. package/declaration/intrinsics/MapIteratorPrototype.d.mts.map +1 -0
  178. package/declaration/intrinsics/MapPrototype.d.mts +3 -0
  179. package/declaration/intrinsics/MapPrototype.d.mts.map +1 -0
  180. package/declaration/intrinsics/Math.d.mts +4 -0
  181. package/declaration/intrinsics/Math.d.mts.map +1 -0
  182. package/declaration/intrinsics/NativeError.d.mts +6 -0
  183. package/declaration/intrinsics/NativeError.d.mts.map +1 -0
  184. package/declaration/intrinsics/Number.d.mts +7 -0
  185. package/declaration/intrinsics/Number.d.mts.map +1 -0
  186. package/declaration/intrinsics/NumberPrototype.d.mts +3 -0
  187. package/declaration/intrinsics/NumberPrototype.d.mts.map +1 -0
  188. package/declaration/intrinsics/Object.d.mts +3 -0
  189. package/declaration/intrinsics/Object.d.mts.map +1 -0
  190. package/declaration/intrinsics/ObjectPrototype.d.mts +5 -0
  191. package/declaration/intrinsics/ObjectPrototype.d.mts.map +1 -0
  192. package/declaration/intrinsics/Promise.d.mts +16 -0
  193. package/declaration/intrinsics/Promise.d.mts.map +1 -0
  194. package/declaration/intrinsics/PromisePrototype.d.mts +3 -0
  195. package/declaration/intrinsics/PromisePrototype.d.mts.map +1 -0
  196. package/declaration/intrinsics/Proxy.d.mts +12 -0
  197. package/declaration/intrinsics/Proxy.d.mts.map +1 -0
  198. package/declaration/intrinsics/Reflect.d.mts +3 -0
  199. package/declaration/intrinsics/Reflect.d.mts.map +1 -0
  200. package/declaration/intrinsics/RegExp.d.mts +14 -0
  201. package/declaration/intrinsics/RegExp.d.mts.map +1 -0
  202. package/declaration/intrinsics/RegExpPrototype.d.mts +18 -0
  203. package/declaration/intrinsics/RegExpPrototype.d.mts.map +1 -0
  204. package/declaration/intrinsics/RegExpStringIteratorPrototype.d.mts +7 -0
  205. package/declaration/intrinsics/RegExpStringIteratorPrototype.d.mts.map +1 -0
  206. package/declaration/intrinsics/Set.d.mts +8 -0
  207. package/declaration/intrinsics/Set.d.mts.map +1 -0
  208. package/declaration/intrinsics/SetIteratorPrototype.d.mts +7 -0
  209. package/declaration/intrinsics/SetIteratorPrototype.d.mts.map +1 -0
  210. package/declaration/intrinsics/SetPrototype.d.mts +3 -0
  211. package/declaration/intrinsics/SetPrototype.d.mts.map +1 -0
  212. package/declaration/intrinsics/String.d.mts +9 -0
  213. package/declaration/intrinsics/String.d.mts.map +1 -0
  214. package/declaration/intrinsics/StringIteratorPrototype.d.mts +3 -0
  215. package/declaration/intrinsics/StringIteratorPrototype.d.mts.map +1 -0
  216. package/declaration/intrinsics/StringPrototype.d.mts +3 -0
  217. package/declaration/intrinsics/StringPrototype.d.mts.map +1 -0
  218. package/declaration/intrinsics/Symbol.d.mts +12 -0
  219. package/declaration/intrinsics/Symbol.d.mts.map +1 -0
  220. package/declaration/intrinsics/SymbolPrototype.d.mts +3 -0
  221. package/declaration/intrinsics/SymbolPrototype.d.mts.map +1 -0
  222. package/declaration/intrinsics/ThrowTypeError.d.mts +3 -0
  223. package/declaration/intrinsics/ThrowTypeError.d.mts.map +1 -0
  224. package/declaration/intrinsics/TypedArray.d.mts +182 -0
  225. package/declaration/intrinsics/TypedArray.d.mts.map +1 -0
  226. package/declaration/intrinsics/TypedArrayConstructors.d.mts +3 -0
  227. package/declaration/intrinsics/TypedArrayConstructors.d.mts.map +1 -0
  228. package/declaration/intrinsics/TypedArrayPrototype.d.mts +3 -0
  229. package/declaration/intrinsics/TypedArrayPrototype.d.mts.map +1 -0
  230. package/declaration/intrinsics/TypedArrayPrototypes.d.mts +4 -0
  231. package/declaration/intrinsics/TypedArrayPrototypes.d.mts.map +1 -0
  232. package/declaration/intrinsics/TypedArray_Uint8Array.d.mts +3 -0
  233. package/declaration/intrinsics/TypedArray_Uint8Array.d.mts.map +1 -0
  234. package/declaration/intrinsics/URIHandling.d.mts +3 -0
  235. package/declaration/intrinsics/URIHandling.d.mts.map +1 -0
  236. package/declaration/intrinsics/WeakMap.d.mts +11 -0
  237. package/declaration/intrinsics/WeakMap.d.mts.map +1 -0
  238. package/declaration/intrinsics/WeakMapPrototype.d.mts +3 -0
  239. package/declaration/intrinsics/WeakMapPrototype.d.mts.map +1 -0
  240. package/declaration/intrinsics/WeakRef.d.mts +8 -0
  241. package/declaration/intrinsics/WeakRef.d.mts.map +1 -0
  242. package/declaration/intrinsics/WeakRefPrototype.d.mts +3 -0
  243. package/declaration/intrinsics/WeakRefPrototype.d.mts.map +1 -0
  244. package/declaration/intrinsics/WeakSet.d.mts +8 -0
  245. package/declaration/intrinsics/WeakSet.d.mts.map +1 -0
  246. package/declaration/intrinsics/WeakSetPrototype.d.mts +3 -0
  247. package/declaration/intrinsics/WeakSetPrototype.d.mts.map +1 -0
  248. package/declaration/intrinsics/WrapForValidIteratorPrototype.d.mts +3 -0
  249. package/declaration/intrinsics/WrapForValidIteratorPrototype.d.mts.map +1 -0
  250. package/declaration/intrinsics/bootstrap.d.mts +18 -0
  251. package/declaration/intrinsics/bootstrap.d.mts.map +1 -0
  252. package/declaration/intrinsics/eval.d.mts +3 -0
  253. package/declaration/intrinsics/eval.d.mts.map +1 -0
  254. package/declaration/intrinsics/isFinite.d.mts +3 -0
  255. package/declaration/intrinsics/isFinite.d.mts.map +1 -0
  256. package/declaration/intrinsics/isNaN.d.mts +3 -0
  257. package/declaration/intrinsics/isNaN.d.mts.map +1 -0
  258. package/declaration/intrinsics/parseFloat.d.mts +3 -0
  259. package/declaration/intrinsics/parseFloat.d.mts.map +1 -0
  260. package/declaration/intrinsics/parseInt.d.mts +3 -0
  261. package/declaration/intrinsics/parseInt.d.mts.map +1 -0
  262. package/declaration/messages.d.mts +183 -0
  263. package/declaration/messages.d.mts.map +1 -0
  264. package/declaration/modules.d.mts +125 -0
  265. package/declaration/modules.d.mts.map +1 -0
  266. package/declaration/parse.d.mts +35 -0
  267. package/declaration/parse.d.mts.map +1 -0
  268. package/declaration/parser/BaseParser.d.mts +24 -0
  269. package/declaration/parser/BaseParser.d.mts.map +1 -0
  270. package/declaration/parser/ExpressionParser.d.mts +54 -0
  271. package/declaration/parser/ExpressionParser.d.mts.map +1 -0
  272. package/declaration/parser/FunctionParser.d.mts +43 -0
  273. package/declaration/parser/FunctionParser.d.mts.map +1 -0
  274. package/declaration/parser/IdentifierParser.d.mts +12 -0
  275. package/declaration/parser/IdentifierParser.d.mts.map +1 -0
  276. package/declaration/parser/LanguageParser.d.mts +10 -0
  277. package/declaration/parser/LanguageParser.d.mts.map +1 -0
  278. package/declaration/parser/Lexer.d.mts +69 -0
  279. package/declaration/parser/Lexer.d.mts.map +1 -0
  280. package/declaration/parser/ModuleParser.d.mts +18 -0
  281. package/declaration/parser/ModuleParser.d.mts.map +1 -0
  282. package/declaration/parser/ParseNode.d.mts +1178 -0
  283. package/declaration/parser/ParseNode.d.mts.map +1 -0
  284. package/declaration/parser/Parser.d.mts +35 -0
  285. package/declaration/parser/Parser.d.mts.map +1 -0
  286. package/declaration/parser/RegExpParser.d.mts +65 -0
  287. package/declaration/parser/RegExpParser.d.mts.map +1 -0
  288. package/declaration/parser/Scope.d.mts +106 -0
  289. package/declaration/parser/Scope.d.mts.map +1 -0
  290. package/declaration/parser/StatementParser.d.mts +49 -0
  291. package/declaration/parser/StatementParser.d.mts.map +1 -0
  292. package/declaration/parser/tokens.d.mts +32 -0
  293. package/declaration/parser/tokens.d.mts.map +1 -0
  294. package/declaration/parser/utils.d.mts +10 -0
  295. package/declaration/parser/utils.d.mts.map +1 -0
  296. package/declaration/runtime-semantics/AdditiveExpression.d.mts +3 -0
  297. package/declaration/runtime-semantics/AdditiveExpression.d.mts.map +1 -0
  298. package/declaration/runtime-semantics/ApplyStringOrNumericBinaryOperator.d.mts +11 -0
  299. package/declaration/runtime-semantics/ApplyStringOrNumericBinaryOperator.d.mts.map +1 -0
  300. package/declaration/runtime-semantics/ArgumentListEvaluation.d.mts +5 -0
  301. package/declaration/runtime-semantics/ArgumentListEvaluation.d.mts.map +1 -0
  302. package/declaration/runtime-semantics/ArrayLiteral.d.mts +5 -0
  303. package/declaration/runtime-semantics/ArrayLiteral.d.mts.map +1 -0
  304. package/declaration/runtime-semantics/ArrowFunction.d.mts +4 -0
  305. package/declaration/runtime-semantics/ArrowFunction.d.mts.map +1 -0
  306. package/declaration/runtime-semantics/AssignmentExpression.d.mts +8 -0
  307. package/declaration/runtime-semantics/AssignmentExpression.d.mts.map +1 -0
  308. package/declaration/runtime-semantics/AsyncArrowFunction.d.mts +4 -0
  309. package/declaration/runtime-semantics/AsyncArrowFunction.d.mts.map +1 -0
  310. package/declaration/runtime-semantics/AsyncFunctionExpression.d.mts +4 -0
  311. package/declaration/runtime-semantics/AsyncFunctionExpression.d.mts.map +1 -0
  312. package/declaration/runtime-semantics/AsyncGeneratorExpression.d.mts +4 -0
  313. package/declaration/runtime-semantics/AsyncGeneratorExpression.d.mts.map +1 -0
  314. package/declaration/runtime-semantics/AwaitExpression.d.mts +5 -0
  315. package/declaration/runtime-semantics/AwaitExpression.d.mts.map +1 -0
  316. package/declaration/runtime-semantics/BindingInitialization.d.mts +8 -0
  317. package/declaration/runtime-semantics/BindingInitialization.d.mts.map +1 -0
  318. package/declaration/runtime-semantics/BitwiseOperators.d.mts +5 -0
  319. package/declaration/runtime-semantics/BitwiseOperators.d.mts.map +1 -0
  320. package/declaration/runtime-semantics/Block.d.mts +8 -0
  321. package/declaration/runtime-semantics/Block.d.mts.map +1 -0
  322. package/declaration/runtime-semantics/BreakStatement.d.mts +4 -0
  323. package/declaration/runtime-semantics/BreakStatement.d.mts.map +1 -0
  324. package/declaration/runtime-semantics/BreakableStatement.d.mts +4 -0
  325. package/declaration/runtime-semantics/BreakableStatement.d.mts.map +1 -0
  326. package/declaration/runtime-semantics/CallExpression.d.mts +5 -0
  327. package/declaration/runtime-semantics/CallExpression.d.mts.map +1 -0
  328. package/declaration/runtime-semantics/ClassDeclaration.d.mts +7 -0
  329. package/declaration/runtime-semantics/ClassDeclaration.d.mts.map +1 -0
  330. package/declaration/runtime-semantics/ClassDefinitionEvaluation.d.mts +18 -0
  331. package/declaration/runtime-semantics/ClassDefinitionEvaluation.d.mts.map +1 -0
  332. package/declaration/runtime-semantics/ClassExpression.d.mts +5 -0
  333. package/declaration/runtime-semantics/ClassExpression.d.mts.map +1 -0
  334. package/declaration/runtime-semantics/ClassFieldDefinitionEvaluation.d.mts +10 -0
  335. package/declaration/runtime-semantics/ClassFieldDefinitionEvaluation.d.mts.map +1 -0
  336. package/declaration/runtime-semantics/ClassStaticBlockDefinitionEvaluation.d.mts +10 -0
  337. package/declaration/runtime-semantics/ClassStaticBlockDefinitionEvaluation.d.mts.map +1 -0
  338. package/declaration/runtime-semantics/CoalesceExpression.d.mts +5 -0
  339. package/declaration/runtime-semantics/CoalesceExpression.d.mts.map +1 -0
  340. package/declaration/runtime-semantics/CommaOperator.d.mts +5 -0
  341. package/declaration/runtime-semantics/CommaOperator.d.mts.map +1 -0
  342. package/declaration/runtime-semantics/ConditionalExpression.d.mts +5 -0
  343. package/declaration/runtime-semantics/ConditionalExpression.d.mts.map +1 -0
  344. package/declaration/runtime-semantics/ContinueStatement.d.mts +4 -0
  345. package/declaration/runtime-semantics/ContinueStatement.d.mts.map +1 -0
  346. package/declaration/runtime-semantics/CreateDynamicFunction.d.mts +10 -0
  347. package/declaration/runtime-semantics/CreateDynamicFunction.d.mts.map +1 -0
  348. package/declaration/runtime-semantics/DebuggerStatement.d.mts +5 -0
  349. package/declaration/runtime-semantics/DebuggerStatement.d.mts.map +1 -0
  350. package/declaration/runtime-semantics/DefineMethod.d.mts +10 -0
  351. package/declaration/runtime-semantics/DefineMethod.d.mts.map +1 -0
  352. package/declaration/runtime-semantics/DestructuringAssignmentEvaluation.d.mts +5 -0
  353. package/declaration/runtime-semantics/DestructuringAssignmentEvaluation.d.mts.map +1 -0
  354. package/declaration/runtime-semantics/EmptyStatement.d.mts +5 -0
  355. package/declaration/runtime-semantics/EmptyStatement.d.mts.map +1 -0
  356. package/declaration/runtime-semantics/EqualityExpression.d.mts +4 -0
  357. package/declaration/runtime-semantics/EqualityExpression.d.mts.map +1 -0
  358. package/declaration/runtime-semantics/EvaluateBody.d.mts +37 -0
  359. package/declaration/runtime-semantics/EvaluateBody.d.mts.map +1 -0
  360. package/declaration/runtime-semantics/EvaluateCall.d.mts +5 -0
  361. package/declaration/runtime-semantics/EvaluateCall.d.mts.map +1 -0
  362. package/declaration/runtime-semantics/EvaluatePropertyAccess.d.mts +9 -0
  363. package/declaration/runtime-semantics/EvaluatePropertyAccess.d.mts.map +1 -0
  364. package/declaration/runtime-semantics/EvaluateStringOrNumericBinaryExpression.d.mts +6 -0
  365. package/declaration/runtime-semantics/EvaluateStringOrNumericBinaryExpression.d.mts.map +1 -0
  366. package/declaration/runtime-semantics/ExponentiationExpression.d.mts +5 -0
  367. package/declaration/runtime-semantics/ExponentiationExpression.d.mts.map +1 -0
  368. package/declaration/runtime-semantics/ExportDeclaration.d.mts +17 -0
  369. package/declaration/runtime-semantics/ExportDeclaration.d.mts.map +1 -0
  370. package/declaration/runtime-semantics/ExpressionStatement.d.mts +5 -0
  371. package/declaration/runtime-semantics/ExpressionStatement.d.mts.map +1 -0
  372. package/declaration/runtime-semantics/FunctionDeclaration.d.mts +5 -0
  373. package/declaration/runtime-semantics/FunctionDeclaration.d.mts.map +1 -0
  374. package/declaration/runtime-semantics/FunctionDeclarationInstantiation.d.mts +6 -0
  375. package/declaration/runtime-semantics/FunctionDeclarationInstantiation.d.mts.map +1 -0
  376. package/declaration/runtime-semantics/FunctionExpression.d.mts +4 -0
  377. package/declaration/runtime-semantics/FunctionExpression.d.mts.map +1 -0
  378. package/declaration/runtime-semantics/FunctionStatementList.d.mts +4 -0
  379. package/declaration/runtime-semantics/FunctionStatementList.d.mts.map +1 -0
  380. package/declaration/runtime-semantics/GeneratorExpression.d.mts +4 -0
  381. package/declaration/runtime-semantics/GeneratorExpression.d.mts.map +1 -0
  382. package/declaration/runtime-semantics/GetSubstitution.d.mts +5 -0
  383. package/declaration/runtime-semantics/GetSubstitution.d.mts.map +1 -0
  384. package/declaration/runtime-semantics/GlobalDeclarationInstantiation.d.mts +12 -0
  385. package/declaration/runtime-semantics/GlobalDeclarationInstantiation.d.mts.map +1 -0
  386. package/declaration/runtime-semantics/HoistableDeclaration.d.mts +5 -0
  387. package/declaration/runtime-semantics/HoistableDeclaration.d.mts.map +1 -0
  388. package/declaration/runtime-semantics/IdentifierReference.d.mts +6 -0
  389. package/declaration/runtime-semantics/IdentifierReference.d.mts.map +1 -0
  390. package/declaration/runtime-semantics/IfStatement.d.mts +17 -0
  391. package/declaration/runtime-semantics/IfStatement.d.mts.map +1 -0
  392. package/declaration/runtime-semantics/ImportCall.d.mts +6 -0
  393. package/declaration/runtime-semantics/ImportCall.d.mts.map +1 -0
  394. package/declaration/runtime-semantics/ImportDeclaration.d.mts +5 -0
  395. package/declaration/runtime-semantics/ImportDeclaration.d.mts.map +1 -0
  396. package/declaration/runtime-semantics/ImportMeta.d.mts +5 -0
  397. package/declaration/runtime-semantics/ImportMeta.d.mts.map +1 -0
  398. package/declaration/runtime-semantics/InstantiateArrowFunctionExpression.d.mts +5 -0
  399. package/declaration/runtime-semantics/InstantiateArrowFunctionExpression.d.mts.map +1 -0
  400. package/declaration/runtime-semantics/InstantiateAsyncArrowFunctionExpression.d.mts +5 -0
  401. package/declaration/runtime-semantics/InstantiateAsyncArrowFunctionExpression.d.mts.map +1 -0
  402. package/declaration/runtime-semantics/InstantiateAsyncFunctionExpression.d.mts +5 -0
  403. package/declaration/runtime-semantics/InstantiateAsyncFunctionExpression.d.mts.map +1 -0
  404. package/declaration/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.d.mts +5 -0
  405. package/declaration/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.d.mts.map +1 -0
  406. package/declaration/runtime-semantics/InstantiateFunctionObject.d.mts +12 -0
  407. package/declaration/runtime-semantics/InstantiateFunctionObject.d.mts.map +1 -0
  408. package/declaration/runtime-semantics/InstantiateGeneratorFunctionExpression.d.mts +5 -0
  409. package/declaration/runtime-semantics/InstantiateGeneratorFunctionExpression.d.mts.map +1 -0
  410. package/declaration/runtime-semantics/InstantiateOrdinaryFunctionExpression.d.mts +5 -0
  411. package/declaration/runtime-semantics/InstantiateOrdinaryFunctionExpression.d.mts.map +1 -0
  412. package/declaration/runtime-semantics/IteratorBindingInitialization.d.mts +8 -0
  413. package/declaration/runtime-semantics/IteratorBindingInitialization.d.mts.map +1 -0
  414. package/declaration/runtime-semantics/KeyedBindingInitialization.d.mts +6 -0
  415. package/declaration/runtime-semantics/KeyedBindingInitialization.d.mts.map +1 -0
  416. package/declaration/runtime-semantics/LabelledEvaluation.d.mts +8 -0
  417. package/declaration/runtime-semantics/LabelledEvaluation.d.mts.map +1 -0
  418. package/declaration/runtime-semantics/LabelledStatement.d.mts +4 -0
  419. package/declaration/runtime-semantics/LabelledStatement.d.mts.map +1 -0
  420. package/declaration/runtime-semantics/LexicalDeclaration.d.mts +8 -0
  421. package/declaration/runtime-semantics/LexicalDeclaration.d.mts.map +1 -0
  422. package/declaration/runtime-semantics/Literal.d.mts +6 -0
  423. package/declaration/runtime-semantics/Literal.d.mts.map +1 -0
  424. package/declaration/runtime-semantics/LogicalANDExpression.d.mts +5 -0
  425. package/declaration/runtime-semantics/LogicalANDExpression.d.mts.map +1 -0
  426. package/declaration/runtime-semantics/LogicalORExpression.d.mts +5 -0
  427. package/declaration/runtime-semantics/LogicalORExpression.d.mts.map +1 -0
  428. package/declaration/runtime-semantics/MV.d.mts +3 -0
  429. package/declaration/runtime-semantics/MV.d.mts.map +1 -0
  430. package/declaration/runtime-semantics/MemberExpression.d.mts +5 -0
  431. package/declaration/runtime-semantics/MemberExpression.d.mts.map +1 -0
  432. package/declaration/runtime-semantics/MethodDefinitionEvaluation.d.mts +15 -0
  433. package/declaration/runtime-semantics/MethodDefinitionEvaluation.d.mts.map +1 -0
  434. package/declaration/runtime-semantics/Module.d.mts +17 -0
  435. package/declaration/runtime-semantics/Module.d.mts.map +1 -0
  436. package/declaration/runtime-semantics/ModuleBody.d.mts +4 -0
  437. package/declaration/runtime-semantics/ModuleBody.d.mts.map +1 -0
  438. package/declaration/runtime-semantics/MultiplicativeExpression.d.mts +5 -0
  439. package/declaration/runtime-semantics/MultiplicativeExpression.d.mts.map +1 -0
  440. package/declaration/runtime-semantics/NamedEvaluation.d.mts +4 -0
  441. package/declaration/runtime-semantics/NamedEvaluation.d.mts.map +1 -0
  442. package/declaration/runtime-semantics/NewExpression.d.mts +5 -0
  443. package/declaration/runtime-semantics/NewExpression.d.mts.map +1 -0
  444. package/declaration/runtime-semantics/NewTarget.d.mts +3 -0
  445. package/declaration/runtime-semantics/NewTarget.d.mts.map +1 -0
  446. package/declaration/runtime-semantics/NumberToBigInt.d.mts +10 -0
  447. package/declaration/runtime-semantics/NumberToBigInt.d.mts.map +1 -0
  448. package/declaration/runtime-semantics/ObjectLiteral.d.mts +5 -0
  449. package/declaration/runtime-semantics/ObjectLiteral.d.mts.map +1 -0
  450. package/declaration/runtime-semantics/OptionalExpression.d.mts +5 -0
  451. package/declaration/runtime-semantics/OptionalExpression.d.mts.map +1 -0
  452. package/declaration/runtime-semantics/ParenthesizedExpression.d.mts +4 -0
  453. package/declaration/runtime-semantics/ParenthesizedExpression.d.mts.map +1 -0
  454. package/declaration/runtime-semantics/PropertyBindingInitialization.d.mts +6 -0
  455. package/declaration/runtime-semantics/PropertyBindingInitialization.d.mts.map +1 -0
  456. package/declaration/runtime-semantics/PropertyDefinitionEvaluation.d.mts +6 -0
  457. package/declaration/runtime-semantics/PropertyDefinitionEvaluation.d.mts.map +1 -0
  458. package/declaration/runtime-semantics/PropertyName.d.mts +5 -0
  459. package/declaration/runtime-semantics/PropertyName.d.mts.map +1 -0
  460. package/declaration/runtime-semantics/RegExp.d.mts +36 -0
  461. package/declaration/runtime-semantics/RegExp.d.mts.map +1 -0
  462. package/declaration/runtime-semantics/RegularExpressionLiteral.d.mts +4 -0
  463. package/declaration/runtime-semantics/RegularExpressionLiteral.d.mts.map +1 -0
  464. package/declaration/runtime-semantics/RelationalExpression.d.mts +20 -0
  465. package/declaration/runtime-semantics/RelationalExpression.d.mts.map +1 -0
  466. package/declaration/runtime-semantics/RestBindingInitialization.d.mts +5 -0
  467. package/declaration/runtime-semantics/RestBindingInitialization.d.mts.map +1 -0
  468. package/declaration/runtime-semantics/ReturnStatement.d.mts +6 -0
  469. package/declaration/runtime-semantics/ReturnStatement.d.mts.map +1 -0
  470. package/declaration/runtime-semantics/Script.d.mts +5 -0
  471. package/declaration/runtime-semantics/Script.d.mts.map +1 -0
  472. package/declaration/runtime-semantics/ScriptBody.d.mts +3 -0
  473. package/declaration/runtime-semantics/ScriptBody.d.mts.map +1 -0
  474. package/declaration/runtime-semantics/ShiftExpression.d.mts +7 -0
  475. package/declaration/runtime-semantics/ShiftExpression.d.mts.map +1 -0
  476. package/declaration/runtime-semantics/StatementList.d.mts +5 -0
  477. package/declaration/runtime-semantics/StatementList.d.mts.map +1 -0
  478. package/declaration/runtime-semantics/StringIndexOf.d.mts +3 -0
  479. package/declaration/runtime-semantics/StringIndexOf.d.mts.map +1 -0
  480. package/declaration/runtime-semantics/StringPad.d.mts +5 -0
  481. package/declaration/runtime-semantics/StringPad.d.mts.map +1 -0
  482. package/declaration/runtime-semantics/SuperCall.d.mts +11 -0
  483. package/declaration/runtime-semantics/SuperCall.d.mts.map +1 -0
  484. package/declaration/runtime-semantics/SuperProperty.d.mts +5 -0
  485. package/declaration/runtime-semantics/SuperProperty.d.mts.map +1 -0
  486. package/declaration/runtime-semantics/SwitchStatement.d.mts +9 -0
  487. package/declaration/runtime-semantics/SwitchStatement.d.mts.map +1 -0
  488. package/declaration/runtime-semantics/TaggedTemplateExpression.d.mts +5 -0
  489. package/declaration/runtime-semantics/TaggedTemplateExpression.d.mts.map +1 -0
  490. package/declaration/runtime-semantics/TemplateLiteral.d.mts +5 -0
  491. package/declaration/runtime-semantics/TemplateLiteral.d.mts.map +1 -0
  492. package/declaration/runtime-semantics/This.d.mts +5 -0
  493. package/declaration/runtime-semantics/This.d.mts.map +1 -0
  494. package/declaration/runtime-semantics/ThrowStatement.d.mts +10 -0
  495. package/declaration/runtime-semantics/ThrowStatement.d.mts.map +1 -0
  496. package/declaration/runtime-semantics/TrimString.d.mts +5 -0
  497. package/declaration/runtime-semantics/TrimString.d.mts.map +1 -0
  498. package/declaration/runtime-semantics/TryStatement.d.mts +16 -0
  499. package/declaration/runtime-semantics/TryStatement.d.mts.map +1 -0
  500. package/declaration/runtime-semantics/UnaryExpression.d.mts +10 -0
  501. package/declaration/runtime-semantics/UnaryExpression.d.mts.map +1 -0
  502. package/declaration/runtime-semantics/Unicode.d.mts +161 -0
  503. package/declaration/runtime-semantics/Unicode.d.mts.map +1 -0
  504. package/declaration/runtime-semantics/UpdateExpression.d.mts +4 -0
  505. package/declaration/runtime-semantics/UpdateExpression.d.mts.map +1 -0
  506. package/declaration/runtime-semantics/VariableStatement.d.mts +7 -0
  507. package/declaration/runtime-semantics/VariableStatement.d.mts.map +1 -0
  508. package/declaration/runtime-semantics/WithStatement.d.mts +16 -0
  509. package/declaration/runtime-semantics/WithStatement.d.mts.map +1 -0
  510. package/declaration/runtime-semantics/YieldExpression.d.mts +5 -0
  511. package/declaration/runtime-semantics/YieldExpression.d.mts.map +1 -0
  512. package/declaration/runtime-semantics/all.d.mts +109 -0
  513. package/declaration/runtime-semantics/all.d.mts.map +1 -0
  514. package/declaration/static-semantics/BodyText.d.mts +4 -0
  515. package/declaration/static-semantics/BodyText.d.mts.map +1 -0
  516. package/declaration/static-semantics/BoundNames.d.mts +4 -0
  517. package/declaration/static-semantics/BoundNames.d.mts.map +1 -0
  518. package/declaration/static-semantics/CharacterValue.d.mts +6 -0
  519. package/declaration/static-semantics/CharacterValue.d.mts.map +1 -0
  520. package/declaration/static-semantics/CodePointAt.d.mts +8 -0
  521. package/declaration/static-semantics/CodePointAt.d.mts.map +1 -0
  522. package/declaration/static-semantics/CodePointsToString.d.mts +3 -0
  523. package/declaration/static-semantics/CodePointsToString.d.mts.map +1 -0
  524. package/declaration/static-semantics/ConstructorMethod.d.mts +4 -0
  525. package/declaration/static-semantics/ConstructorMethod.d.mts.map +1 -0
  526. package/declaration/static-semantics/ContainsArguments.d.mts +4 -0
  527. package/declaration/static-semantics/ContainsArguments.d.mts.map +1 -0
  528. package/declaration/static-semantics/ContainsExpression.d.mts +3 -0
  529. package/declaration/static-semantics/ContainsExpression.d.mts.map +1 -0
  530. package/declaration/static-semantics/DeclarationPart.d.mts +3 -0
  531. package/declaration/static-semantics/DeclarationPart.d.mts.map +1 -0
  532. package/declaration/static-semantics/ExpectedArgumentCount.d.mts +3 -0
  533. package/declaration/static-semantics/ExpectedArgumentCount.d.mts.map +1 -0
  534. package/declaration/static-semantics/ExportEntries.d.mts +11 -0
  535. package/declaration/static-semantics/ExportEntries.d.mts.map +1 -0
  536. package/declaration/static-semantics/ExportEntriesForModule.d.mts +5 -0
  537. package/declaration/static-semantics/ExportEntriesForModule.d.mts.map +1 -0
  538. package/declaration/static-semantics/FlagText.d.mts +4 -0
  539. package/declaration/static-semantics/FlagText.d.mts.map +1 -0
  540. package/declaration/static-semantics/HasInitializer.d.mts +5 -0
  541. package/declaration/static-semantics/HasInitializer.d.mts.map +1 -0
  542. package/declaration/static-semantics/HasName.d.mts +3 -0
  543. package/declaration/static-semantics/HasName.d.mts.map +1 -0
  544. package/declaration/static-semantics/ImportEntries.d.mts +10 -0
  545. package/declaration/static-semantics/ImportEntries.d.mts.map +1 -0
  546. package/declaration/static-semantics/ImportEntriesForModule.d.mts +4 -0
  547. package/declaration/static-semantics/ImportEntriesForModule.d.mts.map +1 -0
  548. package/declaration/static-semantics/ImportedLocalNames.d.mts +4 -0
  549. package/declaration/static-semantics/ImportedLocalNames.d.mts.map +1 -0
  550. package/declaration/static-semantics/IsAnonymousFunctionDefinition.d.mts +4 -0
  551. package/declaration/static-semantics/IsAnonymousFunctionDefinition.d.mts.map +1 -0
  552. package/declaration/static-semantics/IsComputedPropertyKey.d.mts +3 -0
  553. package/declaration/static-semantics/IsComputedPropertyKey.d.mts.map +1 -0
  554. package/declaration/static-semantics/IsConstantDeclaration.d.mts +3 -0
  555. package/declaration/static-semantics/IsConstantDeclaration.d.mts.map +1 -0
  556. package/declaration/static-semantics/IsDestructuring.d.mts +4 -0
  557. package/declaration/static-semantics/IsDestructuring.d.mts.map +1 -0
  558. package/declaration/static-semantics/IsFunctionDefinition.d.mts +6 -0
  559. package/declaration/static-semantics/IsFunctionDefinition.d.mts.map +1 -0
  560. package/declaration/static-semantics/IsIdentifierRef.d.mts +3 -0
  561. package/declaration/static-semantics/IsIdentifierRef.d.mts.map +1 -0
  562. package/declaration/static-semantics/IsInTailPosition.d.mts +3 -0
  563. package/declaration/static-semantics/IsInTailPosition.d.mts.map +1 -0
  564. package/declaration/static-semantics/IsSimpleParameterList.d.mts +3 -0
  565. package/declaration/static-semantics/IsSimpleParameterList.d.mts.map +1 -0
  566. package/declaration/static-semantics/IsStatic.d.mts +4 -0
  567. package/declaration/static-semantics/IsStatic.d.mts.map +1 -0
  568. package/declaration/static-semantics/IsStrict.d.mts +4 -0
  569. package/declaration/static-semantics/IsStrict.d.mts.map +1 -0
  570. package/declaration/static-semantics/IsStringWellFormedUnicode.d.mts +3 -0
  571. package/declaration/static-semantics/IsStringWellFormedUnicode.d.mts.map +1 -0
  572. package/declaration/static-semantics/LexicallyDeclaredNames.d.mts +4 -0
  573. package/declaration/static-semantics/LexicallyDeclaredNames.d.mts.map +1 -0
  574. package/declaration/static-semantics/LexicallyScopedDeclarations.d.mts +3 -0
  575. package/declaration/static-semantics/LexicallyScopedDeclarations.d.mts.map +1 -0
  576. package/declaration/static-semantics/ModuleRequests.d.mts +15 -0
  577. package/declaration/static-semantics/ModuleRequests.d.mts.map +1 -0
  578. package/declaration/static-semantics/NonConstructorElements.d.mts +4 -0
  579. package/declaration/static-semantics/NonConstructorElements.d.mts.map +1 -0
  580. package/declaration/static-semantics/NumericValue.d.mts +4 -0
  581. package/declaration/static-semantics/NumericValue.d.mts.map +1 -0
  582. package/declaration/static-semantics/PrivateBoundIdentifiers.d.mts +5 -0
  583. package/declaration/static-semantics/PrivateBoundIdentifiers.d.mts.map +1 -0
  584. package/declaration/static-semantics/PropName.d.mts +3 -0
  585. package/declaration/static-semantics/PropName.d.mts.map +1 -0
  586. package/declaration/static-semantics/StringToCodePoints.d.mts +3 -0
  587. package/declaration/static-semantics/StringToCodePoints.d.mts.map +1 -0
  588. package/declaration/static-semantics/StringValue.d.mts +3 -0
  589. package/declaration/static-semantics/StringValue.d.mts.map +1 -0
  590. package/declaration/static-semantics/TemplateStrings.d.mts +5 -0
  591. package/declaration/static-semantics/TemplateStrings.d.mts.map +1 -0
  592. package/declaration/static-semantics/TopLevelLexicallyDeclaredNames.d.mts +4 -0
  593. package/declaration/static-semantics/TopLevelLexicallyDeclaredNames.d.mts.map +1 -0
  594. package/declaration/static-semantics/TopLevelLexicallyScopedDeclarations.d.mts +4 -0
  595. package/declaration/static-semantics/TopLevelLexicallyScopedDeclarations.d.mts.map +1 -0
  596. package/declaration/static-semantics/TopLevelVarDeclaredNames.d.mts +4 -0
  597. package/declaration/static-semantics/TopLevelVarDeclaredNames.d.mts.map +1 -0
  598. package/declaration/static-semantics/TopLevelVarScopedDeclarations.d.mts +4 -0
  599. package/declaration/static-semantics/TopLevelVarScopedDeclarations.d.mts.map +1 -0
  600. package/declaration/static-semantics/UTF16EncodeCodePoint.d.mts +4 -0
  601. package/declaration/static-semantics/UTF16EncodeCodePoint.d.mts.map +1 -0
  602. package/declaration/static-semantics/UTF16SurrogatePairToCodePoint.d.mts +4 -0
  603. package/declaration/static-semantics/UTF16SurrogatePairToCodePoint.d.mts.map +1 -0
  604. package/declaration/static-semantics/VarDeclaredNames.d.mts +4 -0
  605. package/declaration/static-semantics/VarDeclaredNames.d.mts.map +1 -0
  606. package/declaration/static-semantics/VarScopedDeclarations.d.mts +4 -0
  607. package/declaration/static-semantics/VarScopedDeclarations.d.mts.map +1 -0
  608. package/declaration/static-semantics/all.d.mts +48 -0
  609. package/declaration/static-semantics/all.d.mts.map +1 -0
  610. package/declaration/value.d.mts +297 -0
  611. package/declaration/value.d.mts.map +1 -0
  612. package/lib/engine262.d.mts +1 -0
  613. package/lib/engine262.d.ts +1 -0
  614. package/lib/engine262.js +62868 -0
  615. package/lib/engine262.js.map +1 -0
  616. package/lib/engine262.mjs +62268 -0
  617. package/lib/engine262.mjs.map +1 -0
  618. package/lib/inspector/context.d.mts +35 -0
  619. package/lib/inspector/context.d.mts.map +1 -0
  620. package/lib/inspector/context.mjs +347 -0
  621. package/lib/inspector/context.mjs.map +1 -0
  622. package/lib/inspector/index.d.mts +16 -0
  623. package/lib/inspector/index.d.mts.map +1 -0
  624. package/lib/inspector/index.mjs +115 -0
  625. package/lib/inspector/index.mjs.map +1 -0
  626. package/lib/inspector/inspect.d.mts +11 -0
  627. package/lib/inspector/inspect.d.mts.map +1 -0
  628. package/lib/inspector/inspect.mjs +403 -0
  629. package/lib/inspector/inspect.mjs.map +1 -0
  630. package/lib/inspector/internal-utils.d.mts +4 -0
  631. package/lib/inspector/internal-utils.d.mts.map +1 -0
  632. package/lib/inspector/internal-utils.mjs +17 -0
  633. package/lib/inspector/internal-utils.mjs.map +1 -0
  634. package/lib/inspector/methods.d.mts +7 -0
  635. package/lib/inspector/methods.d.mts.map +1 -0
  636. package/lib/inspector/methods.mjs +308 -0
  637. package/lib/inspector/methods.mjs.map +1 -0
  638. package/lib/inspector/types.d.mts +220 -0
  639. package/lib/inspector/types.d.mts.map +1 -0
  640. package/lib/inspector/types.mjs +2 -0
  641. package/lib/inspector/types.mjs.map +1 -0
  642. package/lib/inspector/utils.d.mts +8 -0
  643. package/lib/inspector/utils.d.mts.map +1 -0
  644. package/lib/inspector/utils.mjs +62 -0
  645. package/lib/inspector/utils.mjs.map +1 -0
  646. package/lib/inspector.d.mts +1 -0
  647. package/lib/inspector.d.ts +1 -0
  648. package/lib/inspector.js +1495 -0
  649. package/lib/inspector.js.map +1 -0
  650. package/lib/inspector.mjs +1488 -0
  651. package/lib/inspector.mjs.map +1 -0
  652. package/lib/node/bin.d.mts +3 -0
  653. package/lib/node/bin.d.mts.map +1 -0
  654. package/lib/node/bin.mjs +223 -0
  655. package/lib/node/bin.mjs.map +1 -0
  656. package/lib/node/example.d.mts +2 -0
  657. package/lib/node/example.d.mts.map +1 -0
  658. package/lib/node/example.mjs +52 -0
  659. package/lib/node/example.mjs.map +1 -0
  660. package/lib/node/inspector.d.mts +15 -0
  661. package/lib/node/inspector.d.mts.map +1 -0
  662. package/lib/node/inspector.mjs +112 -0
  663. package/lib/node/inspector.mjs.map +1 -0
  664. package/lib/node/module.d.mts +7 -0
  665. package/lib/node/module.d.mts.map +1 -0
  666. package/lib/node/module.mjs +79 -0
  667. package/lib/node/module.mjs.map +1 -0
  668. package/lib-src/inspector/context.mts +410 -0
  669. package/lib-src/inspector/index.mts +137 -0
  670. package/lib-src/inspector/inspect.mts +474 -0
  671. package/lib-src/inspector/internal-utils.mts +18 -0
  672. package/lib-src/inspector/js_protocol.json +3288 -0
  673. package/lib-src/inspector/methods.mts +333 -0
  674. package/lib-src/inspector/tsconfig.json +17 -0
  675. package/lib-src/inspector/types.mts +225 -0
  676. package/lib-src/inspector/utils.mts +81 -0
  677. package/lib-src/node/bin.mts +240 -0
  678. package/lib-src/node/example.mts +58 -0
  679. package/lib-src/node/inspector.mts +124 -0
  680. package/lib-src/node/module.mts +85 -0
  681. package/lib-src/node/tsconfig.json +21 -0
  682. package/package.json +152 -0
  683. package/src/abstract-ops/all.mts +35 -0
  684. package/src/abstract-ops/arguments-operations.mts +245 -0
  685. package/src/abstract-ops/array-objects.mts +312 -0
  686. package/src/abstract-ops/arraybuffer-objects.mts +246 -0
  687. package/src/abstract-ops/async-function-operations.mts +46 -0
  688. package/src/abstract-ops/async-generator-objects.mts +346 -0
  689. package/src/abstract-ops/data-types-and-values.mts +43 -0
  690. package/src/abstract-ops/dataview-objects.mts +149 -0
  691. package/src/abstract-ops/date-objects.mts +232 -0
  692. package/src/abstract-ops/error-objects.mts +38 -0
  693. package/src/abstract-ops/execution-contexts.mts +80 -0
  694. package/src/abstract-ops/function-operations.mts +651 -0
  695. package/src/abstract-ops/generator-operations.mts +326 -0
  696. package/src/abstract-ops/global-object.mts +386 -0
  697. package/src/abstract-ops/immutable-prototype-objects.mts +21 -0
  698. package/src/abstract-ops/import-calls.mts +117 -0
  699. package/src/abstract-ops/iterator-operations.mts +311 -0
  700. package/src/abstract-ops/keyed-collections.mts +19 -0
  701. package/src/abstract-ops/module-namespace-exotic-objects.mts +351 -0
  702. package/src/abstract-ops/module-records.mts +588 -0
  703. package/src/abstract-ops/notational-conventions.mts +56 -0
  704. package/src/abstract-ops/object-operations.mts +599 -0
  705. package/src/abstract-ops/objects.mts +435 -0
  706. package/src/abstract-ops/private-names.mts +106 -0
  707. package/src/abstract-ops/promise-operations.mts +482 -0
  708. package/src/abstract-ops/proxy-objects.mts +579 -0
  709. package/src/abstract-ops/realms.mts +525 -0
  710. package/src/abstract-ops/reference-operations.mts +211 -0
  711. package/src/abstract-ops/regexp-objects.mts +306 -0
  712. package/src/abstract-ops/shared-arraybuffer.mts +8 -0
  713. package/src/abstract-ops/spec-types.mts +220 -0
  714. package/src/abstract-ops/string-objects.mts +156 -0
  715. package/src/abstract-ops/symbol-objects.mts +30 -0
  716. package/src/abstract-ops/testing-comparison.mts +380 -0
  717. package/src/abstract-ops/type-conversion.mts +564 -0
  718. package/src/abstract-ops/typedarray-objects.mts +396 -0
  719. package/src/abstract-ops/weak-operations.mts +79 -0
  720. package/src/api.mts +469 -0
  721. package/src/completion.mts +482 -0
  722. package/src/environment.mts +973 -0
  723. package/src/evaluator.mts +300 -0
  724. package/src/helpers.mts +591 -0
  725. package/src/host-defined/debugger-eval.mts +143 -0
  726. package/src/host-defined/debugger-util.mts +15 -0
  727. package/src/host-defined/engine.mts +604 -0
  728. package/src/host-defined/inspect.mts +246 -0
  729. package/src/host-defined/test262-intrinsics.mts +164 -0
  730. package/src/index.mts +37 -0
  731. package/src/intrinsics/AggregateError.mts +68 -0
  732. package/src/intrinsics/AggregateErrorPrototype.mts +12 -0
  733. package/src/intrinsics/Array.mts +409 -0
  734. package/src/intrinsics/ArrayBuffer.mts +48 -0
  735. package/src/intrinsics/ArrayBufferPrototype.mts +120 -0
  736. package/src/intrinsics/ArrayIteratorPrototype.mts +23 -0
  737. package/src/intrinsics/ArrayPrototype.mts +755 -0
  738. package/src/intrinsics/ArrayPrototypeShared.mts +691 -0
  739. package/src/intrinsics/AsyncFromSyncIteratorPrototype.mts +164 -0
  740. package/src/intrinsics/AsyncFunction.mts +31 -0
  741. package/src/intrinsics/AsyncFunctionPrototype.mts +8 -0
  742. package/src/intrinsics/AsyncGeneratorFunction.mts +37 -0
  743. package/src/intrinsics/AsyncGeneratorFunctionPrototype.mts +19 -0
  744. package/src/intrinsics/AsyncGeneratorFunctionPrototypePrototype.mts +148 -0
  745. package/src/intrinsics/AsyncIteratorPrototype.mts +17 -0
  746. package/src/intrinsics/BigInt.mts +69 -0
  747. package/src/intrinsics/BigIntPrototype.mts +83 -0
  748. package/src/intrinsics/Boolean.mts +47 -0
  749. package/src/intrinsics/BooleanPrototype.mts +58 -0
  750. package/src/intrinsics/DataView.mts +82 -0
  751. package/src/intrinsics/DataViewPrototype.mts +271 -0
  752. package/src/intrinsics/Date.mts +218 -0
  753. package/src/intrinsics/DatePrototype.mts +779 -0
  754. package/src/intrinsics/Error.mts +83 -0
  755. package/src/intrinsics/ErrorPrototype.mts +113 -0
  756. package/src/intrinsics/FinalizationRegistry.mts +65 -0
  757. package/src/intrinsics/FinalizationRegistryPrototype.mts +109 -0
  758. package/src/intrinsics/ForInIteratorPrototype.mts +120 -0
  759. package/src/intrinsics/Function.mts +21 -0
  760. package/src/intrinsics/FunctionPrototype.mts +274 -0
  761. package/src/intrinsics/GeneratorFunction.mts +32 -0
  762. package/src/intrinsics/GeneratorFunctionPrototype.mts +21 -0
  763. package/src/intrinsics/GeneratorFunctionPrototypePrototype.mts +59 -0
  764. package/src/intrinsics/Iterator.mts +72 -0
  765. package/src/intrinsics/IteratorHelperPrototype.mts +61 -0
  766. package/src/intrinsics/IteratorPrototype.mts +712 -0
  767. package/src/intrinsics/JSON.mts +738 -0
  768. package/src/intrinsics/Map.mts +128 -0
  769. package/src/intrinsics/MapIteratorPrototype.mts +81 -0
  770. package/src/intrinsics/MapPrototype.mts +295 -0
  771. package/src/intrinsics/Math.mts +288 -0
  772. package/src/intrinsics/NativeError.mts +88 -0
  773. package/src/intrinsics/Number.mts +131 -0
  774. package/src/intrinsics/NumberPrototype.mts +125 -0
  775. package/src/intrinsics/Object.mts +465 -0
  776. package/src/intrinsics/ObjectPrototype.mts +333 -0
  777. package/src/intrinsics/Promise.mts +700 -0
  778. package/src/intrinsics/PromisePrototype.mts +125 -0
  779. package/src/intrinsics/Proxy.mts +102 -0
  780. package/src/intrinsics/Reflect.mts +211 -0
  781. package/src/intrinsics/RegExp.mts +166 -0
  782. package/src/intrinsics/RegExpPrototype.mts +761 -0
  783. package/src/intrinsics/RegExpStringIteratorPrototype.mts +73 -0
  784. package/src/intrinsics/Set.mts +75 -0
  785. package/src/intrinsics/SetIteratorPrototype.mts +78 -0
  786. package/src/intrinsics/SetPrototype.mts +715 -0
  787. package/src/intrinsics/String.mts +135 -0
  788. package/src/intrinsics/StringIteratorPrototype.mts +23 -0
  789. package/src/intrinsics/StringPrototype.mts +858 -0
  790. package/src/intrinsics/Symbol.mts +103 -0
  791. package/src/intrinsics/SymbolPrototype.mts +83 -0
  792. package/src/intrinsics/ThrowTypeError.mts +21 -0
  793. package/src/intrinsics/TypedArray.mts +576 -0
  794. package/src/intrinsics/TypedArrayConstructors.mts +85 -0
  795. package/src/intrinsics/TypedArrayPrototype.mts +722 -0
  796. package/src/intrinsics/TypedArrayPrototypes.mts +17 -0
  797. package/src/intrinsics/TypedArray_Uint8Array.mts +446 -0
  798. package/src/intrinsics/URIHandling.mts +277 -0
  799. package/src/intrinsics/WeakMap.mts +56 -0
  800. package/src/intrinsics/WeakMapPrototype.mts +202 -0
  801. package/src/intrinsics/WeakRef.mts +42 -0
  802. package/src/intrinsics/WeakRefPrototype.mts +23 -0
  803. package/src/intrinsics/WeakSet.mts +66 -0
  804. package/src/intrinsics/WeakSetPrototype.mts +99 -0
  805. package/src/intrinsics/WrapForValidIteratorPrototype.mts +66 -0
  806. package/src/intrinsics/bootstrap.mts +152 -0
  807. package/src/intrinsics/eval.mts +25 -0
  808. package/src/intrinsics/isFinite.mts +23 -0
  809. package/src/intrinsics/isNaN.mts +23 -0
  810. package/src/intrinsics/parseFloat.mts +78 -0
  811. package/src/intrinsics/parseInt.mts +101 -0
  812. package/src/messages.mts +198 -0
  813. package/src/modules.mts +773 -0
  814. package/src/parse.mts +254 -0
  815. package/src/parser/BaseParser.mts +36 -0
  816. package/src/parser/ExpressionParser.mts +1519 -0
  817. package/src/parser/FunctionParser.mts +389 -0
  818. package/src/parser/IdentifierParser.mts +144 -0
  819. package/src/parser/LanguageParser.mts +110 -0
  820. package/src/parser/Lexer.mts +1057 -0
  821. package/src/parser/ModuleParser.mts +328 -0
  822. package/src/parser/ParseNode.mts +2728 -0
  823. package/src/parser/Parser.mts +200 -0
  824. package/src/parser/RegExpParser.mts +1413 -0
  825. package/src/parser/Scope.mts +538 -0
  826. package/src/parser/StatementParser.mts +958 -0
  827. package/src/parser/tokens.mts +212 -0
  828. package/src/parser/unicode.d.ts +20 -0
  829. package/src/parser/utils.mts +114 -0
  830. package/src/runtime-semantics/AdditiveExpression.mts +29 -0
  831. package/src/runtime-semantics/ApplyStringOrNumericBinaryOperator.mts +79 -0
  832. package/src/runtime-semantics/ArgumentListEvaluation.mts +178 -0
  833. package/src/runtime-semantics/ArrayLiteral.mts +99 -0
  834. package/src/runtime-semantics/ArrowFunction.mts +8 -0
  835. package/src/runtime-semantics/AssignmentExpression.mts +281 -0
  836. package/src/runtime-semantics/AsyncArrowFunction.mts +8 -0
  837. package/src/runtime-semantics/AsyncFunctionExpression.mts +11 -0
  838. package/src/runtime-semantics/AsyncGeneratorExpression.mts +11 -0
  839. package/src/runtime-semantics/AwaitExpression.mts +17 -0
  840. package/src/runtime-semantics/BindingInitialization.mts +93 -0
  841. package/src/runtime-semantics/BitwiseOperators.mts +14 -0
  842. package/src/runtime-semantics/Block.mts +73 -0
  843. package/src/runtime-semantics/BreakStatement.mts +18 -0
  844. package/src/runtime-semantics/BreakableStatement.mts +18 -0
  845. package/src/runtime-semantics/CallExpression.mts +59 -0
  846. package/src/runtime-semantics/ClassDeclaration.mts +38 -0
  847. package/src/runtime-semantics/ClassDefinitionEvaluation.mts +352 -0
  848. package/src/runtime-semantics/ClassExpression.mts +23 -0
  849. package/src/runtime-semantics/ClassFieldDefinitionEvaluation.mts +60 -0
  850. package/src/runtime-semantics/ClassStaticBlockDefinitionEvaluation.mts +44 -0
  851. package/src/runtime-semantics/CoalesceExpression.mts +24 -0
  852. package/src/runtime-semantics/CommaOperator.mts +18 -0
  853. package/src/runtime-semantics/ConditionalExpression.mts +31 -0
  854. package/src/runtime-semantics/ContinueStatement.mts +18 -0
  855. package/src/runtime-semantics/CreateDynamicFunction.mts +200 -0
  856. package/src/runtime-semantics/DebuggerStatement.mts +19 -0
  857. package/src/runtime-semantics/DefineMethod.mts +41 -0
  858. package/src/runtime-semantics/DestructuringAssignmentEvaluation.mts +306 -0
  859. package/src/runtime-semantics/EmptyStatement.mts +9 -0
  860. package/src/runtime-semantics/EqualityExpression.mts +60 -0
  861. package/src/runtime-semantics/EvaluateBody.mts +200 -0
  862. package/src/runtime-semantics/EvaluateCall.mts +63 -0
  863. package/src/runtime-semantics/EvaluatePropertyAccess.mts +39 -0
  864. package/src/runtime-semantics/EvaluateStringOrNumericBinaryExpression.mts +19 -0
  865. package/src/runtime-semantics/ExponentiationExpression.mts +11 -0
  866. package/src/runtime-semantics/ExportDeclaration.mts +90 -0
  867. package/src/runtime-semantics/ExpressionStatement.mts +14 -0
  868. package/src/runtime-semantics/FunctionDeclaration.mts +11 -0
  869. package/src/runtime-semantics/FunctionDeclarationInstantiation.mts +274 -0
  870. package/src/runtime-semantics/FunctionExpression.mts +11 -0
  871. package/src/runtime-semantics/FunctionStatementList.mts +11 -0
  872. package/src/runtime-semantics/GeneratorExpression.mts +11 -0
  873. package/src/runtime-semantics/GetSubstitution.mts +90 -0
  874. package/src/runtime-semantics/GlobalDeclarationInstantiation.mts +142 -0
  875. package/src/runtime-semantics/HoistableDeclaration.mts +12 -0
  876. package/src/runtime-semantics/IdentifierReference.mts +15 -0
  877. package/src/runtime-semantics/IfStatement.mts +49 -0
  878. package/src/runtime-semantics/ImportCall.mts +134 -0
  879. package/src/runtime-semantics/ImportDeclaration.mts +9 -0
  880. package/src/runtime-semantics/ImportMeta.mts +45 -0
  881. package/src/runtime-semantics/InstantiateArrowFunctionExpression.mts +35 -0
  882. package/src/runtime-semantics/InstantiateAsyncArrowFunctionExpression.mts +37 -0
  883. package/src/runtime-semantics/InstantiateAsyncFunctionExpression.mts +75 -0
  884. package/src/runtime-semantics/InstantiateAsyncGeneratorFunctionExpression.mts +90 -0
  885. package/src/runtime-semantics/InstantiateFunctionObject.mts +123 -0
  886. package/src/runtime-semantics/InstantiateGeneratorFunctionExpression.mts +82 -0
  887. package/src/runtime-semantics/InstantiateOrdinaryFunctionExpression.mts +65 -0
  888. package/src/runtime-semantics/IteratorBindingInitialization.mts +213 -0
  889. package/src/runtime-semantics/KeyedBindingInitialization.mts +61 -0
  890. package/src/runtime-semantics/LabelledEvaluation.mts +753 -0
  891. package/src/runtime-semantics/LabelledStatement.mts +11 -0
  892. package/src/runtime-semantics/LexicalDeclaration.mts +92 -0
  893. package/src/runtime-semantics/Literal.mts +36 -0
  894. package/src/runtime-semantics/LogicalANDExpression.mts +25 -0
  895. package/src/runtime-semantics/LogicalORExpression.mts +25 -0
  896. package/src/runtime-semantics/MV.mts +10 -0
  897. package/src/runtime-semantics/MemberExpression.mts +71 -0
  898. package/src/runtime-semantics/MethodDefinitionEvaluation.mts +266 -0
  899. package/src/runtime-semantics/Module.mts +15 -0
  900. package/src/runtime-semantics/ModuleBody.mts +10 -0
  901. package/src/runtime-semantics/MultiplicativeExpression.mts +18 -0
  902. package/src/runtime-semantics/NamedEvaluation.mts +96 -0
  903. package/src/runtime-semantics/NewExpression.mts +50 -0
  904. package/src/runtime-semantics/NewTarget.mts +8 -0
  905. package/src/runtime-semantics/NumberToBigInt.mts +17 -0
  906. package/src/runtime-semantics/ObjectLiteral.mts +26 -0
  907. package/src/runtime-semantics/OptionalExpression.mts +128 -0
  908. package/src/runtime-semantics/ParenthesizedExpression.mts +8 -0
  909. package/src/runtime-semantics/PropertyBindingInitialization.mts +45 -0
  910. package/src/runtime-semantics/PropertyDefinitionEvaluation.mts +121 -0
  911. package/src/runtime-semantics/PropertyName.mts +62 -0
  912. package/src/runtime-semantics/RegExp.mts +1325 -0
  913. package/src/runtime-semantics/RegularExpressionLiteral.mts +16 -0
  914. package/src/runtime-semantics/RelationalExpression.mts +152 -0
  915. package/src/runtime-semantics/RestBindingInitialization.mts +29 -0
  916. package/src/runtime-semantics/ReturnStatement.mts +32 -0
  917. package/src/runtime-semantics/Script.mts +15 -0
  918. package/src/runtime-semantics/ScriptBody.mts +7 -0
  919. package/src/runtime-semantics/ShiftExpression.mts +17 -0
  920. package/src/runtime-semantics/StatementList.mts +33 -0
  921. package/src/runtime-semantics/StringIndexOf.mts +43 -0
  922. package/src/runtime-semantics/StringPad.mts +34 -0
  923. package/src/runtime-semantics/SuperCall.mts +65 -0
  924. package/src/runtime-semantics/SuperProperty.mts +58 -0
  925. package/src/runtime-semantics/SwitchStatement.mts +221 -0
  926. package/src/runtime-semantics/TaggedTemplateExpression.mts +23 -0
  927. package/src/runtime-semantics/TemplateLiteral.mts +34 -0
  928. package/src/runtime-semantics/This.mts +9 -0
  929. package/src/runtime-semantics/ThrowStatement.mts +22 -0
  930. package/src/runtime-semantics/TrimString.mts +19 -0
  931. package/src/runtime-semantics/TryStatement.mts +120 -0
  932. package/src/runtime-semantics/UnaryExpression.mts +218 -0
  933. package/src/runtime-semantics/Unicode.mts +250 -0
  934. package/src/runtime-semantics/UpdateExpression.mts +126 -0
  935. package/src/runtime-semantics/VariableStatement.mts +72 -0
  936. package/src/runtime-semantics/WithStatement.mts +33 -0
  937. package/src/runtime-semantics/YieldExpression.mts +174 -0
  938. package/src/runtime-semantics/all.mts +108 -0
  939. package/src/static-semantics/BodyText.mts +7 -0
  940. package/src/static-semantics/BoundNames.mts +101 -0
  941. package/src/static-semantics/CharacterValue.mts +112 -0
  942. package/src/static-semantics/CodePointAt.mts +53 -0
  943. package/src/static-semantics/CodePointsToString.mts +15 -0
  944. package/src/static-semantics/ConstructorMethod.mts +10 -0
  945. package/src/static-semantics/ContainsArguments.mts +33 -0
  946. package/src/static-semantics/ContainsExpression.mts +59 -0
  947. package/src/static-semantics/DeclarationPart.mts +5 -0
  948. package/src/static-semantics/ExpectedArgumentCount.mts +26 -0
  949. package/src/static-semantics/ExportEntries.mts +129 -0
  950. package/src/static-semantics/ExportEntriesForModule.mts +63 -0
  951. package/src/static-semantics/FlagText.mts +7 -0
  952. package/src/static-semantics/HasInitializer.mts +5 -0
  953. package/src/static-semantics/HasName.mts +8 -0
  954. package/src/static-semantics/ImportEntries.mts +36 -0
  955. package/src/static-semantics/ImportEntriesForModule.mts +97 -0
  956. package/src/static-semantics/ImportedLocalNames.mts +14 -0
  957. package/src/static-semantics/IsAnonymousFunctionDefinition.mts +18 -0
  958. package/src/static-semantics/IsComputedPropertyKey.mts +7 -0
  959. package/src/static-semantics/IsConstantDeclaration.mts +5 -0
  960. package/src/static-semantics/IsDestructuring.mts +21 -0
  961. package/src/static-semantics/IsFunctionDefinition.mts +15 -0
  962. package/src/static-semantics/IsIdentifierRef.mts +5 -0
  963. package/src/static-semantics/IsInTailPosition.mts +5 -0
  964. package/src/static-semantics/IsSimpleParameterList.mts +23 -0
  965. package/src/static-semantics/IsStatic.mts +10 -0
  966. package/src/static-semantics/IsStrict.mts +7 -0
  967. package/src/static-semantics/IsStringWellFormedUnicode.mts +24 -0
  968. package/src/static-semantics/LexicallyDeclaredNames.mts +26 -0
  969. package/src/static-semantics/LexicallyScopedDeclarations.mts +82 -0
  970. package/src/static-semantics/ModuleRequests.mts +99 -0
  971. package/src/static-semantics/NonConstructorElements.mts +15 -0
  972. package/src/static-semantics/NumericValue.mts +7 -0
  973. package/src/static-semantics/PrivateBoundIdentifiers.mts +23 -0
  974. package/src/static-semantics/PropName.mts +23 -0
  975. package/src/static-semantics/StringToCodePoints.mts +22 -0
  976. package/src/static-semantics/StringValue.mts +19 -0
  977. package/src/static-semantics/TemplateStrings.mts +109 -0
  978. package/src/static-semantics/TopLevelLexicallyDeclaredNames.mts +21 -0
  979. package/src/static-semantics/TopLevelLexicallyScopedDeclarations.mts +23 -0
  980. package/src/static-semantics/TopLevelVarDeclaredNames.mts +26 -0
  981. package/src/static-semantics/TopLevelVarScopedDeclarations.mts +34 -0
  982. package/src/static-semantics/UTF16EncodeCodePoint.mts +18 -0
  983. package/src/static-semantics/UTF16SurrogatePairToCodePoint.mts +12 -0
  984. package/src/static-semantics/VarDeclaredNames.mts +109 -0
  985. package/src/static-semantics/VarScopedDeclarations.mts +115 -0
  986. package/src/static-semantics/all.mts +47 -0
  987. package/src/syntax-error.d.ts +5 -0
  988. package/src/tsconfig.json +11 -0
  989. package/src/unicode/.gitkeep +0 -0
  990. package/src/unicode/CodePointProperties.json +1 -0
  991. package/src/unicode/PropertyValueAliases.json +426 -0
  992. package/src/unicode/SequenceProperties.json +1 -0
  993. package/src/value.mts +1003 -0
@@ -0,0 +1,1413 @@
1
+ import {
2
+ Table70_BinaryUnicodeProperties,
3
+ Table69_NonbinaryUnicodeProperties,
4
+ type UnicodeCharacter,
5
+ CountLeftCapturingParensWithin,
6
+ type Character,
7
+ IsCharacterClass,
8
+ type CodePoint,
9
+ Table71_BinaryPropertyOfStrings,
10
+ isLeadingSurrogate,
11
+ isTrailingSurrogate,
12
+ } from '../runtime-semantics/all.mts';
13
+ import {
14
+ CharacterValue,
15
+ UTF16SurrogatePairToCodePoint,
16
+ type CharacterValueAcceptNode,
17
+ } from '../static-semantics/all.mts';
18
+ import PropertyValueAliases from '../unicode/PropertyValueAliases.json' with { type: 'json' };
19
+ import { __ts_cast__, unreachable } from '../helpers.mts';
20
+ import {
21
+ isIdentifierStart,
22
+ isIdentifierPart,
23
+ isHexDigit,
24
+ } from './Lexer.mts';
25
+ import type { ParseNode } from './ParseNode.mts';
26
+ import { Assert, type Mutable } from '#self';
27
+
28
+ export const isSyntaxCharacter = (c: string) => '^$\\.*+?()[]{}|'.includes(c);
29
+ const isClosingSyntaxCharacter = (c: string) => ')]}|'.includes(c);
30
+ const isDecimalDigit = (c: string) => /[0123456789]/u.test(c);
31
+ const isControlLetter = (c: string) => /[a-zA-Z]/u.test(c);
32
+ const isIdentifierContinue = (c: string) => c && /\p{ID_Continue}/u.test(c);
33
+ /** https://tc39.es/ecma262/#table-controlescape-code-point-values */
34
+ export const isControlEscape = (c: CodePoint) => c >= 9 && c <= 13;
35
+ export const isAsciiLetter = (c: CodePoint) => (c >= 65 && c <= 90) || (c >= 97 && c <= 122);
36
+
37
+ enum ParserContext {
38
+ None = 0,
39
+ UnicodeMode = 1 << 0,
40
+ NamedCaptureGroups = 1 << 1,
41
+ UnicodeSetMode = 1 << 2,
42
+ }
43
+
44
+ export interface RegExpParserContext { UnicodeMode?: boolean; NamedCaptureGroups?: boolean; UnicodeSetsMode?: boolean; }
45
+ export class RegExpParser {
46
+ private source: string;
47
+
48
+ private position = 0;
49
+
50
+ get debug() {
51
+ return `${this.source.slice(0, this.position)}👀${this.source.slice(this.position)}`;
52
+ }
53
+
54
+ private capturingGroups: Mutable<ParseNode.RegExp.Pattern['capturingGroups']> = [];
55
+
56
+ private leftCapturingParenthesesBefore = 0;
57
+
58
+ private decimalEscapes: { readonly value: number, readonly position: number }[] = [];
59
+
60
+ private groupNameRefs: ParseNode.RegExp.AtomEscape_CaptureGroupName[] = [];
61
+
62
+ private groupNameThatMatches: Record<string, ParseNode.RegExp.Atom_Group[]> = Object.create(null);
63
+
64
+ private getAllGroupsWithName(name: string) {
65
+ this.groupNameThatMatches[name] ??= [];
66
+ return this.groupNameThatMatches[name];
67
+ }
68
+
69
+ private state = ParserContext.None;
70
+
71
+ constructor(source: string) {
72
+ this.source = source;
73
+ }
74
+
75
+ scope<T>(flags: RegExpParserContext, f: () => T): T {
76
+ const oldState = this.state;
77
+
78
+ if (flags.UnicodeMode === true) {
79
+ this.state |= ParserContext.UnicodeMode;
80
+ } else if (flags.UnicodeMode === false) {
81
+ this.state &= ~ParserContext.UnicodeMode;
82
+ }
83
+
84
+ if (flags.NamedCaptureGroups === true) {
85
+ this.state |= ParserContext.NamedCaptureGroups;
86
+ } else if (flags.NamedCaptureGroups === false) {
87
+ this.state &= ~ParserContext.NamedCaptureGroups;
88
+ }
89
+
90
+ if (flags.UnicodeSetsMode === true) {
91
+ this.state |= ParserContext.UnicodeSetMode;
92
+ } else if (flags.UnicodeSetsMode === false) {
93
+ this.state &= ~ParserContext.UnicodeSetMode;
94
+ }
95
+
96
+ const r = f();
97
+
98
+ this.state = oldState;
99
+
100
+ return r;
101
+ }
102
+
103
+ private get inUnicodeMode() {
104
+ return (this.state & ParserContext.UnicodeMode) === ParserContext.UnicodeMode;
105
+ }
106
+
107
+ private get inNamedCaptureGroups() {
108
+ return (this.state & ParserContext.NamedCaptureGroups) === ParserContext.NamedCaptureGroups;
109
+ }
110
+
111
+ private get inUnicodeSetMode() {
112
+ return (this.state & ParserContext.UnicodeSetMode) === ParserContext.UnicodeSetMode;
113
+ }
114
+
115
+ private raise(message: string, position = this.position): never {
116
+ const e = new SyntaxError(message);
117
+ e.position = position;
118
+ throw e;
119
+ }
120
+
121
+ private peek(length = 1) {
122
+ return this.source.slice(this.position, this.position + length);
123
+ }
124
+
125
+ private test(c: string) {
126
+ return this.source.slice(this.position, this.position + c.length) === c;
127
+ }
128
+
129
+ private eat(c: string) {
130
+ if (this.source.slice(this.position, this.position + c.length) === c) {
131
+ this.position += c.length;
132
+ return true;
133
+ }
134
+ return false;
135
+ }
136
+
137
+ private next() {
138
+ const c = this.source[this.position];
139
+ if (!c) {
140
+ this.raise('Unexpected end of input', this.position - 1);
141
+ }
142
+ this.position += 1;
143
+ return c;
144
+ }
145
+
146
+ private expect(c: string) {
147
+ if (!this.eat(c)) {
148
+ this.raise(`Expected ${c} but got ${this.peek()}`);
149
+ }
150
+ }
151
+
152
+ // Pattern ::
153
+ // Disjunction
154
+ parsePattern(): ParseNode.RegExp.Pattern {
155
+ const node: ParseNode.RegExp.Pattern = {
156
+ type: 'Pattern',
157
+ capturingGroups: this.capturingGroups,
158
+ Disjunction: this.parseDisjunction(),
159
+ };
160
+ if (this.position < this.source.length) {
161
+ this.raise('Unexpected token');
162
+ }
163
+ // AtomEscape :: DecimalEscape
164
+ // EE: It is a Syntax Error if the CapturingGroupNumber of DecimalEscape is strictly greater than CountLeftCapturingParensWithin(the Pattern containing AtomEscape).
165
+ this.decimalEscapes.forEach((d) => {
166
+ if (d.value > node.capturingGroups.length) {
167
+ this.raise(`There is no ${d.value} capture groups`, d.position);
168
+ }
169
+ });
170
+ // AtomEscape :: k GroupName
171
+ // EE: It is a Syntax Error if GroupSpecifiersThatMatch(GroupName) is empty.
172
+ this.groupNameRefs.forEach((g) => {
173
+ if (!node.capturingGroups.find((x) => g.production === 'CaptureGroupName' && x.GroupName === g.GroupName)) {
174
+ this.raise(`There is no capture group called ${JSON.stringify(g.GroupName)}`, g.position);
175
+ }
176
+ });
177
+ // EE: It is a Syntax Error if CountLeftCapturingParensWithin(Pattern) ≥ 2**32 - 1.
178
+ if (CountLeftCapturingParensWithin(node) >= 2 ** 32 - 1) {
179
+ this.raise('Too many capturing groups');
180
+ }
181
+ return node;
182
+ }
183
+
184
+ // in case ((?<a>x)|(?<a>y))|b, after we check the inner Disjunction, we need to mark them as safe,
185
+ // so when checking the outer Disjunction, we don't make a false positive
186
+ private disjunctionCheckedCaptureGroups = new Set<unknown>();
187
+
188
+ // Disjunction ::
189
+ // Alternative
190
+ // Alternative `|` Disjunction
191
+ private parseDisjunction(): ParseNode.RegExp.Disjunction {
192
+ const beforeCaptureGroups = this.capturingGroups.length;
193
+ const Alternative = this.parseAlternative();
194
+ const node: Mutable<ParseNode.RegExp.Disjunction> = {
195
+ type: 'Disjunction',
196
+ Alternative,
197
+ Disjunction: undefined,
198
+ };
199
+ const afterAlternativeCaptureGroups = this.capturingGroups.length;
200
+ if (this.eat('|')) {
201
+ node.Disjunction = this.parseDisjunction();
202
+ }
203
+ // EE: It is a Syntax Error if Pattern contains two distinct GroupSpecifiers x and y such that the CapturingGroupName of x is the CapturingGroupName of y and such that MightBothParticipate(x, y) is true.
204
+ const alternativeSeenNameGroups = new Set();
205
+ this.capturingGroups.slice(beforeCaptureGroups, afterAlternativeCaptureGroups).forEach((x) => {
206
+ if (this.disjunctionCheckedCaptureGroups.has(x)) {
207
+ return;
208
+ }
209
+ if (x.GroupName) {
210
+ if (alternativeSeenNameGroups.has(x.GroupName)) {
211
+ this.raise(`Duplicated capture group ${JSON.stringify(x.GroupName)}`, x.position);
212
+ }
213
+ alternativeSeenNameGroups.add(x.GroupName);
214
+ }
215
+ this.disjunctionCheckedCaptureGroups.add(x);
216
+ });
217
+
218
+ const disjunctionSeenNameGroups = new Set();
219
+ this.capturingGroups.slice(afterAlternativeCaptureGroups).forEach((x) => {
220
+ if (this.disjunctionCheckedCaptureGroups.has(x)) {
221
+ return;
222
+ }
223
+ if (x.GroupName) {
224
+ if (disjunctionSeenNameGroups.has(x.GroupName)) {
225
+ this.raise(`Duplicated capture group ${JSON.stringify(x.GroupName)}`, x.position);
226
+ }
227
+ disjunctionSeenNameGroups.add(x.GroupName);
228
+ }
229
+ this.disjunctionCheckedCaptureGroups.add(x);
230
+ });
231
+ return node;
232
+ }
233
+
234
+
235
+ // Alternative ::
236
+ // [empty]
237
+ // Term Alternative
238
+ private parseAlternative(): ParseNode.RegExp.Alternative {
239
+ const Term: ParseNode.RegExp.Term[] = [];
240
+ const node: Mutable<ParseNode.RegExp.Alternative> = {
241
+ type: 'Alternative',
242
+ Term,
243
+ };
244
+ while (this.position < this.source.length && !isClosingSyntaxCharacter(this.peek())) {
245
+ Term.push(this.parseTerm());
246
+ }
247
+ return node;
248
+ }
249
+
250
+ // Term ::
251
+ // Assertion
252
+ // Atom
253
+ // Atom Quantifier
254
+ private parseTerm(): ParseNode.RegExp.Term {
255
+ const assertion = this.maybeParseAssertion();
256
+ if (assertion) {
257
+ return { type: 'Term', production: 'Assertion', Assertion: assertion };
258
+ }
259
+ const capturingParenthesesBefore = this.capturingGroups.length;
260
+ return {
261
+ type: 'Term',
262
+ production: 'Atom',
263
+ leftCapturingParenthesesBefore: this.leftCapturingParenthesesBefore,
264
+ Atom: this.parseAtom(),
265
+ Quantifier: this.maybeParseQuantifier(),
266
+ capturingParenthesesWithin: this.capturingGroups.length - capturingParenthesesBefore,
267
+ };
268
+ }
269
+
270
+ // Assertion ::
271
+ // `^`
272
+ // `$`
273
+ // `\` `b`
274
+ // `\` `B`
275
+ // `(` `?` `=` Disjunction `)`
276
+ // `(` `?` `!` Disjunction `)`
277
+ // `(` `?` `<=` Disjunction `)`
278
+ // `(` `?` `<!` Disjunction `)`
279
+ private maybeParseAssertion(): ParseNode.RegExp.Assertion | undefined {
280
+ if (this.eat('^')) {
281
+ return { type: 'Assertion', production: '^' };
282
+ }
283
+ if (this.eat('$')) {
284
+ return { type: 'Assertion', production: '$' };
285
+ }
286
+
287
+ const peek2 = this.peek(2);
288
+ if (peek2 === '\\b') {
289
+ this.position += 2;
290
+ return { type: 'Assertion', production: 'b' };
291
+ }
292
+ if (peek2 === '\\B') {
293
+ this.position += 2;
294
+ return { type: 'Assertion', production: 'B' };
295
+ }
296
+
297
+ const peek3 = this.peek(3);
298
+ if (peek3 === '(?=') {
299
+ this.position += 3;
300
+ const d = this.parseDisjunction();
301
+ this.expect(')');
302
+ return {
303
+ type: 'Assertion',
304
+ production: '?=',
305
+ Disjunction: d,
306
+ };
307
+ }
308
+ if (peek3 === '(?!') {
309
+ this.position += 3;
310
+ const d = this.parseDisjunction();
311
+ this.expect(')');
312
+ return {
313
+ type: 'Assertion',
314
+ production: '?!',
315
+ Disjunction: d,
316
+ };
317
+ }
318
+
319
+ const peek4 = this.peek(4);
320
+ if (peek4 === '(?<=') {
321
+ this.position += 4;
322
+ const d = this.parseDisjunction();
323
+ this.expect(')');
324
+ return {
325
+ type: 'Assertion',
326
+ production: '?<=',
327
+ Disjunction: d,
328
+ };
329
+ }
330
+ if (peek4 === '(?<!') {
331
+ this.position += 4;
332
+ const d = this.parseDisjunction();
333
+ this.expect(')');
334
+ return {
335
+ type: 'Assertion',
336
+ production: '?<!',
337
+ Disjunction: d,
338
+ };
339
+ }
340
+
341
+ return undefined;
342
+ }
343
+
344
+ // Quantifier ::
345
+ // QuantifierPrefix
346
+ // QuantifierPrefix `?`
347
+ // QuantifierPrefix ::
348
+ // `*`
349
+ // `+`
350
+ // `?`
351
+ // `{` DecimalDigits `}`
352
+ // `{` DecimalDigits `,` `}`
353
+ // `{` DecimalDigits `,` DecimalDigits `}`
354
+ private maybeParseQuantifier(): ParseNode.RegExp.Quantifier | undefined {
355
+ let QuantifierPrefix: ParseNode.RegExp.Quantifier['QuantifierPrefix'];
356
+
357
+ if (this.eat('*')) {
358
+ QuantifierPrefix = { type: 'QuantifierPrefix', production: '*' };
359
+ } else if (this.eat('+')) {
360
+ QuantifierPrefix = { type: 'QuantifierPrefix', production: '+' };
361
+ } else if (this.eat('?')) {
362
+ QuantifierPrefix = { type: 'QuantifierPrefix', production: '?' };
363
+ } else if (this.eat('{')) {
364
+ const quantifierPos = this.position;
365
+ const DecimalDigits_a = Number.parseInt(this.parseDecimalDigits(), 10);
366
+ let DecimalDigits_b;
367
+ if (this.eat(',')) {
368
+ if (this.test('}')) {
369
+ DecimalDigits_b = Infinity;
370
+ } else {
371
+ DecimalDigits_b = Number.parseInt(this.parseDecimalDigits(), 10);
372
+ }
373
+ // EE: It is a Syntax Error if the MV of the first DecimalDigits is strictly greater than the MV of the second DecimalDigits.
374
+ if (DecimalDigits_a > DecimalDigits_b) {
375
+ this.raise('Numbers out of order in quantifier', quantifierPos);
376
+ }
377
+ }
378
+ QuantifierPrefix = {
379
+ type: 'QuantifierPrefix',
380
+ production: '{}',
381
+ DecimalDigits_a,
382
+ DecimalDigits_b,
383
+ };
384
+ this.expect('}');
385
+ }
386
+
387
+ if (QuantifierPrefix!) {
388
+ return {
389
+ type: 'Quantifier',
390
+ QuantifierPrefix,
391
+ QuestionMark: this.eat('?'),
392
+ };
393
+ }
394
+
395
+ return undefined;
396
+ }
397
+
398
+ // Atom ::
399
+ // PatternCharacter
400
+ // `.`
401
+ // `\` AtomEscape
402
+ // CharacterClass
403
+ // `(` GroupSpecifier Disjunction `)`
404
+ // (? RegularExpressionModifiers : Disjunction )
405
+ // (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction )
406
+ private parseAtom(): ParseNode.RegExp.Atom {
407
+ if (this.eat('.')) {
408
+ return { type: 'Atom', production: '.' };
409
+ }
410
+ if (this.eat('\\')) {
411
+ return { type: 'Atom', production: 'AtomEscape', AtomEscape: this.parseAtomEscape() };
412
+ }
413
+ if (this.eat('(')) {
414
+ let node: Mutable<ParseNode.RegExp.Atom_Group | ParseNode.RegExp.Atom_Modifier>;
415
+ if (this.eat('?')) {
416
+ if (this.peek() === '<') {
417
+ this.leftCapturingParenthesesBefore += 1;
418
+ const groupNamePos = this.position + 1;
419
+ const name = this.parseGroupName();
420
+ node = {
421
+ type: 'Atom',
422
+ production: 'Group',
423
+ leftCapturingParenthesesBefore: this.leftCapturingParenthesesBefore - 1,
424
+ GroupSpecifier: name,
425
+ Disjunction: this.parseDisjunction(),
426
+ };
427
+ this.getAllGroupsWithName(name).push(node);
428
+ this.capturingGroups.push({ GroupName: name, position: groupNamePos });
429
+ } else {
430
+ const { PlusModifiers, MinusModifiers } = this.parseAtomModifiers();
431
+ node = {
432
+ type: 'Atom',
433
+ production: 'Modifier',
434
+ leftCapturingParenthesesBefore: this.leftCapturingParenthesesBefore,
435
+ AddModifiers: PlusModifiers,
436
+ RemoveModifiers: MinusModifiers,
437
+ Disjunction: this.parseDisjunction(),
438
+ };
439
+ }
440
+ } else {
441
+ this.leftCapturingParenthesesBefore += 1;
442
+ node = {
443
+ type: 'Atom',
444
+ production: 'Group',
445
+ leftCapturingParenthesesBefore: this.leftCapturingParenthesesBefore - 1,
446
+ GroupSpecifier: undefined,
447
+ Disjunction: this.parseDisjunction(),
448
+ };
449
+ this.capturingGroups.push({ GroupName: undefined, position: this.position });
450
+ }
451
+ this.expect(')');
452
+ return node;
453
+ }
454
+ if (this.test('[')) {
455
+ return {
456
+ type: 'Atom',
457
+ production: 'CharacterClass',
458
+ CharacterClass: this.parseCharacterClass(),
459
+ };
460
+ }
461
+ if (isSyntaxCharacter(this.peek())) {
462
+ this.raise(`Expected a character but got ${this.peek()}`);
463
+ }
464
+ return {
465
+ type: 'Atom',
466
+ production: 'PatternCharacter',
467
+ PatternCharacter: this.parseSourceCharacter(),
468
+ };
469
+ }
470
+
471
+ // WhatWeAreParsingHere :: (used in Atom, `<` is for named capture groups)
472
+ // [empty] [lookahead = `:` or `<`]
473
+ // RegularExpressionModifiers [lookahead = `:` or `<`]
474
+ // RegularExpressionModifiers `-` RegularExpressionModifiers [lookahead = `:` or `<`]
475
+ //
476
+ // RegularExpressionModifiers ::
477
+ // [empty]
478
+ // RegularExpressionModifiers RegularExpressionModifier
479
+ //
480
+ // RegularExpressionModifier :: one of `i` `m` `s`
481
+ private parseAtomModifiers(): Record<'PlusModifiers' | 'MinusModifiers', ParseNode.RegExp.RegularExpressionModifier[] | undefined> {
482
+ const modifierPos = this.position;
483
+ let modifiers: ParseNode.RegExp.RegularExpressionModifier[] | undefined;
484
+ const result = { PlusModifiers: modifiers, MinusModifiers: modifiers };
485
+
486
+ let seenMinus = false;
487
+ while (this.position < this.source.length) {
488
+ if (this.eat(':')) {
489
+ break;
490
+ } else if (this.test('<')) {
491
+ break;
492
+ } else if (this.eat('i')) {
493
+ modifiers ??= [];
494
+ modifiers.push('i');
495
+ } else if (this.eat('m')) {
496
+ modifiers ??= [];
497
+ modifiers.push('m');
498
+ } else if (this.eat('s')) {
499
+ modifiers ??= [];
500
+ modifiers.push('s');
501
+ } else if (this.eat('-')) {
502
+ modifiers ??= [];
503
+ if (seenMinus) {
504
+ this.raise('Unexpected - in modifiers', this.position - 1);
505
+ }
506
+ seenMinus = true;
507
+ result.PlusModifiers = modifiers;
508
+ modifiers = [];
509
+ result.MinusModifiers = modifiers;
510
+ } else {
511
+ this.raise(`${JSON.stringify(this.peek())} is not a valid modifier`);
512
+ }
513
+ }
514
+ if (!seenMinus) {
515
+ result.PlusModifiers = modifiers;
516
+ }
517
+ const allModifiers = result.PlusModifiers?.concat(result.MinusModifiers || []);
518
+ // EE: It is a Syntax Error if the source text matched by the first RegularExpressionModifiers and the source text matched by the second RegularExpressionModifiers are both empty.
519
+ if (result.PlusModifiers && result.MinusModifiers && result.PlusModifiers.length + result.MinusModifiers.length === 0) {
520
+ this.raise('PlusModifiers and MinusModifiers cannot be both empty.', this.position - 2);
521
+ }
522
+ // EE: It is a Syntax Error if the source text matched by RegularExpressionModifiers contains the same code point more than once.
523
+ // EE: It is a Syntax Error if the source text matched by the first RegularExpressionModifiers contains the same code point more than once.
524
+ // EE: It is a Syntax Error if the source text matched by the second RegularExpressionModifiers contains the same code point more than once.
525
+ // EE: It is a Syntax Error if any code point in the source text matched by the first RegularExpressionModifiers is also contained in the source text matched by the second RegularExpressionModifiers.
526
+ if (allModifiers?.length && allModifiers.length !== new Set(allModifiers).size) {
527
+ this.raise('Repeated modifiers in modifier group', modifierPos);
528
+ }
529
+ return result;
530
+ }
531
+
532
+ // AtomEscape ::
533
+ // DecimalEscape
534
+ // CharacterClassEscape
535
+ // CharacterEscape
536
+ // [+N] `k` GroupName
537
+ private parseAtomEscape(): ParseNode.RegExp.AtomEscape {
538
+ if (this.inNamedCaptureGroups && this.eat('k')) {
539
+ const groupNamePos = this.position + 1;
540
+ const GroupName = this.parseGroupName();
541
+ const node: ParseNode.RegExp.AtomEscape = {
542
+ type: 'AtomEscape',
543
+ position: groupNamePos,
544
+ production: 'CaptureGroupName',
545
+ GroupName,
546
+ groupSpecifiersThatMatchSelf: this.getAllGroupsWithName(GroupName),
547
+ };
548
+ this.groupNameRefs.push(node);
549
+ return node;
550
+ }
551
+ const CharacterClassEscape = this.maybeParseCharacterClassEscape();
552
+ if (CharacterClassEscape) {
553
+ return {
554
+ type: 'AtomEscape',
555
+ production: 'CharacterClassEscape',
556
+ CharacterClassEscape,
557
+ };
558
+ }
559
+ const DecimalEscape = this.maybeParseDecimalEscape();
560
+ if (DecimalEscape) {
561
+ return {
562
+ type: 'AtomEscape',
563
+ production: 'DecimalEscape',
564
+ DecimalEscape,
565
+ };
566
+ }
567
+ return {
568
+ type: 'AtomEscape',
569
+ production: 'CharacterEscape',
570
+ CharacterEscape: this.parseCharacterEscape(),
571
+ };
572
+ }
573
+
574
+ // CharacterEscape ::
575
+ // ControlEscape
576
+ // `c` AsciiLetter
577
+ // `0` [lookahead ∉ DecimalDigit]
578
+ // HexEscapeSequence
579
+ // RegExpUnicodeEscapeSequence
580
+ // IdentityEscape
581
+ //
582
+ // IdentityEscape ::
583
+ // [+U] SyntaxCharacter
584
+ // [+U] `/`
585
+ // [~U] SourceCharacter but not UnicodeIDContinue
586
+ private parseCharacterEscape(): ParseNode.RegExp.CharacterEscape {
587
+ switch (this.peek()) {
588
+ case 'f':
589
+ case 'n':
590
+ case 'r':
591
+ case 't':
592
+ case 'v':
593
+ return {
594
+ type: 'CharacterEscape',
595
+ production: 'ControlEscape',
596
+ ControlEscape: this.next() as 'f' | 'n' | 'r' | 't' | 'v',
597
+ };
598
+ case 'c': {
599
+ this.next();
600
+ const c = this.next();
601
+ if (c === undefined) {
602
+ if (this.inUnicodeMode) {
603
+ this.raise('Invalid identity escape');
604
+ }
605
+ return {
606
+ type: 'CharacterEscape',
607
+ production: 'IdentityEscape',
608
+ IdentityEscape: 'c' as Character,
609
+ };
610
+ }
611
+ const p = c.codePointAt(0)!;
612
+ if ((p >= 65 && p <= 90) || (p >= 97 && p <= 122)) {
613
+ return {
614
+ type: 'CharacterEscape',
615
+ production: 'AsciiLetter',
616
+ AsciiLetter: c,
617
+ };
618
+ }
619
+ if (this.inUnicodeMode) {
620
+ this.raise('Invalid identity escape', this.position - 2);
621
+ }
622
+ return {
623
+ type: 'CharacterEscape',
624
+ production: 'IdentityEscape',
625
+ IdentityEscape: c as Character,
626
+ };
627
+ }
628
+ case 'x':
629
+ if (isHexDigit(this.source[this.position + 1]) && isHexDigit(this.source[this.position + 2])) {
630
+ return {
631
+ type: 'CharacterEscape',
632
+ production: 'HexEscapeSequence',
633
+ HexEscapeSequence: this.parseHexEscapeSequence(),
634
+ };
635
+ }
636
+ if (this.inUnicodeMode) {
637
+ this.raise('Invalid identity escape');
638
+ }
639
+ this.next();
640
+ return {
641
+ type: 'CharacterEscape',
642
+ production: 'IdentityEscape',
643
+ IdentityEscape: 'x' as Character,
644
+ };
645
+ case 'u': {
646
+ const RegExpUnicodeEscapeSequence = this.maybeParseRegExpUnicodeEscapeSequence();
647
+ if (RegExpUnicodeEscapeSequence) {
648
+ return {
649
+ type: 'CharacterEscape',
650
+ production: 'RegExpUnicodeEscapeSequence',
651
+ RegExpUnicodeEscapeSequence,
652
+ };
653
+ }
654
+ if (this.inUnicodeMode) {
655
+ this.raise('Invalid identity escape');
656
+ }
657
+ this.next();
658
+ return {
659
+ type: 'CharacterEscape',
660
+ production: 'IdentityEscape',
661
+ IdentityEscape: 'u' as Character,
662
+ };
663
+ }
664
+ default: {
665
+ const c = this.peek();
666
+ if (c === '') {
667
+ this.raise('Unexpected escape');
668
+ }
669
+ if (c === '0' && !isDecimalDigit(this.source[this.position + 1])) {
670
+ this.position += 1;
671
+ return {
672
+ type: 'CharacterEscape',
673
+ production: c,
674
+ };
675
+ }
676
+ if (this.inUnicodeMode) {
677
+ if (c !== '/' && !isSyntaxCharacter(c)) {
678
+ this.raise('Invalid identity escape');
679
+ }
680
+ } else {
681
+ if (isIdentifierContinue(c)) {
682
+ this.raise('Invalid identity escape');
683
+ }
684
+ }
685
+ return {
686
+ type: 'CharacterEscape',
687
+ production: 'IdentityEscape',
688
+ IdentityEscape: this.next() as Character,
689
+ };
690
+ }
691
+ }
692
+ }
693
+
694
+ // DecimalEscape ::
695
+ // NonZeroDigit DecimalDigits? [lookahead != DecimalDigit]
696
+ private maybeParseDecimalEscape(): ParseNode.RegExp.DecimalEscape | undefined {
697
+ if (isDecimalDigit(this.source[this.position]) && this.source[this.position] !== '0') {
698
+ const start = this.position;
699
+ let buffer = this.source[this.position];
700
+ this.position += 1;
701
+ while (isDecimalDigit(this.source[this.position])) {
702
+ buffer += this.source[this.position];
703
+ this.position += 1;
704
+ }
705
+ const node: ParseNode.RegExp.DecimalEscape = {
706
+ type: 'DecimalEscape',
707
+ position: start,
708
+ value: Number.parseInt(buffer, 10),
709
+ };
710
+ this.decimalEscapes.push(node);
711
+ return node;
712
+ }
713
+ return undefined;
714
+ }
715
+
716
+ // CharacterClassEscape ::
717
+ // `d`
718
+ // `D`
719
+ // `s`
720
+ // `S`
721
+ // `w`
722
+ // `W`
723
+ // [+U] `p{` UnicodePropertyValueExpression `}`
724
+ // [+U] `P{` UnicodePropertyValueExpression `}`
725
+ private maybeParseCharacterClassEscape(): ParseNode.RegExp.CharacterClassEscape | undefined {
726
+ const peek = this.peek();
727
+ switch (peek) {
728
+ case 'd':
729
+ case 'D':
730
+ case 's':
731
+ case 'S':
732
+ case 'w':
733
+ case 'W':
734
+ this.next();
735
+ return {
736
+ type: 'CharacterClassEscape',
737
+ production: peek,
738
+ };
739
+ case 'p':
740
+ case 'P': {
741
+ if (!this.inUnicodeMode) {
742
+ return undefined;
743
+ }
744
+ this.next();
745
+ this.expect('{');
746
+ let LoneUnicodePropertyNameOrValue = '';
747
+ const namePos = this.position;
748
+ while (true) {
749
+ if (this.position >= this.source.length) {
750
+ this.raise('Invalid unicode property name or value');
751
+ }
752
+ const c = this.source[this.position];
753
+ if (c === '_' || isDecimalDigit(c)) {
754
+ this.position += 1;
755
+ LoneUnicodePropertyNameOrValue += c;
756
+ continue;
757
+ }
758
+ if (!isControlLetter(c)) {
759
+ break;
760
+ }
761
+ this.position += 1;
762
+ LoneUnicodePropertyNameOrValue += c;
763
+ }
764
+ if (LoneUnicodePropertyNameOrValue.length === 0) {
765
+ this.raise('Invalid unicode property name or value');
766
+ }
767
+ let UnicodePropertyValue;
768
+ let valuePos;
769
+ if (this.source[this.position] === '=') {
770
+ this.position += 1;
771
+ valuePos = this.position;
772
+ UnicodePropertyValue = '';
773
+ while (true) {
774
+ if (this.position >= this.source.length) {
775
+ this.raise('Invalid unicode property value', valuePos);
776
+ }
777
+ const c = this.source[this.position];
778
+ if (!isControlLetter(c) && !isDecimalDigit(c) && c !== '_') {
779
+ break;
780
+ }
781
+ this.position += 1;
782
+ UnicodePropertyValue += c;
783
+ }
784
+ if (UnicodePropertyValue.length === 0) {
785
+ this.raise('Invalid unicode property value', valuePos);
786
+ }
787
+ }
788
+ this.expect('}');
789
+ if (UnicodePropertyValue) {
790
+ const UnicodePropertyName = LoneUnicodePropertyNameOrValue;
791
+ // EE: It is a Syntax Error if the source text matched by UnicodePropertyName is not a Unicode property name or property alias listed in the “Property name and aliases” column of Table 69.
792
+ if (!(UnicodePropertyName in Table69_NonbinaryUnicodeProperties)) {
793
+ this.raise('Invalid unicode property name', namePos);
794
+ }
795
+ __ts_cast__<keyof typeof Table69_NonbinaryUnicodeProperties>(UnicodePropertyName);
796
+ if (UnicodePropertyName !== 'Script_Extensions' && UnicodePropertyName !== 'scx') {
797
+ // EE: It is a Syntax Error if the source text matched by UnicodePropertyName is neither Script_Extensions nor scx and the source text matched by UnicodePropertyValue is not a property value or property value alias for the Unicode property or property alias given by the source text matched by UnicodePropertyName listed in PropertyValueAliases.txt.
798
+ if (!((UnicodePropertyValue in PropertyValueAliases[Table69_NonbinaryUnicodeProperties[UnicodePropertyName]]))) {
799
+ this.raise('Invalid unicode property value', valuePos);
800
+ }
801
+ } else if (!(UnicodePropertyValue in PropertyValueAliases.Script)) {
802
+ // EE: It is a Syntax Error if the source text matched by UnicodePropertyName is either Script_Extensions or scx and the source text matched by UnicodePropertyValue is not a property value or property value alias for the Unicode property Script (sc) listed in PropertyValueAliases.txt.
803
+ this.raise('Invalid unicode property value', valuePos);
804
+ }
805
+ return {
806
+ type: 'CharacterClassEscape',
807
+ production: peek,
808
+ UnicodePropertyValueExpression: {
809
+ type: 'UnicodePropertyValueExpression',
810
+ production: '=',
811
+ UnicodePropertyName,
812
+ UnicodePropertyValue,
813
+ },
814
+ };
815
+ }
816
+ // UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
817
+ // EE: It is a Syntax Error if the source text matched by LoneUnicodePropertyNameOrValue is not a Unicode property value or property value alias for the General_Category (gc) property listed in PropertyValueAliases.txt, nor a binary property or binary property alias listed in the “Property name and aliases” column of Table 70, nor a binary property of strings listed in the “Property name” column of Table 71.
818
+ if (
819
+ !(LoneUnicodePropertyNameOrValue in PropertyValueAliases.General_Category)
820
+ && !(LoneUnicodePropertyNameOrValue in Table70_BinaryUnicodeProperties)
821
+ && !(LoneUnicodePropertyNameOrValue in Table71_BinaryPropertyOfStrings)
822
+ ) {
823
+ this.raise('Invalid unicode property', namePos);
824
+ }
825
+ // EE: It is a Syntax Error if the enclosing Pattern does not have a [UnicodeSetsMode] parameter and the source text matched by LoneUnicodePropertyNameOrValue is a binary property of strings listed in the “Property name” column of Table 71.
826
+ if (LoneUnicodePropertyNameOrValue in Table71_BinaryPropertyOfStrings && !this.inUnicodeSetMode) {
827
+ this.raise(`${LoneUnicodePropertyNameOrValue} can only be used with v flag`, namePos);
828
+ }
829
+ // EE: It is a Syntax Error if MayContainStrings of the UnicodePropertyValueExpression is true.
830
+ if (peek === 'P' && LoneUnicodePropertyNameOrValue in Table71_BinaryPropertyOfStrings) {
831
+ this.raise(`${LoneUnicodePropertyNameOrValue} cannot be inverted`, namePos - 2);
832
+ }
833
+ return {
834
+ type: 'CharacterClassEscape',
835
+ production: peek,
836
+ UnicodePropertyValueExpression: {
837
+ type: 'UnicodePropertyValueExpression',
838
+ production: 'Lone',
839
+ LoneUnicodePropertyNameOrValue,
840
+ },
841
+ };
842
+ }
843
+ default:
844
+ return undefined;
845
+ }
846
+ }
847
+
848
+ // CharacterClass ::
849
+ // `[` ClassContents `]`
850
+ // `[` `^` ClassContents `]`
851
+ private parseCharacterClass(): ParseNode.RegExp.CharacterClass {
852
+ this.expect('[');
853
+ const invertPos = this.position;
854
+ const invert = this.eat('^');
855
+ const node: ParseNode.RegExp.CharacterClass = {
856
+ type: 'CharacterClass',
857
+ invert,
858
+ ClassContents: this.parseClassContents(),
859
+ };
860
+ // CharacterClass :: [^ ClassContents ]
861
+ // EE: It is a Syntax Error if MayContainStrings of the ClassContents is true.
862
+ if (invert && MayContainStrings(node.ClassContents)) {
863
+ this.raise('This class cannot be inverted', invertPos);
864
+ }
865
+ this.expect(']');
866
+ return node;
867
+ }
868
+
869
+ // ClassContents
870
+ // [empty]
871
+ // [~UnicodeSetMode] NonemptyClassRanges
872
+ // [+UnicodeSetMode] ClassSetExpression
873
+ private parseClassContents(): ParseNode.RegExp.ClassContents {
874
+ // [empty]
875
+ if (this.test(']')) {
876
+ return { type: 'ClassContents', production: 'Empty' };
877
+ }
878
+ if (this.inUnicodeSetMode) {
879
+ return {
880
+ type: 'ClassContents',
881
+ production: 'ClassSetExpression',
882
+ ClassSetExpression: this.parseClassSetExpression(),
883
+ };
884
+ } else {
885
+ return {
886
+ type: 'ClassContents',
887
+ production: 'NonEmptyClassRanges',
888
+ NonemptyClassRanges: this.parseNonemptyClassRanges(),
889
+ };
890
+ }
891
+ }
892
+
893
+ // NonemptyClassRanges ::
894
+ // ClassAtom
895
+ // ClassAtom NonemptyClassRangesNoDash
896
+ // ClassAtom `-` ClassAtom [empty]
897
+ // ClassAtom `-` ClassAtom NonemptyClassRanges
898
+ private parseNonemptyClassRanges(): ParseNode.RegExp.ClassRange[] {
899
+ Assert(!this.inUnicodeSetMode);
900
+ const ranges: Mutable<ParseNode.RegExp.NonEmptyClassRanges> = [];
901
+ while (!this.test(']')) {
902
+ if (this.position >= this.source.length) {
903
+ this.raise('Unexpected end of CharacterClass');
904
+ }
905
+ const atomPos = this.position;
906
+ const atom = this.parseClassAtom();
907
+ if (this.eat('-')) {
908
+ if (this.test(']')) {
909
+ // [\w-] is valid (\w ++ "-")
910
+ ranges.push(atom);
911
+ ranges.push({ type: 'ClassAtom', production: '-' });
912
+ } else {
913
+ // EE: It is a Syntax Error if IsCharacterClass of the first ClassAtom is true or IsCharacterClass of the second ClassAtom is true.
914
+ if (atom.production === 'ClassEscape' && atom.ClassEscape.production === 'CharacterClassEscape') {
915
+ this.raise('Invalid class range', atomPos);
916
+ }
917
+ const atom2Pos = this.position;
918
+ const atom2 = this.parseClassAtom();
919
+ // EE: It is a Syntax Error if IsCharacterClass of the first ClassAtom is false, IsCharacterClass of the second ClassAtom is false, and the CharacterValue of the first ClassAtom is strictly greater than the CharacterValue of the second ClassAtom.
920
+ // EE: It is a Syntax Error if IsCharacterClass of ClassAtomNoDash is false, IsCharacterClass of ClassAtom is false, and the CharacterValue of ClassAtomNoDash is strictly greater than the CharacterValue of ClassAtom.
921
+ if (!IsCharacterClass(atom) && !IsCharacterClass(atom2) && CharacterValue(atom as CharacterValueAcceptNode) > CharacterValue(atom2 as CharacterValueAcceptNode)) {
922
+ this.raise('Invalid class range', atomPos);
923
+ }
924
+ // EE: It is a Syntax Error if IsCharacterClass of ClassAtomNoDash is true or IsCharacterClass of ClassAtom is true.
925
+ if (IsCharacterClass(atom)) {
926
+ this.raise('Invalid class range', atomPos);
927
+ }
928
+ if (IsCharacterClass(atom2)) {
929
+ this.raise('Invalid class range', atom2Pos);
930
+ }
931
+ ranges.push([atom, atom2]);
932
+ }
933
+ } else {
934
+ ranges.push(atom);
935
+ }
936
+ }
937
+ return ranges;
938
+ }
939
+
940
+ // ClassAtom ::
941
+ // `-`
942
+ // ClassAtomNoDash
943
+ // ClassAtomNoDash ::
944
+ // SourceCharacter but not one of `\` or `]` or `-`
945
+ // `\` ClassEscape
946
+ // ClassEscape :
947
+ // `b`
948
+ // [+U] `-`
949
+ // CharacterClassEscape
950
+ // CharacterEscape
951
+ private parseClassAtom(): ParseNode.RegExp.ClassAtom {
952
+ if (this.eat('\\')) {
953
+ if (this.eat('b')) {
954
+ return { type: 'ClassAtom', production: 'ClassEscape', ClassEscape: { type: 'ClassEscape', production: 'b' } };
955
+ }
956
+ if (this.inUnicodeMode && this.eat('-')) {
957
+ return { type: 'ClassAtom', production: '-' };
958
+ }
959
+ const CharacterClassEscape = this.maybeParseCharacterClassEscape();
960
+ if (CharacterClassEscape) {
961
+ return {
962
+ type: 'ClassAtom',
963
+ production: 'ClassEscape',
964
+ ClassEscape: { type: 'ClassEscape', production: 'CharacterClassEscape', CharacterClassEscape },
965
+ };
966
+ }
967
+ return {
968
+ type: 'ClassAtom',
969
+ production: 'ClassEscape',
970
+ ClassEscape: {
971
+ type: 'ClassEscape',
972
+ production: 'CharacterEscape',
973
+ CharacterEscape: this.parseCharacterEscape(),
974
+ },
975
+ };
976
+ }
977
+ return {
978
+ type: 'ClassAtom',
979
+ production: 'SourceCharacter',
980
+ SourceCharacter: this.parseSourceCharacter(),
981
+ };
982
+ }
983
+
984
+ private parseSourceCharacter(): Character {
985
+ if (this.inUnicodeMode || this.inUnicodeSetMode) {
986
+ const lead = this.source.charCodeAt(this.position);
987
+ const trail = this.source.charCodeAt(this.position + 1);
988
+ if (trail && isLeadingSurrogate(lead) && isTrailingSurrogate(trail)) {
989
+ return (this.next() + this.next()) as UnicodeCharacter;
990
+ }
991
+ }
992
+ return this.next() as Character;
993
+ }
994
+
995
+ private parseGroupName(): string {
996
+ this.expect('<');
997
+ const RegExpIdentifierName = this.parseRegExpIdentifierName();
998
+ this.expect('>');
999
+ return RegExpIdentifierName;
1000
+ }
1001
+
1002
+ // RegExpIdentifierName ::
1003
+ // RegExpIdentifierStart
1004
+ // RegExpIdentifierName RegExpIdentifierPart
1005
+ private parseRegExpIdentifierName(): string {
1006
+ let buffer = '';
1007
+ let check = isIdentifierStart;
1008
+ while (this.position < this.source.length) {
1009
+ const c = this.source[this.position];
1010
+ const code = c.charCodeAt(0);
1011
+ if (c === '\\') {
1012
+ this.position += 1;
1013
+ const RegExpUnicodeEscapeSequence = this.scope({ UnicodeMode: true }, () => this.maybeParseRegExpUnicodeEscapeSequence());
1014
+ if (!RegExpUnicodeEscapeSequence) {
1015
+ this.raise('Invalid unicode escape');
1016
+ }
1017
+ const raw = String.fromCodePoint(CharacterValue(RegExpUnicodeEscapeSequence));
1018
+ // EE: It is a Syntax Error if the CharacterValue of RegExpUnicodeEscapeSequence is not the numeric value of some code point matched by the IdentifierStartChar lexical grammar production.
1019
+ // EE: It is a Syntax Error if the CharacterValue of RegExpUnicodeEscapeSequence is not the numeric value of some code point matched by the IdentifierPartChar lexical grammar production.
1020
+ // EE: It is a Syntax Error if the RegExpIdentifierCodePoint of RegExpIdentifierPart is not matched by the UnicodeIDContinue lexical grammar production.
1021
+ if (!check(raw)) {
1022
+ this.raise('Invalid identifier escape');
1023
+ }
1024
+ buffer += raw;
1025
+ } else if (isLeadingSurrogate(code)) {
1026
+ // EE: It is a Syntax Error if the RegExpIdentifierCodePoint of RegExpIdentifierStart is not matched by the UnicodeIDStart lexical grammar production.
1027
+ const lowSurrogate = this.source.charCodeAt(this.position + 1);
1028
+ if (!isTrailingSurrogate(lowSurrogate)) {
1029
+ this.raise('Invalid trailing surrogate');
1030
+ }
1031
+ const codePoint = UTF16SurrogatePairToCodePoint(code, lowSurrogate);
1032
+ const raw = String.fromCodePoint(codePoint);
1033
+ if (!check(raw)) {
1034
+ this.raise('Invalid surrogate pair');
1035
+ }
1036
+ this.position += 2;
1037
+ buffer += raw;
1038
+ } else if (check(c)) {
1039
+ buffer += c;
1040
+ this.position += 1;
1041
+ } else {
1042
+ break;
1043
+ }
1044
+ check = isIdentifierPart;
1045
+ }
1046
+ if (buffer.length === 0) {
1047
+ this.raise('Invalid empty identifier');
1048
+ }
1049
+ return buffer;
1050
+ }
1051
+
1052
+ // DecimalDigits ::
1053
+ // DecimalDigit
1054
+ // DecimalDigits DecimalDigit
1055
+ private parseDecimalDigits(): string {
1056
+ let n = '';
1057
+ if (!isDecimalDigit(this.peek())) {
1058
+ this.raise('Invalid decimal digits');
1059
+ }
1060
+ while (isDecimalDigit(this.peek())) {
1061
+ n += this.next();
1062
+ }
1063
+ return n;
1064
+ }
1065
+
1066
+ // HexEscapeSequence ::
1067
+ // `x` HexDigit HexDigit
1068
+ private parseHexEscapeSequence(): ParseNode.RegExp.HexEscapeSequence {
1069
+ this.expect('x');
1070
+ const HexDigit_a = this.next();
1071
+ if (!isHexDigit(HexDigit_a)) {
1072
+ this.raise('Not a hex digit');
1073
+ }
1074
+ const HexDigit_b = this.next();
1075
+ if (!isHexDigit(HexDigit_b)) {
1076
+ this.raise('Not a hex digit');
1077
+ }
1078
+ return {
1079
+ type: 'HexEscapeSequence',
1080
+ HexDigit_a,
1081
+ HexDigit_b,
1082
+ };
1083
+ }
1084
+
1085
+ private scanHex(length: number) {
1086
+ if (length === 0) {
1087
+ this.raise('Invalid code point');
1088
+ }
1089
+ let n = 0;
1090
+ let oldN = 0;
1091
+ for (let i = 0; i < length; i += 1) {
1092
+ const c = this.source[this.position];
1093
+ if (isHexDigit(c)) {
1094
+ this.position += 1;
1095
+ oldN = n;
1096
+ n = (n << 4) | Number.parseInt(c, 16);
1097
+ if (oldN > n) {
1098
+ // overflow
1099
+ this.raise('Invalid hex digit');
1100
+ }
1101
+ } else {
1102
+ this.raise('Invalid hex digit');
1103
+ }
1104
+ }
1105
+ return n;
1106
+ }
1107
+
1108
+ // RegExpUnicodeEscapeSequence ::
1109
+ // [+U] `u` HexLeadSurrogate `\u` HexTrailSurrogate
1110
+ // [+U] `u` HexLeadSurrogate
1111
+ // [+U] `u` HexTrailSurrogate
1112
+ // [+U] `u` HexNonSurrogate
1113
+ // [~U] `u` Hex4Digits
1114
+ // [+U] `u{` CodePoint `}`
1115
+ private maybeParseRegExpUnicodeEscapeSequence(): ParseNode.RegExp.RegExpUnicodeEscapeSequence | undefined {
1116
+ const start = this.position;
1117
+ if (!this.eat('u')) {
1118
+ this.position = start;
1119
+ return undefined;
1120
+ }
1121
+ if (this.inUnicodeMode && this.eat('{')) {
1122
+ const end = this.source.indexOf('}' as Character, this.position);
1123
+ if (end === -1) {
1124
+ this.raise('Invalid code point');
1125
+ }
1126
+ const code = this.scanHex(end - this.position);
1127
+ if (code > 0x10FFFF) {
1128
+ this.raise('Invalid code point');
1129
+ }
1130
+ this.position += 1;
1131
+ return {
1132
+ type: 'RegExpUnicodeEscapeSequence',
1133
+ CodePoint: code,
1134
+ };
1135
+ }
1136
+ let lead;
1137
+ try {
1138
+ lead = this.scanHex(4);
1139
+ } catch {
1140
+ this.position = start;
1141
+ return undefined;
1142
+ }
1143
+ if (this.inUnicodeMode && isLeadingSurrogate(lead)) {
1144
+ const back = this.position;
1145
+ if (this.eat('\\u')) {
1146
+ let trail;
1147
+ try {
1148
+ trail = this.scanHex(4);
1149
+ if (isTrailingSurrogate(trail)) {
1150
+ return {
1151
+ type: 'RegExpUnicodeEscapeSequence',
1152
+ HexLeadSurrogate: lead,
1153
+ HexTrailSurrogate: trail,
1154
+ };
1155
+ }
1156
+ } catch {
1157
+ }
1158
+ this.position = back;
1159
+ }
1160
+ return {
1161
+ type: 'RegExpUnicodeEscapeSequence',
1162
+ HexLeadSurrogate: lead,
1163
+ };
1164
+ }
1165
+ return {
1166
+ type: 'RegExpUnicodeEscapeSequence',
1167
+ Hex4Digits: lead,
1168
+ };
1169
+ }
1170
+
1171
+ // ClassSetExpression ::
1172
+ // ClassUnion
1173
+ // ClassIntersection
1174
+ // ClassSubtraction
1175
+ private parseClassSetExpression(): ParseNode.RegExp.ClassSetExpression {
1176
+ Assert(this.inUnicodeSetMode);
1177
+
1178
+ const oldPos = this.position;
1179
+ const left = this.maybeParseClassSetCharacter();
1180
+ const peek2 = this.peek(2);
1181
+ // ClassUnion :: ClassSetRange
1182
+ if (left !== undefined && peek2 !== '--' && peek2[0] === '-') {
1183
+ this.position = oldPos;
1184
+ return this.parseClassUnion();
1185
+ }
1186
+ // ClassUnion :: ClassSetOperand ...
1187
+ // ClassIntersection :: ClassSetOperand ...
1188
+ // ClassSubtraction :: ClassSetOperand ...
1189
+ const leftReparsed = this.parseClassSetOperand(left);
1190
+ if (this.eat('&&')) {
1191
+ return this.parseClassIntersectionOrSubtraction('&&', leftReparsed);
1192
+ }
1193
+ if (this.eat('--')) {
1194
+ return this.parseClassIntersectionOrSubtraction('--', leftReparsed);
1195
+ }
1196
+ return this.parseClassUnion(leftReparsed);
1197
+ }
1198
+
1199
+ private parseClassUnion(operand?: ParseNode.RegExp.ClassSetOperand): ParseNode.RegExp.ClassUnion {
1200
+ const union: Array<ParseNode.RegExp.ClassSetOperand | ParseNode.RegExp.ClassSetRange> = operand ? [operand] : [];
1201
+ while (true) {
1202
+ const charPos = this.position;
1203
+ const char = this.maybeParseClassSetCharacter();
1204
+ if (char !== undefined) {
1205
+ // ClassSetRange
1206
+ if (this.eat('-')) {
1207
+ const char2 = this.maybeParseClassSetCharacter();
1208
+ if (char2 === undefined) {
1209
+ this.raise('Unterminated range');
1210
+ }
1211
+ // EE: It is a Syntax Error if the CharacterValue of the first ClassSetCharacter is strictly greater than the CharacterValue of the second ClassSetCharacter.
1212
+ if (CharacterValue(char) > CharacterValue(char2)) {
1213
+ this.raise(`Invalid range: ${String.fromCodePoint(CharacterValue(char))} is bigger than ${String.fromCodePoint(CharacterValue(char2))}`, charPos);
1214
+ }
1215
+ union.push({ type: 'ClassSetRange', left: char, right: char2 });
1216
+ continue;
1217
+ }
1218
+ // ClassSetCharacter
1219
+ union.push({ type: 'ClassSetOperand', production: 'ClassSetCharacter', ClassSetCharacter: char });
1220
+ } else if (this.peek() === '\\' || this.peek() === '[') {
1221
+ // NestedClass or ClassStringDisjunction
1222
+ union.push(this.parseClassSetOperand());
1223
+ } else {
1224
+ break;
1225
+ }
1226
+ }
1227
+ return { type: 'ClassUnion', union };
1228
+ }
1229
+
1230
+ private parseClassIntersectionOrSubtraction(type: '&&' | '--', operand?: ParseNode.RegExp.ClassSetOperand): ParseNode.RegExp.ClassIntersection | ParseNode.RegExp.ClassSubtraction {
1231
+ const tokens = operand ? [operand] : [];
1232
+ while (true) {
1233
+ tokens.push(this.parseClassSetOperand());
1234
+ if (this.eat(type)) {
1235
+ continue;
1236
+ }
1237
+ break;
1238
+ }
1239
+ Assert(tokens.length >= 2);
1240
+ return { type: type === '&&' ? 'ClassIntersection' : 'ClassSubtraction', operands: tokens };
1241
+ }
1242
+
1243
+ private parseClassSetOperand(left?: ParseNode.RegExp.ClassSetCharacter): ParseNode.RegExp.ClassSetOperand {
1244
+ Assert(this.inUnicodeSetMode);
1245
+ if (left !== undefined) {
1246
+ return { type: 'ClassSetOperand', production: 'ClassSetCharacter', ClassSetCharacter: left };
1247
+ }
1248
+ // ClassSetOperand :: NestedClass :: [ [lookahead ≠ ^] ClassContents[+UnicodeMode, +UnicodeSetsMode] ]
1249
+ // ClassSetOperand :: NestedClass :: [^ ClassContents[+UnicodeMode, +UnicodeSetsMode] ]
1250
+ if (this.eat('[')) {
1251
+ const invertPos = this.position;
1252
+ const invert = this.eat('^');
1253
+ const ClassContents = this.scope(
1254
+ { UnicodeMode: true, UnicodeSetsMode: true },
1255
+ () => this.parseClassContents(),
1256
+ );
1257
+ // NestedClass :: [^ ClassContents ]
1258
+ // EE: It is a Syntax Error if MayContainStrings of the ClassContents is true.
1259
+ if (invert && MayContainStrings(ClassContents)) {
1260
+ this.raise('This class cannot be inverted', invertPos);
1261
+ }
1262
+ this.expect(']');
1263
+ return {
1264
+ type: 'ClassSetOperand',
1265
+ production: 'NestedClass',
1266
+ NestedClass: {
1267
+ type: 'NestedClass', production: 'ClassContents', invert, ClassContents,
1268
+ },
1269
+ };
1270
+ }
1271
+ if (this.eat('\\')) {
1272
+ // ClassSetOperand :: ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }
1273
+ if (this.eat('q')) {
1274
+ this.expect('{');
1275
+ const ClassStringDisjunction = this.parseClassStringDisjunctionContents();
1276
+ this.expect('}');
1277
+ return {
1278
+ type: 'ClassSetOperand',
1279
+ production: 'ClassStringDisjunction',
1280
+ ClassStringDisjunction,
1281
+ };
1282
+ }
1283
+ // ClassSetOperand :: NestedClass :: \ CharacterClassEscape[+UnicodeMode]
1284
+ const escape = this.scope(
1285
+ { UnicodeMode: true },
1286
+ () => this.maybeParseCharacterClassEscape(),
1287
+ );
1288
+ if (!escape) {
1289
+ this.raise(`Expect a CharacterClassEscape but ${this.peek()}`);
1290
+ }
1291
+ return {
1292
+ type: 'ClassSetOperand',
1293
+ production: 'NestedClass',
1294
+ NestedClass: { type: 'NestedClass', production: 'CharacterClassEscape', CharacterClassEscape: escape },
1295
+ };
1296
+ }
1297
+ const ClassSetCharacter = this.maybeParseClassSetCharacter();
1298
+ if (!ClassSetCharacter) {
1299
+ this.raise(`Unexpected ${this.peek()}`);
1300
+ }
1301
+ return { type: 'ClassSetOperand', production: 'ClassSetCharacter', ClassSetCharacter };
1302
+ }
1303
+
1304
+ // ClassSetCharacter ::
1305
+ // [lookahead ∉ ClassSetReservedDoublePunctuator] SourceCharacter but not ClassSetSyntaxCharacter
1306
+ // \ CharacterEscape[+UnicodeMode]
1307
+ // \ ClassSetReservedPunctuator
1308
+ // \b
1309
+ private maybeParseClassSetCharacter(): ParseNode.RegExp.ClassSetCharacter | undefined {
1310
+ Assert(this.inUnicodeSetMode);
1311
+ const nextTwo = this.peek(2);
1312
+ // ClassSetCharacter :: \b
1313
+ if (nextTwo === '\\b') {
1314
+ this.position += 2;
1315
+ return { type: 'ClassSetCharacter', production: 'UnicodeCharacter', UnicodeCharacter: '\\b' as UnicodeCharacter };
1316
+ }
1317
+
1318
+ // ClassSetCharacter :: [lookahead ∉ ClassSetReservedDoublePunctuator] SourceCharacter but not ClassSetSyntaxCharacter
1319
+ if (
1320
+ // [lookahead ∉ ClassSetReservedDoublePunctuator]
1321
+ !'&& !! ## $$ %% ** ++ ,, .. :: ;; << == >> ?? @@ ^^ `` ~~'.split(' ').includes(nextTwo)
1322
+ // and not ClassSetSyntaxCharacter
1323
+ && !'( ) [ ] { } / - \\ |'.split(' ').includes(nextTwo[0])
1324
+ ) {
1325
+ // parse SourceCharacter
1326
+ return { type: 'ClassSetCharacter', production: 'UnicodeCharacter', UnicodeCharacter: this.parseSourceCharacter() as UnicodeCharacter };
1327
+ }
1328
+
1329
+ // all production left requires a \ at the beginning
1330
+ if (nextTwo[0] !== '\\') {
1331
+ return undefined;
1332
+ }
1333
+
1334
+ // \ ClassSetReservedPunctuator
1335
+ if ('& - ! # % , : ; < = > @ ` ~'.split(' ').includes(nextTwo[1])) {
1336
+ this.position += 2;
1337
+ return { type: 'ClassSetCharacter', production: 'UnicodeCharacter', UnicodeCharacter: nextTwo[1] as UnicodeCharacter };
1338
+ }
1339
+
1340
+ // anything that can start a Character Escape
1341
+ if ('fnrtvc0xu/^$\\.*+?()[]{}|'.includes(nextTwo[1])) {
1342
+ this.position += 1;
1343
+ return { type: 'ClassSetCharacter', production: 'CharacterEscape', CharacterEscape: this.scope({ UnicodeMode: true }, () => this.parseCharacterEscape()) };
1344
+ }
1345
+ return undefined;
1346
+ }
1347
+
1348
+ // ClassStringDisjunctionContents is a list of ClassString that separated by |.
1349
+ private parseClassStringDisjunctionContents(): ParseNode.RegExp.ClassStringDisjunction {
1350
+ const parsed: ParseNode.RegExp.ClassSetCharacter[][] = [];
1351
+ let current: ParseNode.RegExp.ClassSetCharacter[] = [];
1352
+ while (true) {
1353
+ const parse = this.maybeParseClassSetCharacter();
1354
+ if (parse) {
1355
+ current.push(parse);
1356
+ } else if (this.eat('|')) {
1357
+ parsed.push(current);
1358
+ current = [];
1359
+ } else {
1360
+ parsed.push(current);
1361
+ break;
1362
+ }
1363
+ }
1364
+ return { type: 'ClassStringDisjunction', ClassString: parsed };
1365
+ }
1366
+ }
1367
+
1368
+ /** https://tc39.es/ecma262/#sec-static-semantics-maycontainstrings */
1369
+ function MayContainStrings(node: ParseNode.RegExp.UnicodePropertyValueExpression | ParseNode.RegExp.ClassContents | ParseNode.RegExp.ClassSetExpression | ParseNode.RegExp.ClassSetOperand | ParseNode.RegExp.ClassSetRange | ParseNode.RegExp.NestedClass): boolean {
1370
+ switch (node.type) {
1371
+ case 'ClassContents':
1372
+ if (node.production === 'ClassSetExpression') {
1373
+ return MayContainStrings(node.ClassSetExpression);
1374
+ }
1375
+ return false;
1376
+ case 'UnicodePropertyValueExpression':
1377
+ if (node.production === 'Lone') {
1378
+ if (node.LoneUnicodePropertyNameOrValue in Table71_BinaryPropertyOfStrings) {
1379
+ return true;
1380
+ }
1381
+ }
1382
+ return false;
1383
+ case 'ClassUnion':
1384
+ return node.union.some(MayContainStrings);
1385
+ case 'ClassIntersection':
1386
+ return node.operands.some(MayContainStrings);
1387
+ case 'ClassSubtraction':
1388
+ return node.operands.some(MayContainStrings);
1389
+ case 'ClassSetRange':
1390
+ return false;
1391
+ case 'ClassSetOperand':
1392
+ if (node.production === 'ClassSetCharacter') {
1393
+ return false;
1394
+ } else if (node.production === 'NestedClass') {
1395
+ return MayContainStrings(node.NestedClass);
1396
+ } else if (node.production === 'ClassStringDisjunction') {
1397
+ return node.ClassStringDisjunction.ClassString.some((x) => x.length !== 1);
1398
+ }
1399
+ unreachable(node);
1400
+ case 'NestedClass':
1401
+ if (node.production === 'CharacterClassEscape') {
1402
+ if (node.CharacterClassEscape.production !== 'p') {
1403
+ return false;
1404
+ }
1405
+ return MayContainStrings(node.CharacterClassEscape.UnicodePropertyValueExpression);
1406
+ } else if (node.production === 'ClassContents') {
1407
+ return MayContainStrings(node.ClassContents);
1408
+ }
1409
+ unreachable(node);
1410
+ default:
1411
+ unreachable(node);
1412
+ }
1413
+ }