@ibyar/expressions 0.8.5 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/api/abstract.d.ts +1 -0
  2. package/api/abstract.d.ts.map +1 -0
  3. package/api/abstract.js +12 -0
  4. package/api/abstract.js.map +1 -1
  5. package/api/class/class.d.ts +1 -0
  6. package/api/class/class.d.ts.map +1 -0
  7. package/api/class/class.js +563 -482
  8. package/api/class/class.js.map +1 -1
  9. package/api/class/decorator.d.ts +1 -0
  10. package/api/class/decorator.d.ts.map +1 -0
  11. package/api/class/decorator.js +49 -42
  12. package/api/class/decorator.js.map +1 -1
  13. package/api/computing/call.d.ts +1 -0
  14. package/api/computing/call.d.ts.map +1 -0
  15. package/api/computing/call.js +79 -70
  16. package/api/computing/call.js.map +1 -1
  17. package/api/computing/debugger.d.ts +1 -0
  18. package/api/computing/debugger.d.ts.map +1 -0
  19. package/api/computing/debugger.js +36 -29
  20. package/api/computing/debugger.js.map +1 -1
  21. package/api/computing/new.d.ts +1 -0
  22. package/api/computing/new.d.ts.map +1 -0
  23. package/api/computing/new.js +77 -69
  24. package/api/computing/new.js.map +1 -1
  25. package/api/computing/rest.d.ts +1 -0
  26. package/api/computing/rest.d.ts.map +1 -0
  27. package/api/computing/rest.js +50 -43
  28. package/api/computing/rest.js.map +1 -1
  29. package/api/computing/return.d.ts +1 -0
  30. package/api/computing/return.d.ts.map +1 -0
  31. package/api/computing/return.js +48 -41
  32. package/api/computing/return.js.map +1 -1
  33. package/api/computing/spread.d.ts +1 -0
  34. package/api/computing/spread.d.ts.map +1 -0
  35. package/api/computing/spread.js +66 -59
  36. package/api/computing/spread.js.map +1 -1
  37. package/api/computing/throw.d.ts +1 -0
  38. package/api/computing/throw.d.ts.map +1 -0
  39. package/api/computing/throw.js +204 -178
  40. package/api/computing/throw.js.map +1 -1
  41. package/api/computing/yield.d.ts +1 -0
  42. package/api/computing/yield.d.ts.map +1 -0
  43. package/api/computing/yield.js +56 -48
  44. package/api/computing/yield.js.map +1 -1
  45. package/api/definition/array.d.ts +1 -0
  46. package/api/definition/array.d.ts.map +1 -0
  47. package/api/definition/array.js +139 -124
  48. package/api/definition/array.js.map +1 -1
  49. package/api/definition/bind.d.ts +1 -0
  50. package/api/definition/bind.d.ts.map +1 -0
  51. package/api/definition/bind.js +81 -71
  52. package/api/definition/bind.js.map +1 -1
  53. package/api/definition/comment.d.ts +1 -0
  54. package/api/definition/comment.d.ts.map +1 -0
  55. package/api/definition/comment.js +40 -33
  56. package/api/definition/comment.js.map +1 -1
  57. package/api/definition/function.d.ts +1 -0
  58. package/api/definition/function.d.ts.map +1 -0
  59. package/api/definition/function.js +484 -447
  60. package/api/definition/function.js.map +1 -1
  61. package/api/definition/member.d.ts +1 -0
  62. package/api/definition/member.d.ts.map +1 -0
  63. package/api/definition/member.js +100 -90
  64. package/api/definition/member.js.map +1 -1
  65. package/api/definition/object.d.ts +1 -0
  66. package/api/definition/object.d.ts.map +1 -0
  67. package/api/definition/object.js +230 -202
  68. package/api/definition/object.js.map +1 -1
  69. package/api/definition/statement.d.ts +1 -0
  70. package/api/definition/statement.d.ts.map +1 -0
  71. package/api/definition/statement.js +52 -45
  72. package/api/definition/statement.js.map +1 -1
  73. package/api/definition/values.d.ts +1 -0
  74. package/api/definition/values.d.ts.map +1 -0
  75. package/api/definition/values.js +210 -167
  76. package/api/definition/values.js.map +1 -1
  77. package/api/deserialize/deserialize.d.ts +2 -1
  78. package/api/deserialize/deserialize.d.ts.map +1 -0
  79. package/api/deserialize/deserialize.js +5 -7
  80. package/api/deserialize/deserialize.js.map +1 -1
  81. package/api/deserialize/type-store.d.ts +1 -0
  82. package/api/deserialize/type-store.d.ts.map +1 -0
  83. package/api/expression.d.ts +1 -0
  84. package/api/expression.d.ts.map +1 -0
  85. package/api/index.d.ts +1 -0
  86. package/api/index.d.ts.map +1 -0
  87. package/api/module/common.d.ts +1 -0
  88. package/api/module/common.d.ts.map +1 -0
  89. package/api/module/common.js +59 -51
  90. package/api/module/common.js.map +1 -1
  91. package/api/module/export.d.ts +1 -0
  92. package/api/module/export.d.ts.map +1 -0
  93. package/api/module/export.js +327 -294
  94. package/api/module/export.js.map +1 -1
  95. package/api/module/import.d.ts +1 -0
  96. package/api/module/import.d.ts.map +1 -0
  97. package/api/module/import.js +298 -258
  98. package/api/module/import.js.map +1 -1
  99. package/api/operators/assignment.d.ts +1 -0
  100. package/api/operators/assignment.d.ts.map +1 -0
  101. package/api/operators/assignment.js +84 -75
  102. package/api/operators/assignment.js.map +1 -1
  103. package/api/operators/await.d.ts +1 -0
  104. package/api/operators/await.d.ts.map +1 -0
  105. package/api/operators/await.js +50 -43
  106. package/api/operators/await.js.map +1 -1
  107. package/api/operators/binary.d.ts +1 -0
  108. package/api/operators/binary.d.ts.map +1 -0
  109. package/api/operators/binary.js +74 -64
  110. package/api/operators/binary.js.map +1 -1
  111. package/api/operators/chaining.d.ts +1 -0
  112. package/api/operators/chaining.d.ts.map +1 -0
  113. package/api/operators/chaining.js +52 -45
  114. package/api/operators/chaining.js.map +1 -1
  115. package/api/operators/comma.d.ts +1 -0
  116. package/api/operators/comma.d.ts.map +1 -0
  117. package/api/operators/comma.js +49 -42
  118. package/api/operators/comma.js.map +1 -1
  119. package/api/operators/grouping.d.ts +1 -0
  120. package/api/operators/grouping.d.ts.map +1 -0
  121. package/api/operators/grouping.js +47 -40
  122. package/api/operators/grouping.js.map +1 -1
  123. package/api/operators/logical.d.ts +1 -0
  124. package/api/operators/logical.d.ts.map +1 -0
  125. package/api/operators/logical.js +47 -37
  126. package/api/operators/logical.js.map +1 -1
  127. package/api/operators/pipeline.d.ts +1 -0
  128. package/api/operators/pipeline.d.ts.map +1 -0
  129. package/api/operators/pipeline.js +91 -82
  130. package/api/operators/pipeline.js.map +1 -1
  131. package/api/operators/ternary.d.ts +1 -0
  132. package/api/operators/ternary.d.ts.map +1 -0
  133. package/api/operators/ternary.js +65 -56
  134. package/api/operators/ternary.js.map +1 -1
  135. package/api/operators/types.d.ts +1 -0
  136. package/api/operators/types.d.ts.map +1 -0
  137. package/api/operators/unary.d.ts +1 -0
  138. package/api/operators/unary.d.ts.map +1 -0
  139. package/api/operators/unary.js +93 -82
  140. package/api/operators/unary.js.map +1 -1
  141. package/api/operators/update.d.ts +1 -0
  142. package/api/operators/update.d.ts.map +1 -0
  143. package/api/operators/update.js +74 -62
  144. package/api/operators/update.js.map +1 -1
  145. package/api/program.d.ts +1 -0
  146. package/api/program.d.ts.map +1 -0
  147. package/api/program.js +49 -41
  148. package/api/program.js.map +1 -1
  149. package/api/statement/control/block.d.ts +1 -0
  150. package/api/statement/control/block.d.ts.map +1 -0
  151. package/api/statement/control/block.js +61 -54
  152. package/api/statement/control/block.js.map +1 -1
  153. package/api/statement/control/empty.d.ts +1 -1
  154. package/api/statement/control/empty.d.ts.map +1 -0
  155. package/api/statement/control/empty.js +39 -34
  156. package/api/statement/control/empty.js.map +1 -1
  157. package/api/statement/control/if.d.ts +1 -0
  158. package/api/statement/control/if.d.ts.map +1 -0
  159. package/api/statement/control/if.js +75 -66
  160. package/api/statement/control/if.js.map +1 -1
  161. package/api/statement/control/switch.d.ts +1 -0
  162. package/api/statement/control/switch.d.ts.map +1 -0
  163. package/api/statement/control/switch.js +168 -144
  164. package/api/statement/control/switch.js.map +1 -1
  165. package/api/statement/control/terminate.d.ts +1 -2
  166. package/api/statement/control/terminate.d.ts.map +1 -0
  167. package/api/statement/control/terminate.js +105 -81
  168. package/api/statement/control/terminate.js.map +1 -1
  169. package/api/statement/control/with.d.ts +1 -0
  170. package/api/statement/control/with.d.ts.map +1 -0
  171. package/api/statement/control/with.js +68 -60
  172. package/api/statement/control/with.js.map +1 -1
  173. package/api/statement/declarations/declares.d.ts +1 -0
  174. package/api/statement/declarations/declares.d.ts.map +1 -0
  175. package/api/statement/declarations/declares.js +140 -123
  176. package/api/statement/declarations/declares.js.map +1 -1
  177. package/api/statement/iterations/for.d.ts +1 -0
  178. package/api/statement/iterations/for.d.ts.map +1 -0
  179. package/api/statement/iterations/for.js +320 -280
  180. package/api/statement/iterations/for.js.map +1 -1
  181. package/api/statement/iterations/while.d.ts +1 -0
  182. package/api/statement/iterations/while.d.ts.map +1 -0
  183. package/api/statement/iterations/while.js +144 -127
  184. package/api/statement/iterations/while.js.map +1 -1
  185. package/api/utils.d.ts +1 -0
  186. package/api/utils.d.ts.map +1 -0
  187. package/index.d.ts +1 -0
  188. package/index.d.ts.map +1 -0
  189. package/package.json +5 -5
  190. package/scope/event.d.ts +1 -0
  191. package/scope/event.d.ts.map +1 -0
  192. package/scope/finalizer.d.ts +1 -0
  193. package/scope/finalizer.d.ts.map +1 -0
  194. package/scope/index.d.ts +1 -0
  195. package/scope/index.d.ts.map +1 -0
  196. package/scope/pool.d.ts +1 -0
  197. package/scope/pool.d.ts.map +1 -0
  198. package/scope/proxy.d.ts +1 -0
  199. package/scope/proxy.d.ts.map +1 -0
  200. package/scope/proxy.js +1 -0
  201. package/scope/proxy.js.map +1 -1
  202. package/scope/scope.d.ts +1 -0
  203. package/scope/scope.d.ts.map +1 -0
  204. package/scope/scope.js +17 -11
  205. package/scope/scope.js.map +1 -1
  206. package/scope/stack.d.ts +1 -0
  207. package/scope/stack.d.ts.map +1 -0
  208. package/scope/stack.js +21 -13
  209. package/scope/stack.js.map +1 -1
  210. package/v8/enums.d.ts +1 -0
  211. package/v8/enums.d.ts.map +1 -0
  212. package/v8/enums.js +15 -13
  213. package/v8/enums.js.map +1 -1
  214. package/v8/factory.d.ts +1 -0
  215. package/v8/factory.d.ts.map +1 -0
  216. package/v8/factory.js +6 -4
  217. package/v8/factory.js.map +1 -1
  218. package/v8/index.d.ts +1 -0
  219. package/v8/index.d.ts.map +1 -0
  220. package/v8/inline.d.ts +1 -0
  221. package/v8/inline.d.ts.map +1 -0
  222. package/v8/inline.js +10 -6
  223. package/v8/inline.js.map +1 -1
  224. package/v8/language.d.ts +1 -0
  225. package/v8/language.d.ts.map +1 -0
  226. package/v8/node.d.ts +1 -0
  227. package/v8/node.d.ts.map +1 -0
  228. package/v8/parser.d.ts +1 -0
  229. package/v8/parser.d.ts.map +1 -0
  230. package/v8/parser.js +5 -5
  231. package/v8/parser.js.map +1 -1
  232. package/v8/stream.d.ts +1 -0
  233. package/v8/stream.d.ts.map +1 -0
  234. package/v8/stream.js +19 -8
  235. package/v8/stream.js.map +1 -1
  236. package/v8/token.d.ts +1 -0
  237. package/v8/token.d.ts.map +1 -0
  238. package/v8/token.js +365 -359
  239. package/v8/token.js.map +1 -1
  240. package/visit/index.d.ts +1 -0
  241. package/visit/index.d.ts.map +1 -0
  242. package/visit/visitor.d.ts +1 -0
  243. package/visit/visitor.d.ts.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;GAMG;AAEI,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,sBAAsB;IAEzD,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,IAAI,gBAAc,CACxB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,CACR,CAAC;IACH,CAAC;IACD,YACC,KAAwB,EACxB,GAAoB;QACpB,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,QAAQ;QACP,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM;QACL,OAAO,EAAE,CAAC;IACX,CAAC;;AA7Be,uBAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAc,EAAE,CAAmB,CAAC;AADrE,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CA+B1B;SA/BY,cAAc","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, SourceLocation } from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The empty statement is a semicolon (;) indicating that no statement will be executed,\n * even if JavaScript syntax requires one.\n * The opposite behavior, where you want multiple statements,\n * but JavaScript only allows a single one, is possible using a block statement,\n * which combines several statements into a single one.\n */\n@Deserializer('EmptyStatement')\nexport class EmptyStatement extends AbstractExpressionNode {\n\tstatic readonly INSTANCE = Object.freeze(new EmptyStatement()) as EmptyStatement;\n\tstatic fromJSON(node: EmptyStatement): EmptyStatement {\n\t\treturn new EmptyStatement(\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tconstructor(\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`EmptyStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn ';';\n\t}\n\ttoJson(): object {\n\t\treturn {};\n\t}\n}\n"]}
1
+ {"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;GAMG;AAEH,MAAM,KAAO,cAAc;4BAD1B,YAAY,CAAC,gBAAgB,CAAC;;;;QAClB,cAAc,QAAC,SAAQ,sBAAsB;;YAA1D,4IA8BC;YA9BY,cAAc;YAAd,uDAAc;;QAC1B,MAAM,CAAC,QAAQ,CAAC,IAAoB;YACnC,OAAO,IAAI,cAAc,CACxB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,CACR,CAAC;QACH,CAAC;QACD,YACC,KAAwB,EACxB,GAAoB;YACpB,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,CAAC,KAAY,EAAE,KAAU;YAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QACD,GAAG,CAAC,KAAY;YACf,OAAO,KAAK,CAAC,CAAC;QACf,CAAC;QACD,UAAU,CAAC,QAAe;YACzB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,cAAc,CAAC,QAAe;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,QAAQ;YACP,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,MAAM;YACL,OAAO,EAAE,CAAC;QACX,CAAC;;WA7BW,cAAc","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, SourceLocation } from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The empty statement is a semicolon (;) indicating that no statement will be executed,\n * even if JavaScript syntax requires one.\n * The opposite behavior, where you want multiple statements,\n * but JavaScript only allows a single one, is possible using a block statement,\n * which combines several statements into a single one.\n */\n@Deserializer('EmptyStatement')\nexport class EmptyStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: EmptyStatement): EmptyStatement {\n\t\treturn new EmptyStatement(\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tconstructor(\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`EmptyStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn ';';\n\t}\n\ttoJson(): object {\n\t\treturn {};\n\t}\n}\n"]}
@@ -23,3 +23,4 @@ export declare class IfStatement extends AbstractExpressionNode {
23
23
  toString(): string;
24
24
  toJson(): object;
25
25
  }
26
+ //# sourceMappingURL=if.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"if.d.ts","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,EACrD,aAAa,EAAE,cAAc,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D;;;;GAIG;AACH,qBACa,WAAY,SAAQ,sBAAsB;IAgBrD,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS,CAAC;IAjBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,GAAG,WAAW;IAS/E,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;gBAMtD,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,cAAc,EAC1B,SAAS,CAAC,4BAAgB,EAClC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAGrB,OAAO;IAGP,aAAa;IAGb,YAAY;IAGZ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAG5B,GAAG,CAAC,KAAK,EAAE,KAAK;IAehB,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE;IAO7C,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAMtD,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;CAOhB"}
@@ -1,5 +1,4 @@
1
- var IfStatement_1;
2
- import { __decorate, __metadata } from "tslib";
1
+ import { __esDecorate, __runInitializers } from "tslib";
3
2
  import { AbstractExpressionNode } from '../../abstract.js';
4
3
  import { Deserializer } from '../../deserialize/deserialize.js';
5
4
  /**
@@ -7,70 +6,80 @@ import { Deserializer } from '../../deserialize/deserialize.js';
7
6
  * If the condition is falsy, another statement can be executed.
8
7
  *
9
8
  */
10
- let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNode {
11
- static fromJSON(node, deserializer) {
12
- return new IfStatement_1(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0, node.range, node.loc);
13
- }
14
- static visit(node, visitNode) {
15
- visitNode(node.test);
16
- visitNode(node.consequent);
17
- node.alternate && visitNode(node.alternate);
18
- }
19
- constructor(test, consequent, alternate, range, loc) {
20
- super(range, loc);
21
- this.test = test;
22
- this.consequent = consequent;
23
- this.alternate = alternate;
24
- }
25
- getTest() {
26
- return this.test;
27
- }
28
- getConsequent() {
29
- return this.consequent;
30
- }
31
- getAlternate() {
32
- return this.alternate;
33
- }
34
- set(stack, value) {
35
- throw new Error(`IfStatement#set() has no implementation.`);
36
- }
37
- get(stack) {
38
- const condition = this.test.get(stack);
39
- if (condition) {
40
- const ifBlock = stack.pushBlockScope();
41
- const value = this.consequent.get(stack);
42
- stack.clearTo(ifBlock);
43
- return value;
9
+ export let IfStatement = (() => {
10
+ let _classDecorators = [Deserializer('IfStatement')];
11
+ let _classDescriptor;
12
+ let _classExtraInitializers = [];
13
+ let _classThis;
14
+ var IfStatement = class extends AbstractExpressionNode {
15
+ static {
16
+ __esDecorate(null, _classDescriptor = { value: this }, _classDecorators, { kind: "class", name: this.name }, null, _classExtraInitializers);
17
+ IfStatement = _classThis = _classDescriptor.value;
18
+ __runInitializers(_classThis, _classExtraInitializers);
44
19
  }
45
- else if (this.alternate) {
46
- const elseBlock = stack.pushBlockScope();
47
- const value = this.alternate.get(stack);
48
- stack.clearTo(elseBlock);
49
- return value;
20
+ test;
21
+ consequent;
22
+ alternate;
23
+ static fromJSON(node, deserializer) {
24
+ return new IfStatement(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0, node.range, node.loc);
50
25
  }
51
- return void 0;
52
- }
53
- dependency(computed) {
54
- return this.test.dependency(computed)
55
- .concat(this.consequent.dependency(computed), this.alternate?.dependency(computed) || []);
56
- }
57
- dependencyPath(computed) {
58
- return this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed), this.alternate?.dependencyPath(computed) || []);
59
- }
60
- toString() {
61
- return `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;
62
- }
63
- toJson() {
64
- return {
65
- test: this.test.toJSON(),
66
- consequent: this.consequent.toJSON(),
67
- alternate: this.alternate?.toJSON()
68
- };
69
- }
70
- };
71
- IfStatement = IfStatement_1 = __decorate([
72
- Deserializer('IfStatement'),
73
- __metadata("design:paramtypes", [Object, Object, Object, Array, Object])
74
- ], IfStatement);
75
- export { IfStatement };
26
+ static visit(node, visitNode) {
27
+ visitNode(node.test);
28
+ visitNode(node.consequent);
29
+ node.alternate && visitNode(node.alternate);
30
+ }
31
+ constructor(test, consequent, alternate, range, loc) {
32
+ super(range, loc);
33
+ this.test = test;
34
+ this.consequent = consequent;
35
+ this.alternate = alternate;
36
+ }
37
+ getTest() {
38
+ return this.test;
39
+ }
40
+ getConsequent() {
41
+ return this.consequent;
42
+ }
43
+ getAlternate() {
44
+ return this.alternate;
45
+ }
46
+ set(stack, value) {
47
+ throw new Error(`IfStatement#set() has no implementation.`);
48
+ }
49
+ get(stack) {
50
+ const condition = this.test.get(stack);
51
+ if (condition) {
52
+ const ifBlock = stack.pushBlockScope();
53
+ const value = this.consequent.get(stack);
54
+ stack.clearTo(ifBlock);
55
+ return value;
56
+ }
57
+ else if (this.alternate) {
58
+ const elseBlock = stack.pushBlockScope();
59
+ const value = this.alternate.get(stack);
60
+ stack.clearTo(elseBlock);
61
+ return value;
62
+ }
63
+ return void 0;
64
+ }
65
+ dependency(computed) {
66
+ return this.test.dependency(computed)
67
+ .concat(this.consequent.dependency(computed), this.alternate?.dependency(computed) || []);
68
+ }
69
+ dependencyPath(computed) {
70
+ return this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed), this.alternate?.dependencyPath(computed) || []);
71
+ }
72
+ toString() {
73
+ return `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;
74
+ }
75
+ toJson() {
76
+ return {
77
+ test: this.test.toJSON(),
78
+ consequent: this.consequent.toJSON(),
79
+ alternate: this.alternate?.toJSON()
80
+ };
81
+ }
82
+ };
83
+ return IfStatement = _classThis;
84
+ })();
76
85
  //# sourceMappingURL=if.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('IfStatement')\nexport class IfStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement {\n\t\treturn new IfStatement(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.alternate ? deserializer(node.alternate) : void 0,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: IfStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t\tnode.alternate && visitNode(node.alternate);\n\t}\n\tconstructor(\n\t\tprivate test: ExpressionNode,\n\t\tprivate consequent: ExpressionNode,\n\t\tprivate alternate?: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`IfStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tif (condition) {\n\t\t\tconst ifBlock = stack.pushBlockScope();\n\t\t\tconst value = this.consequent.get(stack);\n\t\t\tstack.clearTo(ifBlock);\n\t\t\treturn value;\n\t\t} else if (this.alternate) {\n\t\t\tconst elseBlock = stack.pushBlockScope();\n\t\t\tconst value = this.alternate.get(stack);\n\t\t\tstack.clearTo(elseBlock);\n\t\t\treturn value;\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.consequent.dependency(computed),\n\t\t\t\tthis.alternate?.dependency(computed) || []\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(\n\t\t\tthis.consequent.dependencyPath(computed),\n\t\t\tthis.alternate?.dependencyPath(computed) || []\n\t\t);\n\t}\n\ttoString(): string {\n\t\treturn `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON(),\n\t\t\talternate: this.alternate?.toJSON()\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('IfStatement')\nexport class IfStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement {\n\t\treturn new IfStatement(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.alternate ? deserializer(node.alternate) : void 0,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: IfStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t\tnode.alternate && visitNode(node.alternate);\n\t}\n\tconstructor(\n\t\tprivate test: ExpressionNode,\n\t\tprivate consequent: ExpressionNode,\n\t\tprivate alternate?: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`IfStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tif (condition) {\n\t\t\tconst ifBlock = stack.pushBlockScope();\n\t\t\tconst value = this.consequent.get(stack);\n\t\t\tstack.clearTo(ifBlock);\n\t\t\treturn value;\n\t\t} else if (this.alternate) {\n\t\t\tconst elseBlock = stack.pushBlockScope();\n\t\t\tconst value = this.alternate.get(stack);\n\t\t\tstack.clearTo(elseBlock);\n\t\t\treturn value;\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.consequent.dependency(computed),\n\t\t\t\tthis.alternate?.dependency(computed) || []\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(\n\t\t\tthis.consequent.dependencyPath(computed),\n\t\t\tthis.alternate?.dependencyPath(computed) || []\n\t\t);\n\t}\n\ttoString(): string {\n\t\treturn `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON(),\n\t\t\talternate: this.alternate?.toJSON()\n\t\t};\n\t}\n}\n"]}
@@ -46,3 +46,4 @@ export declare class SwitchStatement extends AbstractExpressionNode {
46
46
  toString(): string;
47
47
  toJson(): object;
48
48
  }
49
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/switch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,EACrD,aAAa,EAAE,cAAc,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAM3D,qBACa,UAAW,SAAQ,sBAAsB;IAcpD,SAAS,CAAC,IAAI,EAAE,cAAc;IAC9B,SAAS,CAAC,UAAU,EAAE,cAAc;IAdrC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,GAAG,UAAU;IAQ7E,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;gBAKnD,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,cAAc,EACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAGrB,OAAO;IAGP,aAAa;IAGb,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAG5B,GAAG,CAAC,KAAK,EAAE,KAAK;IAGhB,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE;IAG7C,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAGtD,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;CAMhB;AAED,qBACa,iBAAkB,SAAQ,UAAU;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,GAAG,iBAAiB;IAO3F,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;gBAIpE,KAAK,EAAE,cAAc,EACrB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAGrB,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE;IAG7C,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAGtD,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;CAKhB;AAED;;;;;GAKG;AACH,qBACa,eAAgB,SAAQ,sBAAsB;IAczD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,KAAK;IAdd,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,GAAG,eAAe;IAQvF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;gBAK1D,YAAY,EAAE,cAAc,EAC5B,KAAK,EAAE,UAAU,EAAE,EAC3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAGrB,eAAe;IAGf,QAAQ;IAGR,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAG5B,GAAG,CAAC,KAAK,EAAE,KAAK;IA2BhB,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE;IAG7C,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAGtD,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;CAMhB"}
@@ -1,160 +1,184 @@
1
- var SwitchCase_1, DefaultExpression_1, SwitchStatement_1;
2
- import { __decorate, __metadata } from "tslib";
1
+ import { __esDecorate, __runInitializers } from "tslib";
3
2
  import { AbstractExpressionNode } from '../../abstract.js';
4
3
  import { Deserializer } from '../../deserialize/deserialize.js';
5
4
  import { TerminateReturnType } from './terminate.js';
6
5
  import { Identifier } from '../../definition/values.js';
7
- let SwitchCase = SwitchCase_1 = class SwitchCase extends AbstractExpressionNode {
8
- static fromJSON(node, deserializer) {
9
- return new SwitchCase_1(deserializer(node.test), deserializer(node.consequent), node.range, node.loc);
10
- }
11
- static visit(node, visitNode) {
12
- visitNode(node.test);
13
- visitNode(node.consequent);
14
- }
15
- constructor(test, consequent, range, loc) {
16
- super(range, loc);
17
- this.test = test;
18
- this.consequent = consequent;
19
- }
20
- getTest() {
21
- return this.test;
22
- }
23
- getConsequent() {
24
- return this.consequent;
25
- }
26
- set(stack, value) {
27
- throw new Error(`SwitchCase#set() has no implementation.`);
28
- }
29
- get(stack) {
30
- return this.consequent.get(stack);
31
- }
32
- dependency(computed) {
33
- return this.test.dependency(computed).concat(this.consequent.dependency(computed));
34
- }
35
- dependencyPath(computed) {
36
- return this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));
37
- }
38
- toString() {
39
- return `case ${this.test.toString()}: ${this.consequent.toString()};`;
40
- }
41
- toJson() {
42
- return {
43
- test: this.test.toJSON(),
44
- consequent: this.consequent.toJSON()
45
- };
46
- }
47
- };
48
- SwitchCase = SwitchCase_1 = __decorate([
49
- Deserializer('SwitchCase'),
50
- __metadata("design:paramtypes", [Object, Object, Array, Object])
51
- ], SwitchCase);
52
- export { SwitchCase };
53
- let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends SwitchCase {
54
- static fromJSON(node, deserializer) {
55
- return new DefaultExpression_1(deserializer(node.consequent), node.range, node.loc);
56
- }
57
- static visit(node, visitNode) {
58
- visitNode(node.consequent);
59
- }
60
- constructor(block, range, loc) {
61
- super(new Identifier('default'), block, range, loc);
62
- }
63
- dependency(computed) {
64
- return this.consequent.dependency(computed);
65
- }
66
- dependencyPath(computed) {
67
- return this.consequent.dependencyPath(computed);
68
- }
69
- toString() {
70
- return `default: ${this.consequent.toString()};`;
71
- }
72
- toJson() {
73
- return {
74
- consequent: this.consequent.toJSON()
75
- };
76
- }
77
- };
78
- DefaultExpression = DefaultExpression_1 = __decorate([
79
- Deserializer('default'),
80
- __metadata("design:paramtypes", [Object, Array, Object])
81
- ], DefaultExpression);
82
- export { DefaultExpression };
6
+ export let SwitchCase = (() => {
7
+ let _classDecorators = [Deserializer('SwitchCase')];
8
+ let _classDescriptor;
9
+ let _classExtraInitializers = [];
10
+ let _classThis;
11
+ var SwitchCase = class extends AbstractExpressionNode {
12
+ static {
13
+ __esDecorate(null, _classDescriptor = { value: this }, _classDecorators, { kind: "class", name: this.name }, null, _classExtraInitializers);
14
+ SwitchCase = _classThis = _classDescriptor.value;
15
+ __runInitializers(_classThis, _classExtraInitializers);
16
+ }
17
+ test;
18
+ consequent;
19
+ static fromJSON(node, deserializer) {
20
+ return new SwitchCase(deserializer(node.test), deserializer(node.consequent), node.range, node.loc);
21
+ }
22
+ static visit(node, visitNode) {
23
+ visitNode(node.test);
24
+ visitNode(node.consequent);
25
+ }
26
+ constructor(test, consequent, range, loc) {
27
+ super(range, loc);
28
+ this.test = test;
29
+ this.consequent = consequent;
30
+ }
31
+ getTest() {
32
+ return this.test;
33
+ }
34
+ getConsequent() {
35
+ return this.consequent;
36
+ }
37
+ set(stack, value) {
38
+ throw new Error(`SwitchCase#set() has no implementation.`);
39
+ }
40
+ get(stack) {
41
+ return this.consequent.get(stack);
42
+ }
43
+ dependency(computed) {
44
+ return this.test.dependency(computed).concat(this.consequent.dependency(computed));
45
+ }
46
+ dependencyPath(computed) {
47
+ return this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));
48
+ }
49
+ toString() {
50
+ return `case ${this.test.toString()}: ${this.consequent.toString()};`;
51
+ }
52
+ toJson() {
53
+ return {
54
+ test: this.test.toJSON(),
55
+ consequent: this.consequent.toJSON()
56
+ };
57
+ }
58
+ };
59
+ return SwitchCase = _classThis;
60
+ })();
61
+ export let DefaultExpression = (() => {
62
+ let _classDecorators_1 = [Deserializer('default')];
63
+ let _classDescriptor_1;
64
+ let _classExtraInitializers_1 = [];
65
+ let _classThis_1;
66
+ var DefaultExpression = class extends SwitchCase {
67
+ static {
68
+ __esDecorate(null, _classDescriptor_1 = { value: this }, _classDecorators_1, { kind: "class", name: this.name }, null, _classExtraInitializers_1);
69
+ DefaultExpression = _classThis_1 = _classDescriptor_1.value;
70
+ __runInitializers(_classThis_1, _classExtraInitializers_1);
71
+ }
72
+ static fromJSON(node, deserializer) {
73
+ return new DefaultExpression(deserializer(node.consequent), node.range, node.loc);
74
+ }
75
+ static visit(node, visitNode) {
76
+ visitNode(node.consequent);
77
+ }
78
+ constructor(block, range, loc) {
79
+ super(new Identifier('default'), block, range, loc);
80
+ }
81
+ dependency(computed) {
82
+ return this.consequent.dependency(computed);
83
+ }
84
+ dependencyPath(computed) {
85
+ return this.consequent.dependencyPath(computed);
86
+ }
87
+ toString() {
88
+ return `default: ${this.consequent.toString()};`;
89
+ }
90
+ toJson() {
91
+ return {
92
+ consequent: this.consequent.toJSON()
93
+ };
94
+ }
95
+ };
96
+ return DefaultExpression = _classThis_1;
97
+ })();
83
98
  /**
84
99
  * The switch statement evaluates an expression, matching the expression's value to a case clause,
85
100
  * and executes statements associated with that case,
86
101
  * as well as statements in cases that follow the matching case.
87
102
  *
88
103
  */
89
- let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends AbstractExpressionNode {
90
- static fromJSON(node, deserializer) {
91
- return new SwitchStatement_1(deserializer(node.discriminant), node.cases.map(deserializer), node.range, node.loc);
92
- }
93
- static visit(node, visitNode) {
94
- visitNode(node.discriminant);
95
- node.cases.forEach(visitNode);
96
- }
97
- constructor(discriminant, cases, range, loc) {
98
- super(range, loc);
99
- this.discriminant = discriminant;
100
- this.cases = cases;
101
- }
102
- getDiscriminant() {
103
- return this.discriminant;
104
- }
105
- getCases() {
106
- return this.cases;
107
- }
108
- set(stack, value) {
109
- throw new Error(`SwitchStatement#set() has no implementation.`);
110
- }
111
- get(stack) {
112
- // need to fix statements execution and support default case
113
- // stack = stack.newStack();
114
- const result = this.discriminant.get(stack);
115
- const values = this.cases.map(item => item.getTest().get(stack));
116
- let startIndex = values.findIndex(item => result === item);
117
- if (startIndex === -1) {
118
- // search for default statement
119
- startIndex = this.cases.findIndex(item => item instanceof DefaultExpression);
120
- if (startIndex === -1) {
121
- return;
122
- }
104
+ export let SwitchStatement = (() => {
105
+ let _classDecorators_2 = [Deserializer('SwitchStatement')];
106
+ let _classDescriptor_2;
107
+ let _classExtraInitializers_2 = [];
108
+ let _classThis_2;
109
+ var SwitchStatement = class extends AbstractExpressionNode {
110
+ static {
111
+ __esDecorate(null, _classDescriptor_2 = { value: this }, _classDecorators_2, { kind: "class", name: this.name }, null, _classExtraInitializers_2);
112
+ SwitchStatement = _classThis_2 = _classDescriptor_2.value;
113
+ __runInitializers(_classThis_2, _classExtraInitializers_2);
114
+ }
115
+ discriminant;
116
+ cases;
117
+ static fromJSON(node, deserializer) {
118
+ return new SwitchStatement(deserializer(node.discriminant), node.cases.map(deserializer), node.range, node.loc);
119
+ }
120
+ static visit(node, visitNode) {
121
+ visitNode(node.discriminant);
122
+ node.cases.forEach(visitNode);
123
+ }
124
+ constructor(discriminant, cases, range, loc) {
125
+ super(range, loc);
126
+ this.discriminant = discriminant;
127
+ this.cases = cases;
128
+ }
129
+ getDiscriminant() {
130
+ return this.discriminant;
123
131
  }
124
- const caseBlock = stack.pushBlockScope();
125
- for (let index = startIndex; index < this.cases.length; index++) {
126
- const returnValue = this.cases[index].get(stack);
127
- if (result instanceof TerminateReturnType) {
128
- if (result.type === 'continue') {
129
- continue;
132
+ getCases() {
133
+ return this.cases;
134
+ }
135
+ set(stack, value) {
136
+ throw new Error(`SwitchStatement#set() has no implementation.`);
137
+ }
138
+ get(stack) {
139
+ // need to fix statements execution and support default case
140
+ // stack = stack.newStack();
141
+ const result = this.discriminant.get(stack);
142
+ const values = this.cases.map(item => item.getTest().get(stack));
143
+ let startIndex = values.findIndex(item => result === item);
144
+ if (startIndex === -1) {
145
+ // search for default statement
146
+ startIndex = this.cases.findIndex(item => item instanceof DefaultExpression);
147
+ if (startIndex === -1) {
148
+ return;
130
149
  }
131
- else {
132
- break;
150
+ }
151
+ const caseBlock = stack.pushBlockScope();
152
+ for (let index = startIndex; index < this.cases.length; index++) {
153
+ const returnValue = this.cases[index].get(stack);
154
+ if (result instanceof TerminateReturnType) {
155
+ if (result.type === 'continue') {
156
+ continue;
157
+ }
158
+ else {
159
+ break;
160
+ }
133
161
  }
134
162
  }
163
+ stack.clearTo(caseBlock);
164
+ return void 0;
165
+ }
166
+ dependency(computed) {
167
+ return this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));
168
+ }
169
+ dependencyPath(computed) {
170
+ return this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));
171
+ }
172
+ toString() {
173
+ return `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;
174
+ }
175
+ toJson() {
176
+ return {
177
+ discriminant: this.discriminant.toJSON(),
178
+ cases: this.cases.map(item => item.toJSON())
179
+ };
135
180
  }
136
- stack.clearTo(caseBlock);
137
- return void 0;
138
- }
139
- dependency(computed) {
140
- return this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));
141
- }
142
- dependencyPath(computed) {
143
- return this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));
144
- }
145
- toString() {
146
- return `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;
147
- }
148
- toJson() {
149
- return {
150
- discriminant: this.discriminant.toJSON(),
151
- cases: this.cases.map(item => item.toJSON())
152
- };
153
- }
154
- };
155
- SwitchStatement = SwitchStatement_1 = __decorate([
156
- Deserializer('SwitchStatement'),
157
- __metadata("design:paramtypes", [Object, Array, Array, Object])
158
- ], SwitchStatement);
159
- export { SwitchStatement };
181
+ };
182
+ return SwitchStatement = _classThis_2;
183
+ })();
160
184
  //# sourceMappingURL=switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/switch.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from './terminate.js';\nimport { Identifier } from '../../definition/values.js';\n\n\n@Deserializer('SwitchCase')\nexport class SwitchCase extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase {\n\t\treturn new SwitchCase(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(\n\t\tprotected test: ExpressionNode,\n\t\tprotected consequent: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchCase#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.consequent.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.consequent.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `case ${this.test.toString()}: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('default')\nexport class DefaultExpression extends SwitchCase {\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(\n\t\tblock: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(new Identifier('default'), block, range, loc);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.consequent.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.consequent.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `default: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n/**\n * The switch statement evaluates an expression, matching the expression's value to a case clause,\n * and executes statements associated with that case,\n * as well as statements in cases that follow the matching case.\n * \n */\n@Deserializer('SwitchStatement')\nexport class SwitchStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement {\n\t\treturn new SwitchStatement(\n\t\t\tdeserializer(node.discriminant),\n\t\t\tnode.cases.map(deserializer) as SwitchCase[],\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: SwitchStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.discriminant);\n\t\tnode.cases.forEach(visitNode);\n\t}\n\tconstructor(\n\t\tprivate discriminant: ExpressionNode,\n\t\tprivate cases: SwitchCase[],\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\t// need to fix statements execution and support default case\n\t\t// stack = stack.newStack();\n\t\tconst result = this.discriminant.get(stack);\n\t\tconst values = this.cases.map(item => item.getTest().get(stack));\n\t\tlet startIndex = values.findIndex(item => result === item);\n\t\tif (startIndex === -1) {\n\t\t\t// search for default statement\n\t\t\tstartIndex = this.cases.findIndex(item => item instanceof DefaultExpression);\n\t\t\tif (startIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst caseBlock = stack.pushBlockScope();\n\t\tfor (let index = startIndex; index < this.cases.length; index++) {\n\t\t\tconst returnValue = this.cases[index].get(stack);\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(caseBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));\n\t}\n\ttoString(): string {\n\t\treturn `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tdiscriminant: this.discriminant.toJSON(),\n\t\t\tcases: this.cases.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/switch.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from './terminate.js';\nimport { Identifier } from '../../definition/values.js';\n\n\n@Deserializer('SwitchCase')\nexport class SwitchCase extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase {\n\t\treturn new SwitchCase(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(\n\t\tprotected test: ExpressionNode,\n\t\tprotected consequent: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchCase#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.consequent.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.consequent.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `case ${this.test.toString()}: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('default')\nexport class DefaultExpression extends SwitchCase {\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(\n\t\tblock: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(new Identifier('default'), block, range, loc);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.consequent.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.consequent.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `default: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n/**\n * The switch statement evaluates an expression, matching the expression's value to a case clause,\n * and executes statements associated with that case,\n * as well as statements in cases that follow the matching case.\n * \n */\n@Deserializer('SwitchStatement')\nexport class SwitchStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement {\n\t\treturn new SwitchStatement(\n\t\t\tdeserializer(node.discriminant),\n\t\t\tnode.cases.map(deserializer) as SwitchCase[],\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: SwitchStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.discriminant);\n\t\tnode.cases.forEach(visitNode);\n\t}\n\tconstructor(\n\t\tprivate discriminant: ExpressionNode,\n\t\tprivate cases: SwitchCase[],\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\t// need to fix statements execution and support default case\n\t\t// stack = stack.newStack();\n\t\tconst result = this.discriminant.get(stack);\n\t\tconst values = this.cases.map(item => item.getTest().get(stack));\n\t\tlet startIndex = values.findIndex(item => result === item);\n\t\tif (startIndex === -1) {\n\t\t\t// search for default statement\n\t\t\tstartIndex = this.cases.findIndex(item => item instanceof DefaultExpression);\n\t\t\tif (startIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst caseBlock = stack.pushBlockScope();\n\t\tfor (let index = startIndex; index < this.cases.length; index++) {\n\t\t\tconst returnValue = this.cases[index].get(stack);\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(caseBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));\n\t}\n\ttoString(): string {\n\t\treturn `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tdiscriminant: this.discriminant.toJSON(),\n\t\t\tcases: this.cases.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
@@ -29,13 +29,11 @@ declare abstract class TerminateStatement extends AbstractExpressionNode {
29
29
  abstract getType(): TerminateType;
30
30
  }
31
31
  export declare class BreakStatement extends TerminateStatement {
32
- static readonly BREAK_INSTANCE: BreakStatement;
33
32
  static fromJSON(node: BreakStatement, deserializer: NodeDeserializer): BreakStatement;
34
33
  static visit(node: BreakStatement, visitNode: VisitNodeType): void;
35
34
  getType(): 'break';
36
35
  }
37
36
  export declare class ContinueStatement extends TerminateStatement {
38
- static readonly CONTINUE_INSTANCE: ContinueStatement;
39
37
  static fromJSON(node: ContinueStatement, deserializer: NodeDeserializer): ContinueStatement;
40
38
  static visit(node: ContinueStatement, visitNode: VisitNodeType): void;
41
39
  getType(): 'continue';
@@ -59,3 +57,4 @@ export declare class LabeledStatement extends AbstractExpressionNode {
59
57
  };
60
58
  }
61
59
  export {};
60
+ //# sourceMappingURL=terminate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminate.d.ts","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EACrD,cAAc,EAAE,aAAa,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjD,qBAAa,mBAAmB;IACZ,IAAI,EAAE,aAAa;IAAS,KAAK,CAAC;gBAAlC,IAAI,EAAE,aAAa,EAAS,KAAK,CAAC,oBAAQ;CAC7D;AAID;;;;;;;GAOG;AACH,uBAAe,kBAAmB,SAAQ,sBAAsB;IAG9D,SAAS,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,wBAAY,EAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAGrB,QAAQ;IAGR,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAG5B,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB;IAGtC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE;IAG7C,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAGtD,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;IAIhB,QAAQ,CAAC,OAAO,IAAI,aAAa;CACjC;AAED,qBACa,cAAe,SAAQ,kBAAkB;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,GAAG,cAAc;IAOrF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;IAGlE,OAAO,IAAI,OAAO;CAGlB;AAED,qBACa,iBAAkB,SAAQ,kBAAkB;IACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,GAAG,iBAAiB;IAO3F,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;IAGrE,OAAO,IAAI,UAAU;CAGrB;AAED,qBACa,gBAAiB,SAAQ,sBAAsB;IAc1D,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,IAAI;IAdb,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,GAAG,gBAAgB;IAQzF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;gBAK3D,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,cAAc,EAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,GAAG,CAAC,EAAE,cAAc;IAIrB,QAAQ;IAGR,OAAO;IAGP,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAG5B,GAAG,CAAC,KAAK,EAAE,KAAK;IAGhB,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,cAAc,EAAE;IAGzD,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,mBAAmB,EAAE;IAGlE,QAAQ,IAAI,MAAM;IAGlB,MAAM;;;;CAMN"}