@ibyar/expressions 0.5.2 → 0.5.62

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 (186) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -3
  3. package/api/abstract.d.ts +5 -6
  4. package/api/abstract.js +8 -3
  5. package/api/abstract.js.map +1 -1
  6. package/api/class/class.d.ts +227 -0
  7. package/api/class/class.js +662 -0
  8. package/api/class/class.js.map +1 -0
  9. package/api/class/decorator.d.ts +20 -0
  10. package/api/class/decorator.js +48 -0
  11. package/api/class/decorator.js.map +1 -0
  12. package/api/computing/call.d.ts +3 -1
  13. package/api/computing/call.js +16 -4
  14. package/api/computing/call.js.map +1 -1
  15. package/api/computing/debugger.d.ts +15 -0
  16. package/api/computing/debugger.js +35 -0
  17. package/api/computing/debugger.js.map +1 -0
  18. package/api/computing/new.d.ts +2 -1
  19. package/api/computing/new.js +4 -0
  20. package/api/computing/new.js.map +1 -1
  21. package/api/computing/rest.d.ts +6 -6
  22. package/api/computing/rest.js +5 -2
  23. package/api/computing/rest.js.map +1 -1
  24. package/api/computing/return.d.ts +6 -1
  25. package/api/computing/return.js +8 -0
  26. package/api/computing/return.js.map +1 -1
  27. package/api/computing/spread.d.ts +2 -1
  28. package/api/computing/spread.js +5 -2
  29. package/api/computing/spread.js.map +1 -1
  30. package/api/computing/throw.d.ts +6 -1
  31. package/api/computing/throw.js +7 -0
  32. package/api/computing/throw.js.map +1 -1
  33. package/api/computing/yield.d.ts +2 -1
  34. package/api/computing/yield.js +3 -0
  35. package/api/computing/yield.js.map +1 -1
  36. package/api/definition/array.d.ts +12 -12
  37. package/api/definition/array.js +31 -25
  38. package/api/definition/array.js.map +1 -1
  39. package/api/definition/bind.d.ts +8 -2
  40. package/api/definition/bind.js +7 -1
  41. package/api/definition/bind.js.map +1 -1
  42. package/api/definition/function.d.ts +40 -51
  43. package/api/definition/function.js +292 -309
  44. package/api/definition/function.js.map +1 -1
  45. package/api/definition/member.d.ts +2 -2
  46. package/api/definition/member.js +1 -1
  47. package/api/definition/member.js.map +1 -1
  48. package/api/definition/object.d.ts +15 -12
  49. package/api/definition/object.js +43 -13
  50. package/api/definition/object.js.map +1 -1
  51. package/api/definition/statement.d.ts +2 -2
  52. package/api/definition/statement.js +7 -3
  53. package/api/definition/statement.js.map +1 -1
  54. package/api/definition/values.d.ts +44 -50
  55. package/api/definition/values.js +87 -149
  56. package/api/definition/values.js.map +1 -1
  57. package/api/deserialize/deserialize.d.ts +7 -1
  58. package/api/deserialize/deserialize.js +9 -1
  59. package/api/deserialize/deserialize.js.map +1 -1
  60. package/api/deserialize/type-store.d.ts +2 -2
  61. package/api/deserialize/type-store.js.map +1 -1
  62. package/api/expression.d.ts +159 -18
  63. package/api/expression.js.map +1 -1
  64. package/api/index.d.ts +2 -0
  65. package/api/index.js +2 -0
  66. package/api/index.js.map +1 -1
  67. package/api/module/common.d.ts +29 -0
  68. package/api/module/common.js +71 -0
  69. package/api/module/common.js.map +1 -0
  70. package/api/module/export.d.ts +129 -25
  71. package/api/module/export.js +333 -58
  72. package/api/module/export.js.map +1 -1
  73. package/api/module/import.d.ts +114 -25
  74. package/api/module/import.js +279 -68
  75. package/api/module/import.js.map +1 -1
  76. package/api/operators/assignment.d.ts +2 -2
  77. package/api/operators/assignment.js +1 -1
  78. package/api/operators/assignment.js.map +1 -1
  79. package/api/operators/await.d.ts +2 -2
  80. package/api/operators/await.js +1 -1
  81. package/api/operators/await.js.map +1 -1
  82. package/api/operators/binary.d.ts +2 -2
  83. package/api/operators/binary.js +1 -1
  84. package/api/operators/binary.js.map +1 -1
  85. package/api/operators/chaining.d.ts +2 -2
  86. package/api/operators/chaining.js +1 -1
  87. package/api/operators/chaining.js.map +1 -1
  88. package/api/operators/comma.d.ts +2 -2
  89. package/api/operators/comma.js +2 -2
  90. package/api/operators/comma.js.map +1 -1
  91. package/api/operators/grouping.d.ts +9 -2
  92. package/api/operators/grouping.js +8 -1
  93. package/api/operators/grouping.js.map +1 -1
  94. package/api/operators/logical.d.ts +2 -2
  95. package/api/operators/logical.js +1 -1
  96. package/api/operators/logical.js.map +1 -1
  97. package/api/operators/pipeline.d.ts +14 -2
  98. package/api/operators/pipeline.js +13 -1
  99. package/api/operators/pipeline.js.map +1 -1
  100. package/api/operators/ternary.d.ts +2 -2
  101. package/api/operators/ternary.js +1 -1
  102. package/api/operators/ternary.js.map +1 -1
  103. package/api/operators/unary.d.ts +3 -3
  104. package/api/operators/unary.js +7 -3
  105. package/api/operators/unary.js.map +1 -1
  106. package/api/operators/update.d.ts +2 -2
  107. package/api/operators/update.js +1 -1
  108. package/api/operators/update.js.map +1 -1
  109. package/api/{app/program.d.ts → program.d.ts} +8 -9
  110. package/api/program.js +45 -0
  111. package/api/program.js.map +1 -0
  112. package/api/statement/control/block.d.ts +8 -5
  113. package/api/statement/control/block.js +26 -23
  114. package/api/statement/control/block.js.map +1 -1
  115. package/api/statement/control/empty.d.ts +8 -1
  116. package/api/statement/control/empty.js +7 -0
  117. package/api/statement/control/empty.js.map +1 -1
  118. package/api/statement/control/if.d.ts +7 -2
  119. package/api/statement/control/if.js +6 -1
  120. package/api/statement/control/if.js.map +1 -1
  121. package/api/statement/control/switch.d.ts +10 -5
  122. package/api/statement/control/switch.js +22 -9
  123. package/api/statement/control/switch.js.map +1 -1
  124. package/api/statement/control/terminate.d.ts +46 -13
  125. package/api/statement/control/terminate.js +89 -20
  126. package/api/statement/control/terminate.js.map +1 -1
  127. package/api/statement/declarations/declares.d.ts +17 -16
  128. package/api/statement/declarations/declares.js +24 -19
  129. package/api/statement/declarations/declares.js.map +1 -1
  130. package/api/statement/iterations/for.d.ts +10 -5
  131. package/api/statement/iterations/for.js +42 -23
  132. package/api/statement/iterations/for.js.map +1 -1
  133. package/api/statement/iterations/while.d.ts +9 -3
  134. package/api/statement/iterations/while.js +27 -13
  135. package/api/statement/iterations/while.js.map +1 -1
  136. package/api/utils.d.ts +5 -0
  137. package/api/utils.js +4 -0
  138. package/api/utils.js.map +1 -0
  139. package/package.json +5 -5
  140. package/scope/finalizer.d.ts +4 -0
  141. package/scope/finalizer.js +11 -0
  142. package/scope/finalizer.js.map +1 -0
  143. package/scope/proxy.d.ts +5 -3
  144. package/scope/proxy.js +26 -26
  145. package/scope/proxy.js.map +1 -1
  146. package/scope/scope.d.ts +108 -51
  147. package/scope/scope.js +72 -134
  148. package/scope/scope.js.map +1 -1
  149. package/scope/stack.d.ts +117 -26
  150. package/scope/stack.js +154 -102
  151. package/scope/stack.js.map +1 -1
  152. package/v8/enums.d.ts +204 -0
  153. package/v8/enums.js +406 -0
  154. package/v8/enums.js.map +1 -0
  155. package/v8/index.d.ts +2 -1
  156. package/v8/index.js +2 -1
  157. package/v8/index.js.map +1 -1
  158. package/v8/inline.d.ts +213 -0
  159. package/v8/inline.js +2375 -0
  160. package/v8/inline.js.map +1 -0
  161. package/v8/nodes.d.ts +8 -7
  162. package/v8/nodes.js +39 -64
  163. package/v8/nodes.js.map +1 -1
  164. package/v8/parser.d.ts +49 -151
  165. package/v8/parser.js +839 -1607
  166. package/v8/parser.js.map +1 -1
  167. package/v8/stream.d.ts +39 -3
  168. package/v8/stream.js +685 -171
  169. package/v8/stream.js.map +1 -1
  170. package/v8/token.d.ts +244 -9
  171. package/v8/token.js +315 -47
  172. package/v8/token.js.map +1 -1
  173. package/visit/visitor.d.ts +3 -0
  174. package/visit/visitor.js +4 -7
  175. package/visit/visitor.js.map +1 -1
  176. package/api/app/class.d.ts +0 -117
  177. package/api/app/class.js +0 -292
  178. package/api/app/class.js.map +0 -1
  179. package/api/app/program.js +0 -39
  180. package/api/app/program.js.map +0 -1
  181. package/api/module/module.d.ts +0 -26
  182. package/api/module/module.js +0 -63
  183. package/api/module/module.js.map +0 -1
  184. package/v8/app.d.ts +0 -0
  185. package/v8/app.js +0 -2
  186. package/v8/app.js.map +0 -1
@@ -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, VisitNodeListType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { BreakStatement } 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);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(protected test: ExpressionNode, protected consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\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 DEFAULT_KEYWORD = 'default';\n\tstatic DefaultNode = Object.freeze(new Identifier(DefaultExpression.DEFAULT_KEYWORD)) as Identifier;\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(deserializer(node.consequent));\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(block: ExpressionNode) {\n\t\tsuper(DefaultExpression.DefaultNode, block);\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);\n\t}\n\tstatic visit(node: SwitchStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.discriminant);\n\t\tvisitNodeList(node.cases);\n\t}\n\tconstructor(private discriminant: ExpressionNode, private cases: SwitchCase[]) {\n\t\tsuper();\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.discriminant.shareVariables(scopeList);\n\t\tthis.cases.forEach(item => item.shareVariables(scopeList));\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 (returnValue === BreakStatement.BreakSymbol) {\n\t\t\t\tbreak;\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,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.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);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(protected test: ExpressionNode, protected consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\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 DefaultNode = Object.freeze(new Identifier('default')) as Identifier;\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(deserializer(node.consequent));\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(block: ExpressionNode) {\n\t\tsuper(DefaultExpression.DefaultNode, block);\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);\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(private discriminant: ExpressionNode, private cases: SwitchCase[]) {\n\t\tsuper();\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.discriminant.shareVariables(scopeList);\n\t\tthis.cases.forEach(item => item.shareVariables(scopeList));\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,31 +1,64 @@
1
- import type { ExpressionEventPath, ExpressionNode, VisitNodeListType, VisitNodeType } from '../../expression.js';
1
+ import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../../expression.js';
2
2
  import type { Scope } from '../../../scope/scope.js';
3
3
  import type { Stack } from '../../../scope/stack.js';
4
4
  import { AbstractExpressionNode } from '../../abstract.js';
5
- declare class TerminateStatement extends AbstractExpressionNode {
6
- protected symbol: Symbol;
7
- protected label?: ExpressionNode | undefined;
8
- constructor(symbol: Symbol, label?: ExpressionNode | undefined);
9
- getSymbol(): Symbol;
5
+ import { Identifier } from '../../definition/values.js';
6
+ export declare type TerminateType = 'break' | 'continue';
7
+ export declare class TerminateReturnType {
8
+ type: TerminateType;
9
+ label?: string | undefined;
10
+ constructor(type: TerminateType, label?: string | undefined);
11
+ }
12
+ /**
13
+ * The break statement terminates the current loop, switch, or label statement
14
+ * and transfers program control to the statement following the terminated statement.
15
+ *
16
+ * The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,
17
+ * and continues execution of the loop with the next iteration.
18
+ *
19
+ */
20
+ declare abstract class TerminateStatement extends AbstractExpressionNode {
21
+ protected label?: Identifier | undefined;
22
+ constructor(label?: Identifier | undefined);
10
23
  getLabel(): void;
11
24
  shareVariables(scopeList: Scope<any>[]): void;
12
25
  set(stack: Stack, value: any): void;
13
- get(stack: Stack): Symbol;
26
+ get(stack: Stack): TerminateReturnType;
14
27
  dependency(computed?: true): ExpressionNode[];
15
28
  dependencyPath(computed?: true): ExpressionEventPath[];
16
29
  toString(): string;
17
30
  toJson(): object;
31
+ abstract getType(): TerminateType;
18
32
  }
19
33
  export declare class BreakStatement extends TerminateStatement {
20
- static readonly BreakSymbol: unique symbol;
21
34
  static readonly BREAK_INSTANCE: BreakStatement;
22
- static fromJSON(node: BreakStatement): BreakStatement;
23
- static visit(node: BreakStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
35
+ static fromJSON(node: BreakStatement, deserializer: NodeDeserializer): BreakStatement;
36
+ static visit(node: BreakStatement, visitNode: VisitNodeType): void;
37
+ getType(): 'break';
24
38
  }
25
39
  export declare class ContinueStatement extends TerminateStatement {
26
- static readonly ContinueSymbol: unique symbol;
27
40
  static readonly CONTINUE_INSTANCE: ContinueStatement;
28
- static fromJSON(node: ContinueStatement): ContinueStatement;
29
- static visit(node: ContinueStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
41
+ static fromJSON(node: ContinueStatement, deserializer: NodeDeserializer): ContinueStatement;
42
+ static visit(node: ContinueStatement, visitNode: VisitNodeType): void;
43
+ getType(): 'continue';
44
+ }
45
+ export declare class LabeledStatement extends AbstractExpressionNode {
46
+ private label;
47
+ private body;
48
+ static fromJSON(node: LabeledStatement, deserializer: NodeDeserializer): LabeledStatement;
49
+ static visit(node: LabeledStatement, visitNode: VisitNodeType): void;
50
+ constructor(label: Identifier, body: ExpressionNode);
51
+ getLabel(): Identifier;
52
+ getBody(): ExpressionNode;
53
+ shareVariables(scopeList: Scope<any>[]): void;
54
+ set(stack: Stack, value: any): void;
55
+ get(stack: Stack): any;
56
+ dependency(computed?: true | undefined): ExpressionNode[];
57
+ dependencyPath(computed?: true | undefined): ExpressionEventPath[];
58
+ toString(): string;
59
+ toJson(): {
60
+ label: import("../../expression.js").NodeJsonType;
61
+ body: import("../../expression.js").NodeJsonType;
62
+ };
30
63
  }
31
64
  export {};
@@ -1,16 +1,28 @@
1
- var BreakStatement_1, ContinueStatement_1;
2
- import { __decorate } from "tslib";
1
+ var BreakStatement_1, ContinueStatement_1, LabeledStatement_1;
2
+ import { __decorate, __metadata } from "tslib";
3
3
  import { AbstractExpressionNode } from '../../abstract.js';
4
4
  import { Deserializer } from '../../deserialize/deserialize.js';
5
+ import { Identifier } from '../../definition/values.js';
6
+ export class TerminateReturnType {
7
+ constructor(type, label) {
8
+ this.type = type;
9
+ this.label = label;
10
+ }
11
+ }
12
+ ;
13
+ /**
14
+ * The break statement terminates the current loop, switch, or label statement
15
+ * and transfers program control to the statement following the terminated statement.
16
+ *
17
+ * The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,
18
+ * and continues execution of the loop with the next iteration.
19
+ *
20
+ */
5
21
  class TerminateStatement extends AbstractExpressionNode {
6
- constructor(symbol, label) {
22
+ constructor(label) {
7
23
  super();
8
- this.symbol = symbol;
9
24
  this.label = label;
10
25
  }
11
- getSymbol() {
12
- return this.symbol;
13
- }
14
26
  getLabel() {
15
27
  this.label;
16
28
  }
@@ -19,7 +31,7 @@ class TerminateStatement extends AbstractExpressionNode {
19
31
  throw new Error(`TerminateStatement#set() has no implementation.`);
20
32
  }
21
33
  get(stack) {
22
- return this.symbol;
34
+ return new TerminateReturnType(this.getType(), this.label?.get(stack));
23
35
  }
24
36
  dependency(computed) {
25
37
  return [];
@@ -28,38 +40,95 @@ class TerminateStatement extends AbstractExpressionNode {
28
40
  return [];
29
41
  }
30
42
  toString() {
31
- return this.symbol.description;
43
+ return `${this.getType()}${this.label ? ` ${this.label.toString()}` : ''};`;
32
44
  }
33
45
  toJson() {
34
- return { symbol: this.symbol.description, label: this.label };
46
+ return { label: this.label?.toJSON() };
35
47
  }
36
48
  }
37
49
  let BreakStatement = BreakStatement_1 = class BreakStatement extends TerminateStatement {
38
- static fromJSON(node) {
39
- return BreakStatement_1.BREAK_INSTANCE;
50
+ static fromJSON(node, deserializer) {
51
+ return node.label
52
+ ? new BreakStatement_1(deserializer(node.label))
53
+ : BreakStatement_1.BREAK_INSTANCE;
40
54
  }
41
- static visit(node, visitNode, visitNodeList) {
55
+ static visit(node, visitNode) {
42
56
  node.label && visitNode(node.label);
43
57
  }
58
+ getType() {
59
+ return 'break';
60
+ }
44
61
  };
45
- BreakStatement.BreakSymbol = Symbol.for('break');
46
- BreakStatement.BREAK_INSTANCE = Object.freeze(new BreakStatement_1(BreakStatement_1.BreakSymbol));
62
+ BreakStatement.BREAK_INSTANCE = Object.freeze(new BreakStatement_1());
47
63
  BreakStatement = BreakStatement_1 = __decorate([
48
64
  Deserializer('BreakStatement')
49
65
  ], BreakStatement);
50
66
  export { BreakStatement };
51
67
  let ContinueStatement = ContinueStatement_1 = class ContinueStatement extends TerminateStatement {
52
- static fromJSON(node) {
53
- return ContinueStatement_1.CONTINUE_INSTANCE;
68
+ static fromJSON(node, deserializer) {
69
+ return node.label
70
+ ? new ContinueStatement_1(deserializer(node.label))
71
+ : ContinueStatement_1.CONTINUE_INSTANCE;
54
72
  }
55
- static visit(node, visitNode, visitNodeList) {
73
+ static visit(node, visitNode) {
56
74
  node.label && visitNode(node.label);
57
75
  }
76
+ getType() {
77
+ return 'continue';
78
+ }
58
79
  };
59
- ContinueStatement.ContinueSymbol = Symbol.for('continue');
60
- ContinueStatement.CONTINUE_INSTANCE = Object.freeze(new ContinueStatement_1(ContinueStatement_1.ContinueSymbol));
80
+ ContinueStatement.CONTINUE_INSTANCE = Object.freeze(new ContinueStatement_1());
61
81
  ContinueStatement = ContinueStatement_1 = __decorate([
62
82
  Deserializer('ContinueStatement')
63
83
  ], ContinueStatement);
64
84
  export { ContinueStatement };
85
+ let LabeledStatement = LabeledStatement_1 = class LabeledStatement extends AbstractExpressionNode {
86
+ constructor(label, body) {
87
+ super();
88
+ this.label = label;
89
+ this.body = body;
90
+ }
91
+ static fromJSON(node, deserializer) {
92
+ return new LabeledStatement_1(deserializer(node.label), deserializer(node.body));
93
+ }
94
+ static visit(node, visitNode) {
95
+ visitNode(node.label);
96
+ visitNode(node.body);
97
+ }
98
+ getLabel() {
99
+ return this.label;
100
+ }
101
+ getBody() {
102
+ return this.body;
103
+ }
104
+ shareVariables(scopeList) {
105
+ this.body.shareVariables(scopeList);
106
+ }
107
+ set(stack, value) {
108
+ throw new Error('LabeledStatement#set() not implemented.');
109
+ }
110
+ get(stack) {
111
+ return this.body.get(stack);
112
+ }
113
+ dependency(computed) {
114
+ return this.body.dependency(computed);
115
+ }
116
+ dependencyPath(computed) {
117
+ return this.body.dependencyPath(computed);
118
+ }
119
+ toString() {
120
+ return `${this.label.toString()}:\n${this.body.toString()}`;
121
+ }
122
+ toJson() {
123
+ return {
124
+ label: this.label.toJSON(),
125
+ body: this.body.toJSON()
126
+ };
127
+ }
128
+ };
129
+ LabeledStatement = LabeledStatement_1 = __decorate([
130
+ Deserializer('LabeledStatement'),
131
+ __metadata("design:paramtypes", [Identifier, Object])
132
+ ], LabeledStatement);
133
+ export { LabeledStatement };
65
134
  //# sourceMappingURL=terminate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAUhE,MAAM,kBAAmB,SAAQ,sBAAsB;IAEtD,YAAsB,MAAc,EAAY,KAAsB;QACrE,KAAK,EAAE,CAAC;QADa,WAAM,GAAN,MAAM,CAAQ;QAAY,UAAK,GAAL,KAAK,CAAiB;IAEtE,CAAC;IACD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,QAAQ;QACP,IAAI,CAAC,KAAK,CAAC;IACZ,CAAC;IACD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,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,IAAI,CAAC,MAAM,CAAC,WAAY,CAAC;IACjC,CAAC;IACD,MAAM;QACL,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;CACD;AAGD,IAAa,cAAc,sBAA3B,MAAa,cAAe,SAAQ,kBAAkB;IAGrD,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,gBAAc,CAAC,cAAc,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAoB,EAAE,SAAwB,EAAE,aAAgC;QAC5F,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACD,CAAA;AARgB,0BAAW,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;AAClC,6BAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAc,CAAC,gBAAc,CAAC,WAAW,CAAC,CAAoB,CAAA;AAFrG,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;GAClB,cAAc,CAS1B;SATY,cAAc;AAY3B,IAAa,iBAAiB,yBAA9B,MAAa,iBAAkB,SAAQ,kBAAkB;IAGxD,MAAM,CAAC,QAAQ,CAAC,IAAuB;QACtC,OAAO,mBAAiB,CAAC,iBAAiB,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAuB,EAAE,SAAwB,EAAE,aAAgC;QAC/F,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACD,CAAA;AARgB,gCAAc,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE,CAAA;AACxC,mCAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,mBAAiB,CAAC,mBAAiB,CAAC,cAAc,CAAC,CAAuB,CAAA;AAFpH,iBAAiB;IAD7B,YAAY,CAAC,mBAAmB,CAAC;GACrB,iBAAiB,CAS7B;SATY,iBAAiB","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, VisitNodeListType, VisitNodeType } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The break statement terminates the current loop, switch, or label statement\n * and transfers program control to the statement following the terminated statement.\n * \n * The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,\n * and continues execution of the loop with the next iteration.\n *\n */\nclass TerminateStatement extends AbstractExpressionNode {\n\n\tconstructor(protected symbol: Symbol, protected label?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetSymbol() {\n\t\treturn this.symbol;\n\t}\n\tgetLabel() {\n\t\tthis.label;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`TerminateStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.symbol;\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 this.symbol.description!;\n\t}\n\ttoJson(): object {\n\t\treturn { symbol: this.symbol.description, label: this.label };\n\t}\n}\n\n@Deserializer('BreakStatement')\nexport class BreakStatement extends TerminateStatement {\n\tstatic readonly BreakSymbol = Symbol.for('break');\n\tstatic readonly BREAK_INSTANCE = Object.freeze(new BreakStatement(BreakStatement.BreakSymbol)) as BreakStatement;\n\tstatic fromJSON(node: BreakStatement): BreakStatement {\n\t\treturn BreakStatement.BREAK_INSTANCE;\n\t}\n\tstatic visit(node: BreakStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n}\n\n@Deserializer('ContinueStatement')\nexport class ContinueStatement extends TerminateStatement {\n\tstatic readonly ContinueSymbol = Symbol.for('continue');\n\tstatic readonly CONTINUE_INSTANCE = Object.freeze(new ContinueStatement(ContinueStatement.ContinueSymbol)) as ContinueStatement;\n\tstatic fromJSON(node: ContinueStatement): ContinueStatement {\n\t\treturn ContinueStatement.CONTINUE_INSTANCE;\n\t}\n\tstatic visit(node: ContinueStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n}\n"]}
1
+ {"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { Identifier } from '../../definition/values.js';\n\nexport type TerminateType = 'break' | 'continue';\n\nexport class TerminateReturnType {\n\tconstructor(public type: TerminateType, public label?: string) { }\n};\n\n\n\n/**\n * The break statement terminates the current loop, switch, or label statement\n * and transfers program control to the statement following the terminated statement.\n * \n * The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,\n * and continues execution of the loop with the next iteration.\n *\n */\nabstract class TerminateStatement extends AbstractExpressionNode {\n\n\tconstructor(protected label?: Identifier) {\n\t\tsuper();\n\t}\n\tgetLabel() {\n\t\tthis.label;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`TerminateStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack): TerminateReturnType {\n\t\treturn new TerminateReturnType(this.getType(), this.label?.get(stack));\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 `${this.getType()}${this.label ? ` ${this.label.toString()}` : ''};`;\n\t}\n\ttoJson(): object {\n\t\treturn { label: this.label?.toJSON() };\n\t}\n\n\tabstract getType(): TerminateType;\n}\n\n@Deserializer('BreakStatement')\nexport class BreakStatement extends TerminateStatement {\n\tstatic readonly BREAK_INSTANCE = Object.freeze(new BreakStatement()) as BreakStatement;\n\tstatic fromJSON(node: BreakStatement, deserializer: NodeDeserializer): BreakStatement {\n\t\treturn node.label\n\t\t\t? new BreakStatement(deserializer(node.label) as Identifier)\n\t\t\t: BreakStatement.BREAK_INSTANCE;\n\t}\n\tstatic visit(node: BreakStatement, visitNode: VisitNodeType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n\tgetType(): 'break' {\n\t\treturn 'break';\n\t}\n}\n\n@Deserializer('ContinueStatement')\nexport class ContinueStatement extends TerminateStatement {\n\tstatic readonly CONTINUE_INSTANCE = Object.freeze(new ContinueStatement()) as ContinueStatement;\n\tstatic fromJSON(node: ContinueStatement, deserializer: NodeDeserializer): ContinueStatement {\n\n\t\treturn node.label\n\t\t\t? new ContinueStatement(deserializer(node.label) as Identifier)\n\t\t\t: ContinueStatement.CONTINUE_INSTANCE;\n\t}\n\tstatic visit(node: ContinueStatement, visitNode: VisitNodeType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n\tgetType(): 'continue' {\n\t\treturn 'continue';\n\t}\n}\n\n@Deserializer('LabeledStatement')\nexport class LabeledStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: LabeledStatement, deserializer: NodeDeserializer): LabeledStatement {\n\t\treturn new LabeledStatement(\n\t\t\tdeserializer(node.label) as Identifier,\n\t\t\tdeserializer(node.body),\n\t\t);\n\t}\n\tstatic visit(node: LabeledStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.label);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(private label: Identifier, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\n\tgetLabel() {\n\t\treturn this.label;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('LabeledStatement#set() not implemented.');\n\t}\n\tget(stack: Stack) {\n\t\treturn this.body.get(stack);\n\t}\n\tdependency(computed?: true | undefined): ExpressionNode[] {\n\t\treturn this.body.dependency(computed);\n\t}\n\tdependencyPath(computed?: true | undefined): ExpressionEventPath[] {\n\t\treturn this.body.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `${this.label.toString()}:\\n${this.body.toString()}`;\n\t}\n\ttoJson() {\n\t\treturn {\n\t\t\tlabel: this.label.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n"]}
@@ -1,20 +1,20 @@
1
- import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, DeclarationExpression, ExpressionEventPath, VisitNodeType } from '../../expression.js';
2
2
  import type { Scope } from '../../../scope/scope.js';
3
3
  import type { Stack } from '../../../scope/stack.js';
4
- import type { ScopeType } from '../../../scope/scope.js';
5
4
  import { AbstractExpressionNode } from '../../abstract.js';
6
- export declare class VariableNode extends AbstractExpressionNode implements CanDeclareExpression {
7
- id: CanDeclareExpression;
5
+ export declare class VariableDeclarator extends AbstractExpressionNode implements DeclarationExpression {
6
+ id: DeclarationExpression;
8
7
  init?: ExpressionNode | undefined;
9
- static fromJSON(node: VariableNode, deserializer: NodeDeserializer): VariableNode;
10
- static visit(node: VariableNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
- constructor(id: CanDeclareExpression, init?: ExpressionNode | undefined);
12
- getId(): CanDeclareExpression;
8
+ static fromJSON(node: VariableDeclarator, deserializer: NodeDeserializer): VariableDeclarator;
9
+ static visit(node: VariableDeclarator, visitNode: VisitNodeType): void;
10
+ constructor(id: DeclarationExpression, init?: ExpressionNode | undefined);
11
+ getId(): DeclarationExpression;
13
12
  getInit(): ExpressionNode | undefined;
14
13
  shareVariables(scopeList: Scope<any>[]): void;
15
14
  set(stack: Stack, value: any): void;
16
15
  get(stack: Stack): void;
17
- declareVariable(stack: Stack, scopeType: ScopeType, propertyValue?: any): void;
16
+ declareVariable(stack: Stack, propertyValue?: any): void;
17
+ getDeclarationName(): string;
18
18
  dependency(computed?: true): ExpressionNode[];
19
19
  dependencyPath(computed?: true): ExpressionEventPath[];
20
20
  toString(): string;
@@ -23,18 +23,19 @@ export declare class VariableNode extends AbstractExpressionNode implements CanD
23
23
  init: import("../../expression.js").NodeJsonType | undefined;
24
24
  };
25
25
  }
26
- export declare class VariableDeclarationNode extends AbstractExpressionNode implements CanDeclareExpression {
27
- protected declarations: VariableNode[];
26
+ export declare class VariableDeclarationNode extends AbstractExpressionNode implements DeclarationExpression {
27
+ protected declarations: VariableDeclarator[];
28
28
  protected kind: 'var' | 'let' | 'const';
29
29
  static fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode;
30
- static visit(node: VariableDeclarationNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
31
- constructor(declarations: VariableNode[], kind: 'var' | 'let' | 'const');
32
- getDeclarations(): VariableNode[];
33
- getKind(): "var" | "let" | "const";
30
+ static visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void;
31
+ constructor(declarations: VariableDeclarator[], kind: 'var' | 'let' | 'const');
32
+ getDeclarations(): VariableDeclarator[];
33
+ getKind(): "let" | "var" | "const";
34
34
  shareVariables(scopeList: Scope<any>[]): void;
35
35
  set(stack: Stack, value: any): void;
36
36
  get(stack: Stack): void;
37
- declareVariable(stack: Stack, scopeType: ScopeType, propertyValue: any): any;
37
+ getDeclarationName(): string;
38
+ declareVariable(stack: Stack, propertyValue: any): any;
38
39
  dependency(computed?: true): ExpressionNode[];
39
40
  dependencyPath(computed?: true): ExpressionEventPath[];
40
41
  toString(): string;
@@ -1,17 +1,17 @@
1
- var VariableNode_1, VariableDeclarationNode_1;
1
+ var VariableDeclarator_1, VariableDeclarationNode_1;
2
2
  import { __decorate, __metadata } from "tslib";
3
3
  import { AbstractExpressionNode, AwaitPromise } from '../../abstract.js';
4
4
  import { Deserializer } from '../../deserialize/deserialize.js';
5
- let VariableNode = VariableNode_1 = class VariableNode extends AbstractExpressionNode {
5
+ let VariableDeclarator = VariableDeclarator_1 = class VariableDeclarator extends AbstractExpressionNode {
6
6
  constructor(id, init) {
7
7
  super();
8
8
  this.id = id;
9
9
  this.init = init;
10
10
  }
11
11
  static fromJSON(node, deserializer) {
12
- return new VariableNode_1(deserializer(node.id), node.init ? deserializer(node.init) : void 0);
12
+ return new VariableDeclarator_1(deserializer(node.id), node.init ? deserializer(node.init) : void 0);
13
13
  }
14
- static visit(node, visitNode, visitNodeList) {
14
+ static visit(node, visitNode) {
15
15
  visitNode(node.id);
16
16
  node.init && visitNode(node.init);
17
17
  }
@@ -28,25 +28,27 @@ let VariableNode = VariableNode_1 = class VariableNode extends AbstractExpressio
28
28
  throw new Error(`VariableNode#set() has no implementation.`);
29
29
  }
30
30
  get(stack) {
31
- this.declareVariable(stack, 'block');
31
+ this.declareVariable(stack);
32
32
  }
33
- declareVariable(stack, scopeType, propertyValue) {
33
+ declareVariable(stack, propertyValue) {
34
34
  if (propertyValue !== undefined) {
35
- this.id.declareVariable(stack, scopeType, propertyValue);
35
+ this.id.declareVariable(stack, propertyValue);
36
36
  return;
37
37
  }
38
38
  const value = this.init?.get(stack);
39
39
  if (value instanceof AwaitPromise) {
40
40
  value.node = this.id;
41
41
  value.declareVariable = true;
42
- value.scopeType = scopeType;
43
- value.node.declareVariable(stack, scopeType);
42
+ value.node.declareVariable(stack);
44
43
  stack.resolveAwait(value);
45
44
  }
46
45
  else {
47
- this.id.declareVariable(stack, scopeType, value);
46
+ this.id.declareVariable(stack, value);
48
47
  }
49
48
  }
49
+ getDeclarationName() {
50
+ return this.id.getDeclarationName();
51
+ }
50
52
  dependency(computed) {
51
53
  return this.init?.dependency() || [];
52
54
  }
@@ -63,11 +65,11 @@ let VariableNode = VariableNode_1 = class VariableNode extends AbstractExpressio
63
65
  };
64
66
  }
65
67
  };
66
- VariableNode = VariableNode_1 = __decorate([
68
+ VariableDeclarator = VariableDeclarator_1 = __decorate([
67
69
  Deserializer('VariableDeclarator'),
68
70
  __metadata("design:paramtypes", [Object, Object])
69
- ], VariableNode);
70
- export { VariableNode };
71
+ ], VariableDeclarator);
72
+ export { VariableDeclarator };
71
73
  let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarationNode extends AbstractExpressionNode {
72
74
  constructor(declarations, kind) {
73
75
  super();
@@ -77,8 +79,8 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
77
79
  static fromJSON(node, deserializer) {
78
80
  return new VariableDeclarationNode_1(node.declarations.map(deserializer), node.kind);
79
81
  }
80
- static visit(node, visitNode, visitNodeList) {
81
- visitNodeList(node.declarations);
82
+ static visit(node, visitNode) {
83
+ node.declarations.forEach(visitNode);
82
84
  }
83
85
  getDeclarations() {
84
86
  return this.declarations;
@@ -97,11 +99,14 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
97
99
  }
98
100
  get(stack) {
99
101
  for (const item of this.declarations) {
100
- item.declareVariable(stack, this.kind === 'var' ? 'function' : 'block');
102
+ item.declareVariable(stack);
101
103
  }
102
104
  }
103
- declareVariable(stack, scopeType, propertyValue) {
104
- this.declarations[0].declareVariable(stack, scopeType, propertyValue);
105
+ getDeclarationName() {
106
+ return this.declarations[0].getDeclarationName();
107
+ }
108
+ declareVariable(stack, propertyValue) {
109
+ this.declarations[0].declareVariable(stack, propertyValue);
105
110
  }
106
111
  dependency(computed) {
107
112
  return this.declarations.flatMap(declareVariable => declareVariable.dependency(computed));
@@ -110,7 +115,7 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
110
115
  return this.declarations.flatMap(declareVariable => declareVariable.dependencyPath(computed));
111
116
  }
112
117
  toString() {
113
- return `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')}`;
118
+ return `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')};`;
114
119
  }
115
120
  toJson() {
116
121
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"declares.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/declarations/declares.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode, CanDeclareExpression,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport type { ScopeType } from '../../../scope/scope.js';\nimport { AbstractExpressionNode, AwaitPromise } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n@Deserializer('VariableDeclarator')\nexport class VariableNode extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: VariableNode, deserializer: NodeDeserializer): VariableNode {\n\t\treturn new VariableNode(\n\t\t\tdeserializer(node.id) as CanDeclareExpression,\n\t\t\tnode.init ? deserializer(node.init) : void 0\n\t\t);\n\t}\n\tstatic visit(node: VariableNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.id);\n\t\tnode.init && visitNode(node.init);\n\t}\n\tconstructor(public id: CanDeclareExpression, public init?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`VariableNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tthis.declareVariable(stack, 'block');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, propertyValue?: any) {\n\t\tif (propertyValue !== undefined) {\n\t\t\tthis.id.declareVariable(stack, scopeType, propertyValue);\n\t\t\treturn;\n\t\t}\n\t\tconst value = this.init?.get(stack);\n\t\tif (value instanceof AwaitPromise) {\n\t\t\tvalue.node = this.id;\n\t\t\tvalue.declareVariable = true;\n\t\t\tvalue.scopeType = scopeType;\n\t\t\tvalue.node.declareVariable(stack, scopeType);\n\t\t\tstack.resolveAwait(value);\n\t\t} else {\n\t\t\tthis.id.declareVariable(stack, scopeType, value);\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.init?.dependency() || [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.init?.dependencyPath(computed) || [];\n\t}\n\ttoString() {\n\t\treturn `${this.id.toString()}${this.init ? ` = ${this.init.toString()}` : ''}`;\n\t}\n\ttoJson() {\n\t\treturn {\n\t\t\tid: this.id.toJSON(),\n\t\t\tinit: this.init?.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('VariableDeclaration')\nexport class VariableDeclarationNode extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode {\n\t\treturn new VariableDeclarationNode(\n\t\t\tnode.declarations.map(deserializer) as VariableNode[],\n\t\t\tnode.kind\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarationNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.declarations);\n\t}\n\tconstructor(protected declarations: VariableNode[], protected kind: 'var' | 'let' | 'const') {\n\t\tsuper();\n\t}\n\tgetDeclarations() {\n\t\treturn this.declarations;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.declarations.forEach(declaration => declaration.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tif (Array.isArray(value)) {\n\t\t\tthrow new Error(`VariableDeclarationNode#set() has no implementation.`);\n\t\t}\n\t\tthis.declarations[0].id.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tfor (const item of this.declarations) {\n\t\t\titem.declareVariable(stack, this.kind === 'var' ? 'function' : 'block');\n\t\t}\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, propertyValue: any): any {\n\t\tthis.declarations[0].declareVariable(stack, scopeType, propertyValue);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\tdeclarations: this.declarations.map(v => v.toJSON()),\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"declares.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/declarations/declares.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode, DeclarationExpression,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n@Deserializer('VariableDeclarator')\nexport class VariableDeclarator extends AbstractExpressionNode implements DeclarationExpression {\n\tstatic fromJSON(node: VariableDeclarator, deserializer: NodeDeserializer): VariableDeclarator {\n\t\treturn new VariableDeclarator(\n\t\t\tdeserializer(node.id) as DeclarationExpression,\n\t\t\tnode.init ? deserializer(node.init) : void 0\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarator, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.init && visitNode(node.init);\n\t}\n\tconstructor(public id: DeclarationExpression, public init?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`VariableNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tthis.declareVariable(stack);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue?: any) {\n\t\tif (propertyValue !== undefined) {\n\t\t\tthis.id.declareVariable(stack, propertyValue);\n\t\t\treturn;\n\t\t}\n\t\tconst value = this.init?.get(stack);\n\t\tif (value instanceof AwaitPromise) {\n\t\t\tvalue.node = this.id;\n\t\t\tvalue.declareVariable = true;\n\t\t\tvalue.node.declareVariable(stack);\n\t\t\tstack.resolveAwait(value);\n\t\t} else {\n\t\t\tthis.id.declareVariable(stack, value);\n\t\t}\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.id.getDeclarationName!();\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.init?.dependency() || [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.init?.dependencyPath(computed) || [];\n\t}\n\ttoString() {\n\t\treturn `${this.id.toString()}${this.init ? ` = ${this.init.toString()}` : ''}`;\n\t}\n\ttoJson() {\n\t\treturn {\n\t\t\tid: this.id.toJSON(),\n\t\t\tinit: this.init?.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('VariableDeclaration')\nexport class VariableDeclarationNode extends AbstractExpressionNode implements DeclarationExpression {\n\tstatic fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode {\n\t\treturn new VariableDeclarationNode(\n\t\t\tnode.declarations.map(deserializer) as VariableDeclarator[],\n\t\t\tnode.kind\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void {\n\t\tnode.declarations.forEach(visitNode);\n\t}\n\tconstructor(protected declarations: VariableDeclarator[], protected kind: 'var' | 'let' | 'const') {\n\t\tsuper();\n\t}\n\tgetDeclarations() {\n\t\treturn this.declarations;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.declarations.forEach(declaration => declaration.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tif (Array.isArray(value)) {\n\t\t\tthrow new Error(`VariableDeclarationNode#set() has no implementation.`);\n\t\t}\n\t\tthis.declarations[0].id.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tfor (const item of this.declarations) {\n\t\t\titem.declareVariable(stack);\n\t\t}\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.declarations[0].getDeclarationName!();\n\t}\n\tdeclareVariable(stack: Stack, propertyValue: any): any {\n\t\tthis.declarations[0].declareVariable(stack, propertyValue);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\tdeclarations: this.declarations.map(v => v.toJSON()),\n\t\t};\n\t}\n}\n"]}
@@ -1,17 +1,22 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } from '../../expression.js';
2
2
  import type { Scope } from '../../../scope/scope.js';
3
3
  import type { Stack } from '../../../scope/stack.js';
4
4
  import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
5
5
  import { VariableDeclarationNode } from '../declarations/declares.js';
6
6
  import { ArrayPattern } from '../../definition/array.js';
7
7
  import { ObjectPattern } from '../../definition/object.js';
8
+ /**
9
+ * The if statement executes a statement if a specified condition is truthy.
10
+ * If the condition is falsy, another statement can be executed.
11
+ *
12
+ */
8
13
  export declare class ForNode extends AbstractExpressionNode {
9
14
  private body;
10
15
  private init?;
11
16
  private test?;
12
17
  private update?;
13
18
  static fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode;
14
- static visit(node: ForNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
19
+ static visit(node: ForNode, visitNode: VisitNodeType): void;
15
20
  constructor(body: ExpressionNode, init?: ExpressionNode | undefined, test?: ExpressionNode | undefined, update?: ExpressionNode | undefined);
16
21
  getBody(): ExpressionNode;
17
22
  getInit(): ExpressionNode | undefined;
@@ -31,7 +36,7 @@ export declare class ForOfNode extends AbstractExpressionNode {
31
36
  private right;
32
37
  private body;
33
38
  static fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode;
34
- static visit(node: ForOfNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
39
+ static visit(node: ForOfNode, visitNode: VisitNodeType): void;
35
40
  constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
36
41
  getLeft(): ForDeclaration;
37
42
  getRight(): ExpressionNode;
@@ -49,7 +54,7 @@ export declare class ForInNode extends AbstractExpressionNode {
49
54
  private right;
50
55
  private body;
51
56
  static fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode;
52
- static visit(node: ForInNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
57
+ static visit(node: ForInNode, visitNode: VisitNodeType): void;
53
58
  constructor(left: VariableDeclarationNode | ObjectPattern | ArrayPattern, right: ExpressionNode, body: ExpressionNode);
54
59
  getLeft(): ArrayPattern | ObjectPattern | VariableDeclarationNode;
55
60
  getRight(): ExpressionNode;
@@ -67,7 +72,7 @@ export declare class ForAwaitOfNode extends AbstractExpressionNode {
67
72
  private right;
68
73
  private body;
69
74
  static fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode;
70
- static visit(node: ForAwaitOfNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
75
+ static visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void;
71
76
  constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
72
77
  getLeft(): ForDeclaration;
73
78
  getRight(): ExpressionNode;