@ibyar/expressions 0.4.1 → 0.5.2

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 (128) hide show
  1. package/README.md +96 -1
  2. package/api/abstract.d.ts +2 -1
  3. package/api/abstract.js +4 -0
  4. package/api/abstract.js.map +1 -1
  5. package/api/definition/array.d.ts +3 -1
  6. package/api/definition/array.js +6 -0
  7. package/api/definition/array.js.map +1 -1
  8. package/api/definition/bind.d.ts +2 -1
  9. package/api/definition/bind.js +4 -0
  10. package/api/definition/bind.js.map +1 -1
  11. package/api/definition/function.d.ts +6 -1
  12. package/api/definition/function.js +22 -2
  13. package/api/definition/function.js.map +1 -1
  14. package/api/definition/member.d.ts +2 -1
  15. package/api/definition/member.js +4 -0
  16. package/api/definition/member.js.map +1 -1
  17. package/api/definition/object.d.ts +4 -1
  18. package/api/definition/object.js +10 -0
  19. package/api/definition/object.js.map +1 -1
  20. package/api/definition/statement.d.ts +2 -1
  21. package/api/definition/statement.js +3 -0
  22. package/api/definition/statement.js.map +1 -1
  23. package/api/definition/values.d.ts +11 -4
  24. package/api/definition/values.js +16 -0
  25. package/api/definition/values.js.map +1 -1
  26. package/api/deserialize/deserialize.js +3 -3
  27. package/api/deserialize/deserialize.js.map +1 -1
  28. package/api/deserialize/type-store.d.ts +2 -0
  29. package/api/deserialize/type-store.js +2 -0
  30. package/api/deserialize/type-store.js.map +1 -0
  31. package/api/expression.d.ts +9 -3
  32. package/api/expression.js.map +1 -1
  33. package/api/module/export.d.ts +3 -1
  34. package/api/module/export.js +10 -0
  35. package/api/module/export.js.map +1 -1
  36. package/api/module/import.d.ts +3 -1
  37. package/api/module/import.js +10 -0
  38. package/api/module/import.js.map +1 -1
  39. package/api/module/module.d.ts +2 -1
  40. package/api/module/module.js +5 -0
  41. package/api/module/module.js.map +1 -1
  42. package/api/operators/assignment.d.ts +2 -1
  43. package/api/operators/assignment.js +4 -0
  44. package/api/operators/assignment.js.map +1 -1
  45. package/api/operators/await.d.ts +2 -1
  46. package/api/operators/await.js +3 -0
  47. package/api/operators/await.js.map +1 -1
  48. package/api/operators/binary.d.ts +2 -1
  49. package/api/operators/binary.js +4 -0
  50. package/api/operators/binary.js.map +1 -1
  51. package/api/operators/chaining.d.ts +2 -1
  52. package/api/operators/chaining.js +3 -0
  53. package/api/operators/chaining.js.map +1 -1
  54. package/api/operators/comma.d.ts +2 -1
  55. package/api/operators/comma.js +3 -0
  56. package/api/operators/comma.js.map +1 -1
  57. package/api/operators/grouping.d.ts +2 -1
  58. package/api/operators/grouping.js +3 -0
  59. package/api/operators/grouping.js.map +1 -1
  60. package/api/operators/logical.d.ts +2 -1
  61. package/api/operators/logical.js +4 -0
  62. package/api/operators/logical.js.map +1 -1
  63. package/api/operators/pipeline.d.ts +2 -1
  64. package/api/operators/pipeline.js +5 -0
  65. package/api/operators/pipeline.js.map +1 -1
  66. package/api/operators/ternary.d.ts +2 -1
  67. package/api/operators/ternary.js +5 -0
  68. package/api/operators/ternary.js.map +1 -1
  69. package/api/operators/unary.d.ts +2 -1
  70. package/api/operators/unary.js +3 -0
  71. package/api/operators/unary.js.map +1 -1
  72. package/api/operators/update.d.ts +2 -1
  73. package/api/operators/update.js +3 -0
  74. package/api/operators/update.js.map +1 -1
  75. package/api/statement/control/block.d.ts +2 -1
  76. package/api/statement/control/block.js +3 -0
  77. package/api/statement/control/block.js.map +1 -1
  78. package/api/statement/control/if.d.ts +2 -1
  79. package/api/statement/control/if.js +5 -0
  80. package/api/statement/control/if.js.map +1 -1
  81. package/api/statement/control/switch.d.ts +4 -1
  82. package/api/statement/control/switch.js +11 -0
  83. package/api/statement/control/switch.js.map +1 -1
  84. package/api/statement/control/terminate.d.ts +5 -3
  85. package/api/statement/control/terminate.js +6 -0
  86. package/api/statement/control/terminate.js.map +1 -1
  87. package/api/statement/declarations/declares.d.ts +4 -1
  88. package/api/statement/declarations/declares.js +11 -1
  89. package/api/statement/declarations/declares.js.map +1 -1
  90. package/api/statement/iterations/for.d.ts +5 -1
  91. package/api/statement/iterations/for.js +21 -0
  92. package/api/statement/iterations/for.js.map +1 -1
  93. package/api/statement/iterations/while.d.ts +3 -1
  94. package/api/statement/iterations/while.js +8 -0
  95. package/api/statement/iterations/while.js.map +1 -1
  96. package/index.d.ts +1 -0
  97. package/index.js +1 -0
  98. package/index.js.map +1 -1
  99. package/package.json +3 -3
  100. package/scope/event.d.ts +5 -0
  101. package/scope/event.js +35 -0
  102. package/scope/event.js.map +1 -0
  103. package/scope/index.d.ts +1 -0
  104. package/scope/index.js +1 -0
  105. package/scope/index.js.map +1 -1
  106. package/scope/proxy.d.ts +1 -1
  107. package/scope/proxy.js +3 -3
  108. package/scope/proxy.js.map +1 -1
  109. package/scope/scope.d.ts +84 -48
  110. package/scope/scope.js +168 -29
  111. package/scope/scope.js.map +1 -1
  112. package/scope/stack.d.ts +28 -28
  113. package/scope/stack.js.map +1 -1
  114. package/v8/app.js.map +1 -1
  115. package/v8/parser.d.ts +2 -2
  116. package/v8/parser.js +4 -2
  117. package/v8/parser.js.map +1 -1
  118. package/v8/stream.d.ts +4 -2
  119. package/v8/stream.js +34 -17
  120. package/v8/stream.js.map +1 -1
  121. package/v8/token.d.ts +1 -1
  122. package/v8/token.js.map +1 -1
  123. package/visit/index.d.ts +1 -0
  124. package/visit/index.js +2 -0
  125. package/visit/index.js.map +1 -0
  126. package/visit/visitor.d.ts +11 -0
  127. package/visit/visitor.js +42 -0
  128. package/visit/visitor.js.map +1 -0
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -7,6 +7,7 @@ export declare class ConditionalExpression extends AbstractExpressionNode {
7
7
  private alternate;
8
8
  private consequent;
9
9
  static fromJSON(node: ConditionalExpression, deserializer: NodeDeserializer): ConditionalExpression;
10
+ static visit(node: ConditionalExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
10
11
  constructor(test: ExpressionNode, alternate: ExpressionNode, consequent: ExpressionNode);
11
12
  getTest(): ExpressionNode;
12
13
  getAlternate(): ExpressionNode;
@@ -12,6 +12,11 @@ let ConditionalExpression = ConditionalExpression_1 = class ConditionalExpressio
12
12
  static fromJSON(node, deserializer) {
13
13
  return new ConditionalExpression_1(deserializer(node.test), deserializer(node.alternate), deserializer(node.consequent));
14
14
  }
15
+ static visit(node, visitNode, visitNodeList) {
16
+ visitNode(node.test);
17
+ visitNode(node.alternate);
18
+ visitNode(node.consequent);
19
+ }
15
20
  getTest() {
16
21
  return this.test;
17
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ternary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/ternary.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,IAAa,qBAAqB,6BAAlC,MAAa,qBAAsB,SAAQ,sBAAsB;IAQhE,YAAoB,IAAoB,EAAU,SAAyB,EAAU,UAA0B;QAC9G,KAAK,EAAE,CAAC;QADW,SAAI,GAAJ,IAAI,CAAgB;QAAU,cAAS,GAAT,SAAS,CAAgB;QAAU,eAAU,GAAV,UAAU,CAAgB;IAE/G,CAAC;IATD,MAAM,CAAC,QAAQ,CAAC,IAA2B,EAAE,YAA8B;QAC1E,OAAO,IAAI,uBAAqB,CAC/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAC5B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC;IACH,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,YAAY;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IACD,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;aACnC,MAAM,CACN,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CACpC,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;aACvC,MAAM,CACN,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,EACvC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CACxC,CAAC;IACJ,CAAC;IACD,QAAQ;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;IACnG,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAClC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;SACpC,CAAC;IACH,CAAC;CACD,CAAA;AAvDY,qBAAqB;IADjC,YAAY,CAAC,uBAAuB,CAAC;;GACzB,qBAAqB,CAuDjC;SAvDY,qBAAqB","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } 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@Deserializer('ConditionalExpression')\nexport class ConditionalExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ConditionalExpression, deserializer: NodeDeserializer): ConditionalExpression {\n\t\treturn new ConditionalExpression(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.alternate),\n\t\t\tdeserializer(node.consequent)\n\t\t);\n\t}\n\tconstructor(private test: ExpressionNode, private alternate: ExpressionNode, private consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\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.alternate.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ConditionalExpression#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.test.get(stack) ? this.consequent.get(stack) : this.alternate.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.alternate.dependency(computed),\n\t\t\t\tthis.consequent.dependency(computed)\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed)\n\t\t\t.concat(\n\t\t\t\tthis.alternate.dependencyPath(computed),\n\t\t\t\tthis.consequent.dependencyPath(computed)\n\t\t\t);\n\t}\n\ttoString() {\n\t\treturn `${this.test.toString()} ? (${this.alternate.toString()}):(${this.consequent.toString()})`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\talternate: this.alternate.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"ternary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/ternary.ts"],"names":[],"mappings":"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","sourcesContent":["import 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';\n\n@Deserializer('ConditionalExpression')\nexport class ConditionalExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ConditionalExpression, deserializer: NodeDeserializer): ConditionalExpression {\n\t\treturn new ConditionalExpression(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.alternate),\n\t\t\tdeserializer(node.consequent)\n\t\t);\n\t}\n\tstatic visit(node: ConditionalExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.alternate);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(private test: ExpressionNode, private alternate: ExpressionNode, private consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\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.alternate.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ConditionalExpression#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.test.get(stack) ? this.consequent.get(stack) : this.alternate.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.alternate.dependency(computed),\n\t\t\t\tthis.consequent.dependency(computed)\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed)\n\t\t\t.concat(\n\t\t\t\tthis.alternate.dependencyPath(computed),\n\t\t\t\tthis.consequent.dependencyPath(computed)\n\t\t\t);\n\t}\n\ttoString() {\n\t\treturn `${this.test.toString()} ? (${this.alternate.toString()}):(${this.consequent.toString()})`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\talternate: this.alternate.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -7,6 +7,7 @@ export declare class UnaryExpression extends AbstractExpressionNode {
7
7
  private operator;
8
8
  private argument;
9
9
  static fromJSON(node: UnaryExpression, deserializer: NodeDeserializer): UnaryExpression;
10
+ static visit(node: UnaryExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
10
11
  static Evaluations: {
11
12
  [key: string]: (value: any) => any;
12
13
  };
@@ -13,6 +13,9 @@ let UnaryExpression = UnaryExpression_1 = class UnaryExpression extends Abstract
13
13
  static fromJSON(node, deserializer) {
14
14
  return new UnaryExpression_1(node.operator, deserializer(node.argument));
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.argument);
18
+ }
16
19
  getOperator() {
17
20
  return this.operator;
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/unary.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../expression.js';\nimport type { Scope, ScopeContext } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { MemberExpression } from '../definition/member.js';\nimport { Literal } from '../definition/values.js';\n\nexport type UnaryOperator = '-' | '+' | '~' | '!' | 'void' | 'delete' | 'typeof';\n@Deserializer('UnaryExpression')\nexport class UnaryExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UnaryExpression, deserializer: NodeDeserializer): UnaryExpression {\n\t\treturn new UnaryExpression(node.operator, deserializer(node.argument));\n\t}\n\tstatic Evaluations: { [key: string]: (value: any) => any } = {\n\t\t'+': (value: string) => { return +value; },\n\t\t'-': (value: number) => { return -value; },\n\t\t'~': (value: number) => { return ~value; },\n\t\t'!': (value: any) => { return !value; },\n\t\t'void': (value: any) => { return void value; },\n\t\t'typeof': (value: any) => { return typeof value; },\n\t};\n\tconstructor(private operator: UnaryOperator, private argument: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\treturn this.argument.set(stack, value);\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tswitch (this.operator) {\n\t\t\tcase 'delete': return this.getDelete(stack, thisContext);\n\t\t\tdefault:\n\t\t\t\tconst value = this.argument.get(stack);\n\t\t\t\treturn UnaryExpression.Evaluations[this.operator](value);\n\t\t}\n\t}\n\tprivate getDelete(stack: Stack, thisContext?: any) {\n\t\tif (this.argument instanceof MemberExpression) {\n\t\t\tconst scope = this.argument.findScope<ScopeContext>(stack);\n\t\t\tlet propertyKey: PropertyKey;\n\t\t\tconst right = this.argument.getProperty();\n\t\t\tif (right instanceof MemberExpression) {\n\t\t\t\t// [Symbol.asyncIterator]\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t} else if (right instanceof Literal) {\n\t\t\t\t// x[10], x['string'], x.name\n\t\t\t\tpropertyKey = right.getValue();\n\t\t\t} else {\n\t\t\t\t// x[u == 3 ? 'y': 'n']\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t}\n\t\t\treturn scope.delete(propertyKey);\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tswitch (this.operator) {\n\t\t\tcase 'void':\n\t\t\tcase 'delete':\n\t\t\tcase 'typeof':\n\t\t\t\treturn `${this.operator} ${this.argument.toString()}`;\n\t\t\tdefault:\n\t\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: true\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/unary.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, VisitNodeListType\n} from '../expression.js';\nimport type { Scope, ScopeContext } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { MemberExpression } from '../definition/member.js';\nimport { Literal } from '../definition/values.js';\n\nexport type UnaryOperator = '-' | '+' | '~' | '!' | 'void' | 'delete' | 'typeof';\n@Deserializer('UnaryExpression')\nexport class UnaryExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UnaryExpression, deserializer: NodeDeserializer): UnaryExpression {\n\t\treturn new UnaryExpression(node.operator, deserializer(node.argument));\n\t}\n\tstatic visit(node: UnaryExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.argument);\n\t}\n\tstatic Evaluations: { [key: string]: (value: any) => any } = {\n\t\t'+': (value: string) => { return +value; },\n\t\t'-': (value: number) => { return -value; },\n\t\t'~': (value: number) => { return ~value; },\n\t\t'!': (value: any) => { return !value; },\n\t\t'void': (value: any) => { return void value; },\n\t\t'typeof': (value: any) => { return typeof value; },\n\t};\n\tconstructor(private operator: UnaryOperator, private argument: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\treturn this.argument.set(stack, value);\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tswitch (this.operator) {\n\t\t\tcase 'delete': return this.getDelete(stack, thisContext);\n\t\t\tdefault:\n\t\t\t\tconst value = this.argument.get(stack);\n\t\t\t\treturn UnaryExpression.Evaluations[this.operator](value);\n\t\t}\n\t}\n\tprivate getDelete(stack: Stack, thisContext?: any) {\n\t\tif (this.argument instanceof MemberExpression) {\n\t\t\tconst scope = this.argument.findScope<ScopeContext>(stack);\n\t\t\tlet propertyKey: PropertyKey;\n\t\t\tconst right = this.argument.getProperty();\n\t\t\tif (right instanceof MemberExpression) {\n\t\t\t\t// [Symbol.asyncIterator]\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t} else if (right instanceof Literal) {\n\t\t\t\t// x[10], x['string'], x.name\n\t\t\t\tpropertyKey = right.getValue();\n\t\t\t} else {\n\t\t\t\t// x[u == 3 ? 'y': 'n']\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t}\n\t\t\treturn scope.delete(propertyKey);\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tswitch (this.operator) {\n\t\t\tcase 'void':\n\t\t\tcase 'delete':\n\t\t\tcase 'typeof':\n\t\t\t\treturn `${this.operator} ${this.argument.toString()}`;\n\t\t\tdefault:\n\t\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: true\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -8,6 +8,7 @@ export declare class UpdateExpression extends AbstractExpressionNode {
8
8
  private argument;
9
9
  private prefix;
10
10
  static fromJSON(node: UpdateExpression, deserializer: NodeDeserializer): UpdateExpression;
11
+ static visit(node: UpdateExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
12
  static PostfixEvaluations: {
12
13
  [key: string]: (num: {
13
14
  value: number;
@@ -12,6 +12,9 @@ let UpdateExpression = UpdateExpression_1 = class UpdateExpression extends Abstr
12
12
  static fromJSON(node, deserializer) {
13
13
  return new UpdateExpression_1(node.operator, deserializer(node.argument), node.prefix);
14
14
  }
15
+ static visit(node, visitNode, visitNodeList) {
16
+ visitNode(node.argument);
17
+ }
15
18
  getOperator() {
16
19
  return this.operator;
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/update.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } 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\nexport type UpdateOperator = '++' | '--';\n\n@Deserializer('UpdateExpression')\nexport class UpdateExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UpdateExpression, deserializer: NodeDeserializer): UpdateExpression {\n\t\treturn new UpdateExpression(node.operator, deserializer(node.argument), node.prefix);\n\t}\n\n\tstatic PostfixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return num.value++; },\n\t\t'--': num => { return num.value--; }\n\t};\n\n\tstatic PrefixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return ++num.value; },\n\t\t'--': num => { return --num.value; }\n\t};\n\n\tconstructor(private operator: UpdateOperator, private argument: ExpressionNode, private prefix: boolean) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthis.argument.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tconst num = { value: this.argument.get(stack) as number };\n\t\tconst returnValue = this.prefix\n\t\t\t? UpdateExpression.PrefixEvaluations[this.operator](num)\n\t\t\t: UpdateExpression.PostfixEvaluations[this.operator](num);\n\t\tthis.set(stack, num.value);\n\t\treturn returnValue;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tif (this.prefix) {\n\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t\treturn `${this.argument.toString()}${this.operator}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: this.prefix\n\t\t};\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/update.ts"],"names":[],"mappings":"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","sourcesContent":["import 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';\n\nexport type UpdateOperator = '++' | '--';\n\n@Deserializer('UpdateExpression')\nexport class UpdateExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UpdateExpression, deserializer: NodeDeserializer): UpdateExpression {\n\t\treturn new UpdateExpression(node.operator, deserializer(node.argument), node.prefix);\n\t}\n\tstatic visit(node: UpdateExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.argument);\n\t}\n\n\tstatic PostfixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return num.value++; },\n\t\t'--': num => { return num.value--; }\n\t};\n\n\tstatic PrefixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return ++num.value; },\n\t\t'--': num => { return --num.value; }\n\t};\n\n\tconstructor(private operator: UpdateOperator, private argument: ExpressionNode, private prefix: boolean) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthis.argument.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tconst num = { value: this.argument.get(stack) as number };\n\t\tconst returnValue = this.prefix\n\t\t\t? UpdateExpression.PrefixEvaluations[this.operator](num)\n\t\t\t: UpdateExpression.PostfixEvaluations[this.operator](num);\n\t\tthis.set(stack, num.value);\n\t\treturn returnValue;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tif (this.prefix) {\n\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t\treturn `${this.argument.toString()}${this.operator}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: this.prefix\n\t\t};\n\t}\n\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -6,6 +6,7 @@ export declare class BlockStatement extends AbstractExpressionNode {
6
6
  private body;
7
7
  isStatement: boolean;
8
8
  static fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement;
9
+ static visit(node: BlockStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
9
10
  constructor(body: ExpressionNode[], isStatement: boolean);
10
11
  getBody(): ExpressionNode[];
11
12
  shareVariables(scopeList: Scope<any>[]): void;
@@ -12,6 +12,9 @@ let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExp
12
12
  static fromJSON(node, deserializer) {
13
13
  return new BlockStatement_1(node.body.map(line => deserializer(line)), node.isStatement);
14
14
  }
15
+ static visit(node, visitNode, visitNodeList) {
16
+ visitNodeList(node.body);
17
+ }
15
18
  getBody() {
16
19
  return this.body;
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/block.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAOnE,IAAa,cAAc,sBAA3B,MAAa,cAAe,SAAQ,sBAAsB;IAIzD,YAAoB,IAAsB,EAAS,WAAoB;QACtE,KAAK,EAAE,CAAC;QADW,SAAI,GAAJ,IAAI,CAAkB;QAAS,gBAAW,GAAX,WAAW,CAAS;IAEvE,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,IAAoB,EAAE,YAA8B;QACnE,OAAO,IAAI,gBAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACxF,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrB,QAAQ,IAAI,EAAE;oBACb,KAAK,cAAc,CAAC,WAAW,KAAK,KAAK,CAAC;oBAC1C,KAAK,iBAAiB,CAAC,cAAc,KAAK,KAAK,CAAC;oBAChD,KAAK,KAAK,YAAY,WAAW;wBAChC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC1B,OAAO,KAAK,CAAC;iBACd;aACD;iBAAM;gBACN,IAAI,KAAK,YAAY,WAAW,EAAE;oBACjC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC1B,OAAO,KAAK,CAAC,KAAK,CAAC;iBACnB;aACD;SACD;QACD,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,QAAQ;QACP,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACpE,CAAC;IACD,MAAM;QACL,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACtF,CAAC;CACD,CAAA;AAjDY,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CAiD1B;SAjDY,cAAc","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { BreakStatement, ContinueStatement } from './terminate.js';\n\n/**\n * A block statement (or compound statement in other languages) is used to group zero or more statements.\n * The block is delimited by a pair of braces (\"curly brackets\") and may optionally be labelled:\n */\n@Deserializer('BlockStatement')\nexport class BlockStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement {\n\t\treturn new BlockStatement(node.body.map(line => deserializer(line)), node.isStatement);\n\t}\n\tconstructor(private body: ExpressionNode[], public isStatement: boolean) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.body.forEach(statement => statement.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`BlockStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst blockScope = stack.pushBlockScope();\n\t\tfor (const node of this.body) {\n\t\t\tconst value = node.get(stack);\n\t\t\tif (this.isStatement) {\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase BreakStatement.BreakSymbol === value:\n\t\t\t\t\tcase ContinueStatement.ContinueSymbol === value:\n\t\t\t\t\tcase value instanceof ReturnValue:\n\t\t\t\t\t\tstack.clearTo(blockScope);\n\t\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (value instanceof ReturnValue) {\n\t\t\t\t\tstack.clearTo(blockScope);\n\t\t\t\t\treturn value.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(blockScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.flatMap(exp => exp.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.flatMap(node => node.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `{ ${this.body.map(node => node.toString()).join('; ')}; }`;\n\t}\n\ttoJson(): object {\n\t\treturn { body: this.body.map(node => node.toJSON()), isStatement: this.isStatement };\n\t}\n}\n"]}
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/block.ts"],"names":[],"mappings":"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","sourcesContent":["import 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, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { BreakStatement, ContinueStatement } from './terminate.js';\n\n/**\n * A block statement (or compound statement in other languages) is used to group zero or more statements.\n * The block is delimited by a pair of braces (\"curly brackets\") and may optionally be labelled:\n */\n@Deserializer('BlockStatement')\nexport class BlockStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement {\n\t\treturn new BlockStatement(node.body.map(line => deserializer(line)), node.isStatement);\n\t}\n\tstatic visit(node: BlockStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.body);\n\t}\n\tconstructor(private body: ExpressionNode[], public isStatement: boolean) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.body.forEach(statement => statement.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`BlockStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst blockScope = stack.pushBlockScope();\n\t\tfor (const node of this.body) {\n\t\t\tconst value = node.get(stack);\n\t\t\tif (this.isStatement) {\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase BreakStatement.BreakSymbol === value:\n\t\t\t\t\tcase ContinueStatement.ContinueSymbol === value:\n\t\t\t\t\tcase value instanceof ReturnValue:\n\t\t\t\t\t\tstack.clearTo(blockScope);\n\t\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (value instanceof ReturnValue) {\n\t\t\t\t\tstack.clearTo(blockScope);\n\t\t\t\t\treturn value.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(blockScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.flatMap(exp => exp.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.flatMap(node => node.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `{ ${this.body.map(node => node.toString()).join('; ')}; }`;\n\t}\n\ttoJson(): object {\n\t\treturn { body: this.body.map(node => node.toJSON()), isStatement: this.isStatement };\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -7,6 +7,7 @@ export declare class IfStatement extends AbstractExpressionNode {
7
7
  private consequent;
8
8
  private alternate?;
9
9
  static fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement;
10
+ static visit(node: IfStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
10
11
  constructor(test: ExpressionNode, consequent: ExpressionNode, alternate?: ExpressionNode | undefined);
11
12
  getTest(): ExpressionNode;
12
13
  getConsequent(): ExpressionNode;
@@ -12,6 +12,11 @@ let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNo
12
12
  static fromJSON(node, deserializer) {
13
13
  return new IfStatement_1(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0);
14
14
  }
15
+ static visit(node, visitNode, visitNodeList) {
16
+ visitNode(node.test);
17
+ visitNode(node.consequent);
18
+ node.alternate && visitNode(node.alternate);
19
+ }
15
20
  getTest() {
16
21
  return this.test;
17
22
  }
@@ -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 { NodeDeserializer, ExpressionNode, ExpressionEventPath } 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 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);\n\t}\n\tconstructor(private test: ExpressionNode, private consequent: ExpressionNode, private alternate?: 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\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t\tthis.alternate?.shareVariables(scopeList);\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, 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';\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);\n\t}\n\tstatic visit(node: IfStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t\tnode.alternate && visitNode(node.alternate);\n\t}\n\tconstructor(private test: ExpressionNode, private consequent: ExpressionNode, private alternate?: 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\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t\tthis.alternate?.shareVariables(scopeList);\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,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -7,6 +7,7 @@ export declare class SwitchCase extends AbstractExpressionNode {
7
7
  protected test: ExpressionNode;
8
8
  protected consequent: ExpressionNode;
9
9
  static fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase;
10
+ static visit(node: SwitchCase, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
10
11
  constructor(test: ExpressionNode, consequent: ExpressionNode);
11
12
  getTest(): ExpressionNode;
12
13
  getConsequent(): ExpressionNode;
@@ -22,6 +23,7 @@ export declare class DefaultExpression extends SwitchCase {
22
23
  static DEFAULT_KEYWORD: string;
23
24
  static DefaultNode: Identifier;
24
25
  static fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression;
26
+ static visit(node: DefaultExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
25
27
  constructor(block: ExpressionNode);
26
28
  dependency(computed?: true): ExpressionNode[];
27
29
  dependencyPath(computed?: true): ExpressionEventPath[];
@@ -32,6 +34,7 @@ export declare class SwitchStatement extends AbstractExpressionNode {
32
34
  private discriminant;
33
35
  private cases;
34
36
  static fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement;
37
+ static visit(node: SwitchStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
35
38
  constructor(discriminant: ExpressionNode, cases: SwitchCase[]);
36
39
  getDiscriminant(): ExpressionNode;
37
40
  getCases(): SwitchCase[];
@@ -13,6 +13,10 @@ let SwitchCase = SwitchCase_1 = class SwitchCase extends AbstractExpressionNode
13
13
  static fromJSON(node, deserializer) {
14
14
  return new SwitchCase_1(deserializer(node.test), deserializer(node.consequent));
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.test);
18
+ visitNode(node.consequent);
19
+ }
16
20
  getTest() {
17
21
  return this.test;
18
22
  }
@@ -57,6 +61,9 @@ let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends Sw
57
61
  static fromJSON(node, deserializer) {
58
62
  return new DefaultExpression_1(deserializer(node.consequent));
59
63
  }
64
+ static visit(node, visitNode, visitNodeList) {
65
+ visitNode(node.consequent);
66
+ }
60
67
  dependency(computed) {
61
68
  return this.consequent.dependency(computed);
62
69
  }
@@ -88,6 +95,10 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
88
95
  static fromJSON(node, deserializer) {
89
96
  return new SwitchStatement_1(deserializer(node.discriminant), node.cases.map(deserializer));
90
97
  }
98
+ static visit(node, visitNode, visitNodeList) {
99
+ visitNode(node.discriminant);
100
+ visitNodeList(node.cases);
101
+ }
91
102
  getDiscriminant() {
92
103
  return this.discriminant;
93
104
  }
@@ -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 { NodeDeserializer, ExpressionNode, ExpressionEventPath } 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\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\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\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":";;AAOA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,IAAa,UAAU,kBAAvB,MAAa,UAAW,SAAQ,sBAAsB;IAWrD,YAAsB,IAAoB,EAAY,UAA0B;QAC/E,KAAK,EAAE,CAAC;QADa,SAAI,GAAJ,IAAI,CAAgB;QAAY,eAAU,GAAV,UAAU,CAAgB;IAEhF,CAAC;IAZD,MAAM,CAAC,QAAQ,CAAC,IAAgB,EAAE,YAA8B;QAC/D,OAAO,IAAI,YAAU,CACpB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAgB,EAAE,SAAwB,EAAE,aAAgC;QACxF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5D,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,QAAQ;QACP,OAAO,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvE,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;SACpC,CAAC;IACH,CAAC;CACD,CAAA;AA7CY,UAAU;IADtB,YAAY,CAAC,YAAY,CAAC;;GACd,UAAU,CA6CtB;SA7CY,UAAU;AAgDvB,IAAa,iBAAiB,yBAA9B,MAAa,iBAAkB,SAAQ,UAAU;IAShD,YAAY,KAAqB;QAChC,KAAK,CAAC,mBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAuB,EAAE,YAA8B;QACtE,OAAO,IAAI,mBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAuB,EAAE,SAAwB,EAAE,aAAgC;QAC/F,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAID,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IACD,QAAQ;QACP,OAAO,YAAY,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;IAClD,CAAC;IACD,MAAM;QACL,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;SACpC,CAAC;IACH,CAAC;CACD,CAAA;AAzBO,iCAAe,GAAG,SAAS,CAAC;AAC5B,6BAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,mBAAiB,CAAC,eAAe,CAAC,CAAgB,CAAA;AAFxF,iBAAiB;IAD7B,YAAY,CAAC,SAAS,CAAC;;GACX,iBAAiB,CA0B7B;SA1BY,iBAAiB;AAmC9B,IAAa,eAAe,uBAA5B,MAAa,eAAgB,SAAQ,sBAAsB;IAW1D,YAAoB,YAA4B,EAAU,KAAmB;QAC5E,KAAK,EAAE,CAAC;QADW,iBAAY,GAAZ,YAAY,CAAgB;QAAU,UAAK,GAAL,KAAK,CAAc;IAE7E,CAAC;IAZD,MAAM,CAAC,QAAQ,CAAC,IAAqB,EAAE,YAA8B;QACpE,OAAO,IAAI,iBAAe,CACzB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAiB,CAC5C,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAqB,EAAE,SAAwB,EAAE,aAAgC;QAC7F,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAID,eAAe;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IACD,GAAG,CAAC,KAAY;QAGf,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,IAAI,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;QAC3D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YAEtB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,iBAAiB,CAAC,CAAC;YAC7E,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;gBACtB,OAAO;aACP;SACD;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QACzC,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,WAAW,KAAK,cAAc,CAAC,WAAW,EAAE;gBAC/C,MAAM;aACN;SACD;QACD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3H,CAAC;IACD,QAAQ;QACP,OAAO,WAAW,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC/F,CAAC;IACD,MAAM;QACL,OAAO;YACN,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SAC5C,CAAC;IACH,CAAC;CACD,CAAA;AAjEY,eAAe;IAD3B,YAAY,CAAC,iBAAiB,CAAC;;GACnB,eAAe,CAiE3B;SAjEY,eAAe","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,10 +1,10 @@
1
- import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';
1
+ import type { ExpressionEventPath, ExpressionNode, VisitNodeListType, 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
5
  declare class TerminateStatement extends AbstractExpressionNode {
6
- private symbol;
7
- private label?;
6
+ protected symbol: Symbol;
7
+ protected label?: ExpressionNode | undefined;
8
8
  constructor(symbol: Symbol, label?: ExpressionNode | undefined);
9
9
  getSymbol(): Symbol;
10
10
  getLabel(): void;
@@ -20,10 +20,12 @@ export declare class BreakStatement extends TerminateStatement {
20
20
  static readonly BreakSymbol: unique symbol;
21
21
  static readonly BREAK_INSTANCE: BreakStatement;
22
22
  static fromJSON(node: BreakStatement): BreakStatement;
23
+ static visit(node: BreakStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
23
24
  }
24
25
  export declare class ContinueStatement extends TerminateStatement {
25
26
  static readonly ContinueSymbol: unique symbol;
26
27
  static readonly CONTINUE_INSTANCE: ContinueStatement;
27
28
  static fromJSON(node: ContinueStatement): ContinueStatement;
29
+ static visit(node: ContinueStatement, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
28
30
  }
29
31
  export {};
@@ -38,6 +38,9 @@ let BreakStatement = BreakStatement_1 = class BreakStatement extends TerminateSt
38
38
  static fromJSON(node) {
39
39
  return BreakStatement_1.BREAK_INSTANCE;
40
40
  }
41
+ static visit(node, visitNode, visitNodeList) {
42
+ node.label && visitNode(node.label);
43
+ }
41
44
  };
42
45
  BreakStatement.BreakSymbol = Symbol.for('break');
43
46
  BreakStatement.BREAK_INSTANCE = Object.freeze(new BreakStatement_1(BreakStatement_1.BreakSymbol));
@@ -49,6 +52,9 @@ let ContinueStatement = ContinueStatement_1 = class ContinueStatement extends Te
49
52
  static fromJSON(node) {
50
53
  return ContinueStatement_1.CONTINUE_INSTANCE;
51
54
  }
55
+ static visit(node, visitNode, visitNodeList) {
56
+ node.label && visitNode(node.label);
57
+ }
52
58
  };
53
59
  ContinueStatement.ContinueSymbol = Symbol.for('continue');
54
60
  ContinueStatement.CONTINUE_INSTANCE = Object.freeze(new ContinueStatement_1(ContinueStatement_1.ContinueSymbol));
@@ -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,YAAoB,MAAc,EAAU,KAAsB;QACjE,KAAK,EAAE,CAAC;QADW,WAAM,GAAN,MAAM,CAAQ;QAAU,UAAK,GAAL,KAAK,CAAiB;IAElE,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;CACD,CAAA;AALgB,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,CAM1B;SANY,cAAc;AAS3B,IAAa,iBAAiB,yBAA9B,MAAa,iBAAkB,SAAQ,kBAAkB;IAGxD,MAAM,CAAC,QAAQ,CAAC,IAAuB;QACtC,OAAO,mBAAiB,CAAC,iBAAiB,CAAC;IAC5C,CAAC;CACD,CAAA;AALgB,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,CAM7B;SANY,iBAAiB","sourcesContent":["import type { ExpressionEventPath, ExpressionNode } 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(private symbol: Symbol, private 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}\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}\n"]}
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,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../../expression.js';
2
2
  import type { Scope } from '../../../scope/scope.js';
3
3
  import type { Stack } from '../../../scope/stack.js';
4
4
  import type { ScopeType } from '../../../scope/scope.js';
@@ -7,6 +7,7 @@ export declare class VariableNode extends AbstractExpressionNode implements CanD
7
7
  id: CanDeclareExpression;
8
8
  init?: ExpressionNode | undefined;
9
9
  static fromJSON(node: VariableNode, deserializer: NodeDeserializer): VariableNode;
10
+ static visit(node: VariableNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
10
11
  constructor(id: CanDeclareExpression, init?: ExpressionNode | undefined);
11
12
  getId(): CanDeclareExpression;
12
13
  getInit(): ExpressionNode | undefined;
@@ -26,8 +27,10 @@ export declare class VariableDeclarationNode extends AbstractExpressionNode impl
26
27
  protected declarations: VariableNode[];
27
28
  protected kind: 'var' | 'let' | 'const';
28
29
  static fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode;
30
+ static visit(node: VariableDeclarationNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
29
31
  constructor(declarations: VariableNode[], kind: 'var' | 'let' | 'const');
30
32
  getDeclarations(): VariableNode[];
33
+ getKind(): "var" | "let" | "const";
31
34
  shareVariables(scopeList: Scope<any>[]): void;
32
35
  set(stack: Stack, value: any): void;
33
36
  get(stack: Stack): void;
@@ -9,7 +9,11 @@ let VariableNode = VariableNode_1 = class VariableNode extends AbstractExpressio
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.id) : void 0);
12
+ return new VariableNode_1(deserializer(node.id), node.init ? deserializer(node.init) : void 0);
13
+ }
14
+ static visit(node, visitNode, visitNodeList) {
15
+ visitNode(node.id);
16
+ node.init && visitNode(node.init);
13
17
  }
14
18
  getId() {
15
19
  return this.id;
@@ -73,9 +77,15 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
73
77
  static fromJSON(node, deserializer) {
74
78
  return new VariableDeclarationNode_1(node.declarations.map(deserializer), node.kind);
75
79
  }
80
+ static visit(node, visitNode, visitNodeList) {
81
+ visitNodeList(node.declarations);
82
+ }
76
83
  getDeclarations() {
77
84
  return this.declarations;
78
85
  }
86
+ getKind() {
87
+ return this.kind;
88
+ }
79
89
  shareVariables(scopeList) {
80
90
  this.declarations.forEach(declaration => declaration.shareVariables(scopeList));
81
91
  }
@@ -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 { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath } 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.id) : void 0\n\t\t);\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\tconstructor(protected declarations: VariableNode[], protected kind: 'var' | 'let' | 'const') {\n\t\tsuper();\n\t}\n\tgetDeclarations() {\n\t\treturn this.declarations;\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, 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,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath } from '../../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -11,6 +11,7 @@ export declare class ForNode extends AbstractExpressionNode {
11
11
  private test?;
12
12
  private update?;
13
13
  static fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode;
14
+ static visit(node: ForNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
14
15
  constructor(body: ExpressionNode, init?: ExpressionNode | undefined, test?: ExpressionNode | undefined, update?: ExpressionNode | undefined);
15
16
  getBody(): ExpressionNode;
16
17
  getInit(): ExpressionNode | undefined;
@@ -30,6 +31,7 @@ export declare class ForOfNode extends AbstractExpressionNode {
30
31
  private right;
31
32
  private body;
32
33
  static fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode;
34
+ static visit(node: ForOfNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
33
35
  constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
34
36
  getLeft(): ForDeclaration;
35
37
  getRight(): ExpressionNode;
@@ -47,6 +49,7 @@ export declare class ForInNode extends AbstractExpressionNode {
47
49
  private right;
48
50
  private body;
49
51
  static fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode;
52
+ static visit(node: ForInNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
50
53
  constructor(left: VariableDeclarationNode | ObjectPattern | ArrayPattern, right: ExpressionNode, body: ExpressionNode);
51
54
  getLeft(): ArrayPattern | ObjectPattern | VariableDeclarationNode;
52
55
  getRight(): ExpressionNode;
@@ -64,6 +67,7 @@ export declare class ForAwaitOfNode extends AbstractExpressionNode {
64
67
  private right;
65
68
  private body;
66
69
  static fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode;
70
+ static visit(node: ForAwaitOfNode, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
67
71
  constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
68
72
  getLeft(): ForDeclaration;
69
73
  getRight(): ExpressionNode;