@ibyar/expressions 0.8.2-dev.20221008 → 0.8.4

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 (172) hide show
  1. package/README.md +0 -3
  2. package/api/abstract.d.ts +6 -5
  3. package/api/abstract.js +15 -12
  4. package/api/abstract.js.map +1 -1
  5. package/api/class/class.d.ts +99 -60
  6. package/api/class/class.js +285 -233
  7. package/api/class/class.js.map +1 -1
  8. package/api/class/decorator.d.ts +2 -4
  9. package/api/class/decorator.js +6 -9
  10. package/api/class/decorator.js.map +1 -1
  11. package/api/computing/call.d.ts +2 -4
  12. package/api/computing/call.js +8 -11
  13. package/api/computing/call.js.map +1 -1
  14. package/api/computing/debugger.d.ts +1 -4
  15. package/api/computing/debugger.js +2 -5
  16. package/api/computing/debugger.js.map +1 -1
  17. package/api/computing/new.d.ts +2 -4
  18. package/api/computing/new.js +7 -10
  19. package/api/computing/new.js.map +1 -1
  20. package/api/computing/rest.d.ts +2 -4
  21. package/api/computing/rest.js +6 -9
  22. package/api/computing/rest.js.map +1 -1
  23. package/api/computing/return.d.ts +2 -4
  24. package/api/computing/return.js +6 -9
  25. package/api/computing/return.js.map +1 -1
  26. package/api/computing/spread.d.ts +2 -4
  27. package/api/computing/spread.js +6 -9
  28. package/api/computing/spread.js.map +1 -1
  29. package/api/computing/throw.d.ts +4 -8
  30. package/api/computing/throw.js +18 -23
  31. package/api/computing/throw.js.map +1 -1
  32. package/api/computing/yield.d.ts +2 -4
  33. package/api/computing/yield.js +7 -10
  34. package/api/computing/yield.js.map +1 -1
  35. package/api/definition/array.d.ts +3 -6
  36. package/api/definition/array.js +14 -18
  37. package/api/definition/array.js.map +1 -1
  38. package/api/definition/bind.d.ts +2 -3
  39. package/api/definition/bind.js +9 -10
  40. package/api/definition/bind.js.map +1 -1
  41. package/api/definition/comment.d.ts +3 -5
  42. package/api/definition/comment.js +6 -7
  43. package/api/definition/comment.js.map +1 -1
  44. package/api/definition/function.d.ts +20 -27
  45. package/api/definition/function.js +92 -110
  46. package/api/definition/function.js.map +1 -1
  47. package/api/definition/member.d.ts +2 -3
  48. package/api/definition/member.js +14 -11
  49. package/api/definition/member.js.map +1 -1
  50. package/api/definition/object.d.ts +5 -9
  51. package/api/definition/object.js +24 -30
  52. package/api/definition/object.js.map +1 -1
  53. package/api/definition/statement.d.ts +2 -4
  54. package/api/definition/statement.js +6 -9
  55. package/api/definition/statement.js.map +1 -1
  56. package/api/definition/values.d.ts +15 -40
  57. package/api/definition/values.js +49 -79
  58. package/api/definition/values.js.map +1 -1
  59. package/api/expression.d.ts +40 -26
  60. package/api/expression.js.map +1 -1
  61. package/api/index.d.ts +1 -0
  62. package/api/index.js +1 -0
  63. package/api/index.js.map +1 -1
  64. package/api/module/common.d.ts +4 -5
  65. package/api/module/common.js +12 -12
  66. package/api/module/common.js.map +1 -1
  67. package/api/module/export.d.ts +5 -10
  68. package/api/module/export.js +35 -38
  69. package/api/module/export.js.map +1 -1
  70. package/api/module/import.d.ts +6 -10
  71. package/api/module/import.js +28 -32
  72. package/api/module/import.js.map +1 -1
  73. package/api/operators/assignment.d.ts +3 -3
  74. package/api/operators/assignment.js +5 -5
  75. package/api/operators/assignment.js.map +1 -1
  76. package/api/operators/await.d.ts +3 -5
  77. package/api/operators/await.js +7 -10
  78. package/api/operators/await.js.map +1 -1
  79. package/api/operators/binary.d.ts +1 -1
  80. package/api/operators/binary.js +1 -1
  81. package/api/operators/binary.js.map +1 -1
  82. package/api/operators/chaining.d.ts +2 -3
  83. package/api/operators/chaining.js +6 -7
  84. package/api/operators/chaining.js.map +1 -1
  85. package/api/operators/comma.d.ts +2 -4
  86. package/api/operators/comma.js +6 -9
  87. package/api/operators/comma.js.map +1 -1
  88. package/api/operators/grouping.d.ts +2 -4
  89. package/api/operators/grouping.js +6 -9
  90. package/api/operators/grouping.js.map +1 -1
  91. package/api/operators/logical.d.ts +1 -1
  92. package/api/operators/logical.js +1 -1
  93. package/api/operators/logical.js.map +1 -1
  94. package/api/operators/pipeline.d.ts +2 -4
  95. package/api/operators/pipeline.js +8 -15
  96. package/api/operators/pipeline.js.map +1 -1
  97. package/api/operators/ternary.d.ts +2 -4
  98. package/api/operators/ternary.js +8 -13
  99. package/api/operators/ternary.js.map +1 -1
  100. package/api/operators/types.d.ts +1 -1
  101. package/api/operators/unary.d.ts +3 -5
  102. package/api/operators/unary.js +7 -10
  103. package/api/operators/unary.js.map +1 -1
  104. package/api/operators/update.d.ts +3 -5
  105. package/api/operators/update.js +8 -11
  106. package/api/operators/update.js.map +1 -1
  107. package/api/program.d.ts +3 -5
  108. package/api/program.js +7 -8
  109. package/api/program.js.map +1 -1
  110. package/api/statement/control/block.d.ts +2 -4
  111. package/api/statement/control/block.js +9 -14
  112. package/api/statement/control/block.js.map +1 -1
  113. package/api/statement/control/empty.d.ts +2 -5
  114. package/api/statement/control/empty.js +6 -8
  115. package/api/statement/control/empty.js.map +1 -1
  116. package/api/statement/control/if.d.ts +2 -4
  117. package/api/statement/control/if.js +8 -13
  118. package/api/statement/control/if.js.map +1 -1
  119. package/api/statement/control/switch.d.ts +4 -9
  120. package/api/statement/control/switch.js +19 -28
  121. package/api/statement/control/switch.js.map +1 -1
  122. package/api/statement/control/terminate.d.ts +4 -7
  123. package/api/statement/control/terminate.js +11 -19
  124. package/api/statement/control/terminate.js.map +1 -1
  125. package/api/statement/control/with.d.ts +21 -0
  126. package/api/statement/control/with.js +67 -0
  127. package/api/statement/control/with.js.map +1 -0
  128. package/api/statement/declarations/declares.d.ts +4 -7
  129. package/api/statement/declarations/declares.js +14 -20
  130. package/api/statement/declarations/declares.js.map +1 -1
  131. package/api/statement/iterations/for.d.ts +6 -11
  132. package/api/statement/iterations/for.js +35 -53
  133. package/api/statement/iterations/for.js.map +1 -1
  134. package/api/statement/iterations/while.d.ts +3 -6
  135. package/api/statement/iterations/while.js +14 -22
  136. package/api/statement/iterations/while.js.map +1 -1
  137. package/package.json +14 -4
  138. package/scope/finalizer.d.ts +1 -1
  139. package/scope/pool.d.ts +1 -1
  140. package/scope/proxy.d.ts +1 -1
  141. package/scope/proxy.js +1 -0
  142. package/scope/proxy.js.map +1 -1
  143. package/scope/scope.d.ts +8 -24
  144. package/scope/scope.js +25 -75
  145. package/scope/scope.js.map +1 -1
  146. package/scope/stack.d.ts +15 -3
  147. package/scope/stack.js +49 -32
  148. package/scope/stack.js.map +1 -1
  149. package/v8/enums.d.ts +4 -2
  150. package/v8/enums.js.map +1 -1
  151. package/v8/factory.d.ts +148 -0
  152. package/v8/factory.js +499 -0
  153. package/v8/factory.js.map +1 -0
  154. package/v8/inline.d.ts +50 -48
  155. package/v8/inline.js +322 -300
  156. package/v8/inline.js.map +1 -1
  157. package/v8/node.d.ts +141 -0
  158. package/v8/node.js +2 -0
  159. package/v8/node.js.map +1 -0
  160. package/v8/nodes.d.ts +0 -14
  161. package/v8/nodes.js +1 -152
  162. package/v8/nodes.js.map +1 -1
  163. package/v8/parser.d.ts +21 -18
  164. package/v8/parser.js +97 -84
  165. package/v8/parser.js.map +1 -1
  166. package/v8/stream.d.ts +2 -1
  167. package/v8/stream.js +221 -311
  168. package/v8/stream.js.map +1 -1
  169. package/v8/token.d.ts +3 -1
  170. package/v8/token.js +7 -5
  171. package/v8/token.js.map +1 -1
  172. package/visit/visitor.d.ts +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/with.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The with statement extends the scope chain for a statement.\n */\n@Deserializer('WithStatement')\nexport class WithStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: WithStatement, deserializer: NodeDeserializer): WithStatement {\n\t\treturn new WithStatement(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: WithStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.object);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected body: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WithStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst object = this.object.get(stack);\n\t\tlet propertyKeys: PropertyKey[] | undefined;\n\t\tif (object[Symbol.unscopables]) {\n\t\t\tconst allKeys: PropertyKey[] = [...Object.keys(object), ...Object.getOwnPropertySymbols(object)];\n\t\t\tconst unscopablesKeys = Object.entries<Record<PropertyKey, boolean>>(object[Symbol.unscopables])\n\t\t\t\t.filter(entry => entry[1])\n\t\t\t\t.map(entry => entry[0]) as PropertyKey[];\n\t\t\tpropertyKeys = allKeys.filter(key => !unscopablesKeys.includes(key));\n\t\t}\n\t\tconst objectScope = stack.pushBlockScopeFor(object, propertyKeys);\n\t\tobjectScope.getContextProxy = () => object;\n\t\tconst value = this.body.get(stack);\n\t\tstack.clearTo(objectScope);\n\t\treturn value;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.object.dependency(computed).concat(this.body.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.object.dependencyPath(computed).concat(this.body.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `with (${this.object.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n"]}
@@ -1,5 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, DeclarationExpression, ExpressionEventPath, VisitNodeType } from '../../expression.js';
2
- import type { Scope } from '../../../scope/scope.js';
1
+ import type { NodeDeserializer, ExpressionNode, DeclarationExpression, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
3
2
  import type { Stack } from '../../../scope/stack.js';
4
3
  import { AbstractExpressionNode } from '../../abstract.js';
5
4
  export declare class VariableDeclarator extends AbstractExpressionNode implements DeclarationExpression {
@@ -7,10 +6,9 @@ export declare class VariableDeclarator extends AbstractExpressionNode implement
7
6
  init?: ExpressionNode | undefined;
8
7
  static fromJSON(node: VariableDeclarator, deserializer: NodeDeserializer): VariableDeclarator;
9
8
  static visit(node: VariableDeclarator, visitNode: VisitNodeType): void;
10
- constructor(id: DeclarationExpression, init?: ExpressionNode | undefined);
9
+ constructor(id: DeclarationExpression, init?: ExpressionNode | undefined, range?: [number, number], loc?: SourceLocation);
11
10
  getId(): DeclarationExpression;
12
11
  getInit(): ExpressionNode | undefined;
13
- shareVariables(scopeList: Scope<any>[]): void;
14
12
  set(stack: Stack, value: any): void;
15
13
  get(stack: Stack): void;
16
14
  declareVariable(stack: Stack, propertyValue?: any): void;
@@ -28,10 +26,9 @@ export declare class VariableDeclarationNode extends AbstractExpressionNode impl
28
26
  protected kind: 'var' | 'let' | 'const';
29
27
  static fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode;
30
28
  static visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void;
31
- constructor(declarations: VariableDeclarator[], kind: 'var' | 'let' | 'const');
29
+ constructor(declarations: VariableDeclarator[], kind: 'var' | 'let' | 'const', range?: [number, number], loc?: SourceLocation);
32
30
  getDeclarations(): VariableDeclarator[];
33
- getKind(): "let" | "var" | "const";
34
- shareVariables(scopeList: Scope<any>[]): void;
31
+ getKind(): "var" | "let" | "const";
35
32
  set(stack: Stack, value: any): void;
36
33
  get(stack: Stack): void;
37
34
  getDeclarationName(): string;
@@ -3,27 +3,24 @@ import { __decorate, __metadata } from "tslib";
3
3
  import { AbstractExpressionNode, AwaitPromise } from '../../abstract.js';
4
4
  import { Deserializer } from '../../deserialize/deserialize.js';
5
5
  let VariableDeclarator = VariableDeclarator_1 = class VariableDeclarator extends AbstractExpressionNode {
6
- constructor(id, init) {
7
- super();
8
- this.id = id;
9
- this.init = init;
10
- }
11
6
  static fromJSON(node, deserializer) {
12
- return new VariableDeclarator_1(deserializer(node.id), node.init ? deserializer(node.init) : void 0);
7
+ return new VariableDeclarator_1(deserializer(node.id), node.init ? deserializer(node.init) : void 0, node.range, node.loc);
13
8
  }
14
9
  static visit(node, visitNode) {
15
10
  visitNode(node.id);
16
11
  node.init && visitNode(node.init);
17
12
  }
13
+ constructor(id, init, range, loc) {
14
+ super(range, loc);
15
+ this.id = id;
16
+ this.init = init;
17
+ }
18
18
  getId() {
19
19
  return this.id;
20
20
  }
21
21
  getInit() {
22
22
  return this.init;
23
23
  }
24
- shareVariables(scopeList) {
25
- this.init?.shareVariables(scopeList);
26
- }
27
24
  set(stack, value) {
28
25
  throw new Error(`VariableNode#set() has no implementation.`);
29
26
  }
@@ -67,30 +64,27 @@ let VariableDeclarator = VariableDeclarator_1 = class VariableDeclarator extends
67
64
  };
68
65
  VariableDeclarator = VariableDeclarator_1 = __decorate([
69
66
  Deserializer('VariableDeclarator'),
70
- __metadata("design:paramtypes", [Object, Object])
67
+ __metadata("design:paramtypes", [Object, Object, Array, Object])
71
68
  ], VariableDeclarator);
72
69
  export { VariableDeclarator };
73
70
  let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarationNode extends AbstractExpressionNode {
74
- constructor(declarations, kind) {
75
- super();
76
- this.declarations = declarations;
77
- this.kind = kind;
78
- }
79
71
  static fromJSON(node, deserializer) {
80
- return new VariableDeclarationNode_1(node.declarations.map(deserializer), node.kind);
72
+ return new VariableDeclarationNode_1(node.declarations.map(deserializer), node.kind, node.range, node.loc);
81
73
  }
82
74
  static visit(node, visitNode) {
83
75
  node.declarations.forEach(visitNode);
84
76
  }
77
+ constructor(declarations, kind, range, loc) {
78
+ super(range, loc);
79
+ this.declarations = declarations;
80
+ this.kind = kind;
81
+ }
85
82
  getDeclarations() {
86
83
  return this.declarations;
87
84
  }
88
85
  getKind() {
89
86
  return this.kind;
90
87
  }
91
- shareVariables(scopeList) {
92
- this.declarations.forEach(declaration => declaration.shareVariables(scopeList));
93
- }
94
88
  set(stack, value) {
95
89
  if (Array.isArray(value)) {
96
90
  throw new Error(`VariableDeclarationNode#set() has no implementation.`);
@@ -126,7 +120,7 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
126
120
  };
127
121
  VariableDeclarationNode = VariableDeclarationNode_1 = __decorate([
128
122
  Deserializer('VariableDeclaration'),
129
- __metadata("design:paramtypes", [Array, String])
123
+ __metadata("design:paramtypes", [Array, String, Array, Object])
130
124
  ], VariableDeclarationNode);
131
125
  export { VariableDeclarationNode };
132
126
  //# sourceMappingURL=declares.js.map
@@ -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, 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
+ {"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, SourceLocation\n} from '../../expression.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\tnode.range,\n\t\t\tnode.loc\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(\n\t\tpublic id: DeclarationExpression,\n\t\tpublic init?: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetInit() {\n\t\treturn this.init;\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\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void {\n\t\tnode.declarations.forEach(visitNode);\n\t}\n\tconstructor(\n\t\tprotected declarations: VariableDeclarator[],\n\t\tprotected kind: 'var' | 'let' | 'const',\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetDeclarations() {\n\t\treturn this.declarations;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\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,5 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } from '../../expression.js';
2
- import type { Scope } from '../../../scope/scope.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
3
2
  import type { Stack } from '../../../scope/stack.js';
4
3
  import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
5
4
  import { VariableDeclarationNode } from '../declarations/declares.js';
@@ -17,12 +16,11 @@ export declare class ForNode extends AbstractExpressionNode {
17
16
  private update?;
18
17
  static fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode;
19
18
  static visit(node: ForNode, visitNode: VisitNodeType): void;
20
- constructor(body: ExpressionNode, init?: ExpressionNode | undefined, test?: ExpressionNode | undefined, update?: ExpressionNode | undefined);
19
+ constructor(body: ExpressionNode, init?: ExpressionNode | undefined, test?: ExpressionNode | undefined, update?: ExpressionNode | undefined, range?: [number, number], loc?: SourceLocation);
21
20
  getBody(): ExpressionNode;
22
21
  getInit(): ExpressionNode | undefined;
23
22
  getTest(): ExpressionNode | undefined;
24
23
  getUpdate(): ExpressionNode | undefined;
25
- shareVariables(scopeList: Scope<any>[]): void;
26
24
  set(stack: Stack, value: any): void;
27
25
  get(stack: Stack): ReturnValue | undefined;
28
26
  dependency(computed?: true): ExpressionNode[];
@@ -30,18 +28,17 @@ export declare class ForNode extends AbstractExpressionNode {
30
28
  toString(): string;
31
29
  toJson(): object;
32
30
  }
33
- export declare type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;
31
+ export type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;
34
32
  export declare class ForOfNode extends AbstractExpressionNode {
35
33
  private left;
36
34
  private right;
37
35
  private body;
38
36
  static fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode;
39
37
  static visit(node: ForOfNode, visitNode: VisitNodeType): void;
40
- constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
38
+ constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
41
39
  getLeft(): ForDeclaration;
42
40
  getRight(): ExpressionNode;
43
41
  getBody(): ExpressionNode;
44
- shareVariables(scopeList: Scope<any>[]): void;
45
42
  set(stack: Stack, value: any): void;
46
43
  get(stack: Stack): ReturnValue | undefined;
47
44
  dependency(computed?: true): ExpressionNode[];
@@ -55,11 +52,10 @@ export declare class ForInNode extends AbstractExpressionNode {
55
52
  private body;
56
53
  static fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode;
57
54
  static visit(node: ForInNode, visitNode: VisitNodeType): void;
58
- constructor(left: VariableDeclarationNode | ObjectPattern | ArrayPattern, right: ExpressionNode, body: ExpressionNode);
55
+ constructor(left: VariableDeclarationNode | ObjectPattern | ArrayPattern, right: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
59
56
  getLeft(): ArrayPattern | ObjectPattern | VariableDeclarationNode;
60
57
  getRight(): ExpressionNode;
61
58
  getBody(): ExpressionNode;
62
- shareVariables(scopeList: Scope<any>[]): void;
63
59
  set(stack: Stack, value: any): void;
64
60
  get(stack: Stack): ReturnValue | undefined;
65
61
  dependency(computed?: true): ExpressionNode[];
@@ -73,11 +69,10 @@ export declare class ForAwaitOfNode extends AbstractExpressionNode {
73
69
  private body;
74
70
  static fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode;
75
71
  static visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void;
76
- constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode);
72
+ constructor(left: ForDeclaration, right: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
77
73
  getLeft(): ForDeclaration;
78
74
  getRight(): ExpressionNode;
79
75
  getBody(): ExpressionNode;
80
- shareVariables(scopeList: Scope<any>[]): void;
81
76
  set(stack: Stack, value: any): void;
82
77
  get(stack: Stack): void;
83
78
  dependency(computed?: true): ExpressionNode[];
@@ -9,15 +9,8 @@ import { TerminateReturnType } from '../control/terminate.js';
9
9
  *
10
10
  */
11
11
  let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
12
- constructor(body, init, test, update) {
13
- super();
14
- this.body = body;
15
- this.init = init;
16
- this.test = test;
17
- this.update = update;
18
- }
19
12
  static fromJSON(node, deserializer) {
20
- return new ForNode_1(deserializer(node.body), node.init && deserializer(node.init), node.test && deserializer(node.test), node.update && deserializer(node.update));
13
+ return new ForNode_1(deserializer(node.body), node.init && deserializer(node.init), node.test && deserializer(node.test), node.update && deserializer(node.update), node.range, node.loc);
21
14
  }
22
15
  static visit(node, visitNode) {
23
16
  visitNode(node.body);
@@ -25,6 +18,13 @@ let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
25
18
  node.test && visitNode(node.test);
26
19
  node.update && visitNode(node.update);
27
20
  }
21
+ constructor(body, init, test, update, range, loc) {
22
+ super(range, loc);
23
+ this.body = body;
24
+ this.init = init;
25
+ this.test = test;
26
+ this.update = update;
27
+ }
28
28
  getBody() {
29
29
  return this.body;
30
30
  }
@@ -37,12 +37,6 @@ let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
37
37
  getUpdate() {
38
38
  return this.update;
39
39
  }
40
- shareVariables(scopeList) {
41
- this.init?.shareVariables(scopeList);
42
- this.test?.shareVariables(scopeList);
43
- this.update?.shareVariables(scopeList);
44
- this.body.shareVariables(scopeList);
45
- }
46
40
  set(stack, value) {
47
41
  throw new Error(`ForNode#set() has no implementation.`);
48
42
  }
@@ -96,24 +90,24 @@ let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
96
90
  };
97
91
  ForNode = ForNode_1 = __decorate([
98
92
  Deserializer('ForStatement'),
99
- __metadata("design:paramtypes", [Object, Object, Object, Object])
93
+ __metadata("design:paramtypes", [Object, Object, Object, Object, Array, Object])
100
94
  ], ForNode);
101
95
  export { ForNode };
102
96
  let ForOfNode = ForOfNode_1 = class ForOfNode extends AbstractExpressionNode {
103
- constructor(left, right, body) {
104
- super();
105
- this.left = left;
106
- this.right = right;
107
- this.body = body;
108
- }
109
97
  static fromJSON(node, deserializer) {
110
- return new ForOfNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body));
98
+ return new ForOfNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body), node.range, node.loc);
111
99
  }
112
100
  static visit(node, visitNode) {
113
101
  visitNode(node.left);
114
102
  visitNode(node.right);
115
103
  visitNode(node.body);
116
104
  }
105
+ constructor(left, right, body, range, loc) {
106
+ super(range, loc);
107
+ this.left = left;
108
+ this.right = right;
109
+ this.body = body;
110
+ }
117
111
  getLeft() {
118
112
  return this.left;
119
113
  }
@@ -123,10 +117,6 @@ let ForOfNode = ForOfNode_1 = class ForOfNode extends AbstractExpressionNode {
123
117
  getBody() {
124
118
  return this.body;
125
119
  }
126
- shareVariables(scopeList) {
127
- this.right.shareVariables(scopeList);
128
- this.body.shareVariables(scopeList);
129
- }
130
120
  set(stack, value) {
131
121
  throw new Error(`ForOfNode#set() has no implementation.`);
132
122
  }
@@ -173,25 +163,25 @@ let ForOfNode = ForOfNode_1 = class ForOfNode extends AbstractExpressionNode {
173
163
  };
174
164
  ForOfNode = ForOfNode_1 = __decorate([
175
165
  Deserializer('ForOfStatement'),
176
- __metadata("design:paramtypes", [Object, Object, Object])
166
+ __metadata("design:paramtypes", [Object, Object, Object, Array, Object])
177
167
  ], ForOfNode);
178
168
  export { ForOfNode };
179
169
  let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
180
- // variable of iterable
181
- constructor(left, right, body) {
182
- super();
183
- this.left = left;
184
- this.right = right;
185
- this.body = body;
186
- }
187
170
  static fromJSON(node, deserializer) {
188
- return new ForInNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body));
171
+ return new ForInNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body), node.range, node.loc);
189
172
  }
190
173
  static visit(node, visitNode) {
191
174
  visitNode(node.left);
192
175
  visitNode(node.right);
193
176
  visitNode(node.body);
194
177
  }
178
+ // variable of iterable
179
+ constructor(left, right, body, range, loc) {
180
+ super(range, loc);
181
+ this.left = left;
182
+ this.right = right;
183
+ this.body = body;
184
+ }
195
185
  getLeft() {
196
186
  return this.left;
197
187
  }
@@ -201,10 +191,6 @@ let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
201
191
  getBody() {
202
192
  return this.body;
203
193
  }
204
- shareVariables(scopeList) {
205
- this.right.shareVariables(scopeList);
206
- this.body.shareVariables(scopeList);
207
- }
208
194
  set(stack, value) {
209
195
  throw new Error(`ForOfNode#set() has no implementation.`);
210
196
  }
@@ -251,25 +237,25 @@ let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
251
237
  };
252
238
  ForInNode = ForInNode_1 = __decorate([
253
239
  Deserializer('ForInStatement'),
254
- __metadata("design:paramtypes", [Object, Object, Object])
240
+ __metadata("design:paramtypes", [Object, Object, Object, Array, Object])
255
241
  ], ForInNode);
256
242
  export { ForInNode };
257
243
  let ForAwaitOfNode = ForAwaitOfNode_1 = class ForAwaitOfNode extends AbstractExpressionNode {
258
- // variable of iterable
259
- constructor(left, right, body) {
260
- super();
261
- this.left = left;
262
- this.right = right;
263
- this.body = body;
264
- }
265
244
  static fromJSON(node, deserializer) {
266
- return new ForAwaitOfNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body));
245
+ return new ForAwaitOfNode_1(deserializer(node.left), deserializer(node.right), deserializer(node.body), node.range, node.loc);
267
246
  }
268
247
  static visit(node, visitNode) {
269
248
  visitNode(node.left);
270
249
  visitNode(node.right);
271
250
  visitNode(node.body);
272
251
  }
252
+ // variable of iterable
253
+ constructor(left, right, body, range, loc) {
254
+ super(range, loc);
255
+ this.left = left;
256
+ this.right = right;
257
+ this.body = body;
258
+ }
273
259
  getLeft() {
274
260
  return this.left;
275
261
  }
@@ -279,10 +265,6 @@ let ForAwaitOfNode = ForAwaitOfNode_1 = class ForAwaitOfNode extends AbstractExp
279
265
  getBody() {
280
266
  return this.body;
281
267
  }
282
- shareVariables(scopeList) {
283
- this.right.shareVariables(scopeList);
284
- this.body.shareVariables(scopeList);
285
- }
286
268
  set(stack, value) {
287
269
  throw new Error(`ForAwaitOfNode#set() has no implementation.`);
288
270
  }
@@ -316,7 +298,7 @@ let ForAwaitOfNode = ForAwaitOfNode_1 = class ForAwaitOfNode extends AbstractExp
316
298
  };
317
299
  ForAwaitOfNode = ForAwaitOfNode_1 = __decorate([
318
300
  Deserializer('ForAwaitOfStatement'),
319
- __metadata("design:paramtypes", [Object, Object, Object])
301
+ __metadata("design:paramtypes", [Object, Object, Object, Array, Object])
320
302
  ], ForAwaitOfNode);
321
303
  export { ForAwaitOfNode };
322
304
  //# sourceMappingURL=for.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":"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","sourcesContent":["import 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, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from '../control/terminate.js';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\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('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update)\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t\tthis.test?.shareVariables(scopeList);\n\t\tthis.update?.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from '../control/terminate.js';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\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('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\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\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
@@ -1,5 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } from '../../expression.js';
2
- import type { Scope } from '../../../scope/scope.js';
1
+ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
3
2
  import type { Stack } from '../../../scope/stack.js';
4
3
  import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
5
4
  /**
@@ -13,10 +12,9 @@ export declare class WhileNode extends AbstractExpressionNode {
13
12
  private body;
14
13
  static fromJSON(node: WhileNode, deserializer: NodeDeserializer): WhileNode;
15
14
  static visit(node: WhileNode, visitNode: VisitNodeType): void;
16
- constructor(test: ExpressionNode, body: ExpressionNode);
15
+ constructor(test: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
17
16
  getTest(): ExpressionNode;
18
17
  getBody(): ExpressionNode;
19
- shareVariables(scopeList: Scope<any>[]): void;
20
18
  set(stack: Stack, value: any): void;
21
19
  get(stack: Stack): ReturnValue | undefined;
22
20
  dependency(computed?: true): ExpressionNode[];
@@ -29,10 +27,9 @@ export declare class DoWhileNode extends AbstractExpressionNode {
29
27
  private body;
30
28
  static fromJSON(node: DoWhileNode, deserializer: NodeDeserializer): DoWhileNode;
31
29
  static visit(node: DoWhileNode, visitNode: VisitNodeType): void;
32
- constructor(test: ExpressionNode, body: ExpressionNode);
30
+ constructor(test: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
33
31
  getTest(): ExpressionNode;
34
32
  getBody(): ExpressionNode;
35
- shareVariables(scopeList: Scope<any>[]): void;
36
33
  set(stack: Stack, value: any): void;
37
34
  get(stack: Stack): ReturnValue | undefined;
38
35
  dependency(computed?: true): ExpressionNode[];
@@ -10,28 +10,24 @@ import { TerminateReturnType } from '../control/terminate.js';
10
10
  *
11
11
  */
12
12
  let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
13
- constructor(test, body) {
14
- super();
15
- this.test = test;
16
- this.body = body;
17
- }
18
13
  static fromJSON(node, deserializer) {
19
- return new WhileNode_1(deserializer(node.test), deserializer(node.body));
14
+ return new WhileNode_1(deserializer(node.test), deserializer(node.body), node.range, node.loc);
20
15
  }
21
16
  static visit(node, visitNode) {
22
17
  visitNode(node.body);
23
18
  visitNode(node.test);
24
19
  }
20
+ constructor(test, body, range, loc) {
21
+ super(range, loc);
22
+ this.test = test;
23
+ this.body = body;
24
+ }
25
25
  getTest() {
26
26
  return this.test;
27
27
  }
28
28
  getBody() {
29
29
  return this.body;
30
30
  }
31
- shareVariables(scopeList) {
32
- this.test.shareVariables(scopeList);
33
- this.body.shareVariables(scopeList);
34
- }
35
31
  set(stack, value) {
36
32
  throw new Error(`WhileNode#set() has no implementation.`);
37
33
  }
@@ -76,32 +72,28 @@ let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
76
72
  };
77
73
  WhileNode = WhileNode_1 = __decorate([
78
74
  Deserializer('WhileStatement'),
79
- __metadata("design:paramtypes", [Object, Object])
75
+ __metadata("design:paramtypes", [Object, Object, Array, Object])
80
76
  ], WhileNode);
81
77
  export { WhileNode };
82
78
  let DoWhileNode = DoWhileNode_1 = class DoWhileNode extends AbstractExpressionNode {
83
- constructor(test, body) {
84
- super();
85
- this.test = test;
86
- this.body = body;
87
- }
88
79
  static fromJSON(node, deserializer) {
89
- return new DoWhileNode_1(deserializer(node.test), deserializer(node.body));
80
+ return new DoWhileNode_1(deserializer(node.test), deserializer(node.body), node.range, node.loc);
90
81
  }
91
82
  static visit(node, visitNode) {
92
83
  visitNode(node.test);
93
84
  visitNode(node.body);
94
85
  }
86
+ constructor(test, body, range, loc) {
87
+ super(range, loc);
88
+ this.test = test;
89
+ this.body = body;
90
+ }
95
91
  getTest() {
96
92
  return this.test;
97
93
  }
98
94
  getBody() {
99
95
  return this.body;
100
96
  }
101
- shareVariables(scopeList) {
102
- this.test.shareVariables(scopeList);
103
- this.body.shareVariables(scopeList);
104
- }
105
97
  set(stack, value) {
106
98
  throw new Error(`WhileNode#set() has no implementation.`);
107
99
  }
@@ -145,7 +137,7 @@ let DoWhileNode = DoWhileNode_1 = class DoWhileNode extends AbstractExpressionNo
145
137
  };
146
138
  DoWhileNode = DoWhileNode_1 = __decorate([
147
139
  Deserializer('DoWhileStatement'),
148
- __metadata("design:paramtypes", [Object, Object])
140
+ __metadata("design:paramtypes", [Object, Object, Array, Object])
149
141
  ], DoWhileNode);
150
142
  export { DoWhileNode };
151
143
  //# sourceMappingURL=while.js.map