@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
@@ -1,93 +1,79 @@
1
- var Param_1, FunctionExpression_1, FunctionDeclaration_1, ArrowFunctionExpression_1;
1
+ var AssignmentPattern_1, FunctionExpression_1, FunctionDeclaration_1, ArrowFunctionExpression_1;
2
2
  import { __decorate, __metadata } from "tslib";
3
- import { Scope } from '../../scope/scope.js';
4
3
  import { AbstractExpressionNode, AwaitPromise, ReturnValue, YieldDelegateValue, YieldValue } from '../abstract.js';
5
4
  import { Deserializer } from '../deserialize/deserialize.js';
6
5
  import { Identifier } from './values.js';
7
6
  import { TerminateReturnType } from '../statement/control/terminate.js';
8
7
  import { RestElement } from '../computing/rest.js';
9
- let Param = Param_1 = class Param extends AbstractExpressionNode {
10
- constructor(identifier, defaultValue) {
11
- super();
12
- this.identifier = identifier;
13
- this.defaultValue = defaultValue;
14
- }
8
+ let AssignmentPattern = AssignmentPattern_1 = class AssignmentPattern extends AbstractExpressionNode {
15
9
  static fromJSON(node, deserializer) {
16
- return new Param_1(deserializer(node.identifier), node.defaultValue ? deserializer(node.defaultValue) : void 0);
10
+ return new AssignmentPattern_1(deserializer(node.left), deserializer(node.right), node.range, node.loc);
17
11
  }
18
12
  static visit(node, visitNode) {
19
- visitNode(node.identifier);
20
- node.defaultValue && visitNode(node.defaultValue);
13
+ visitNode(node.left);
14
+ visitNode(node.right);
21
15
  }
22
- getIdentifier() {
23
- return this.identifier;
16
+ constructor(left, right, range, loc) {
17
+ super(range, loc);
18
+ this.left = left;
19
+ this.right = right;
24
20
  }
25
- getDefaultValue() {
26
- return this.defaultValue;
21
+ getLeft() {
22
+ return this.left;
27
23
  }
28
- shareVariables(scopeList) {
29
- this.defaultValue?.shareVariables(scopeList);
24
+ getRight() {
25
+ return this.right;
30
26
  }
31
27
  set(stack, value) {
32
- this.identifier.declareVariable?.(stack, value);
28
+ throw new Error('AssignmentPattern#set() has no implementation.');
33
29
  }
34
30
  get(stack) {
35
- throw new Error('Param#get() has no implementation.');
31
+ throw new Error('AssignmentPattern#get() has no implementation.');
32
+ }
33
+ declareVariable(stack, value) {
34
+ if (value === undefined) {
35
+ value = this.right.get(stack);
36
+ }
37
+ this.left.declareVariable(stack, value);
36
38
  }
37
39
  dependency(computed) {
38
- return this.defaultValue ? [this.defaultValue] : [];
40
+ return [this.right];
39
41
  }
40
42
  dependencyPath(computed) {
41
- return this.defaultValue?.dependencyPath(computed) || [];
43
+ return this.right.dependencyPath(computed) || [];
42
44
  }
43
45
  toString() {
44
- let init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';
45
- return this.identifier.toString() + init;
46
+ return `${this.left.toString()} = ${this.right.toString()}`;
46
47
  }
47
48
  toJson() {
48
49
  return {
49
- identifier: this.identifier.toJSON(),
50
- defaultValue: this.defaultValue?.toJSON()
50
+ left: this.left.toJSON(),
51
+ right: this.right.toJSON()
51
52
  };
52
53
  }
53
54
  };
54
- Param = Param_1 = __decorate([
55
- Deserializer('Param'),
56
- __metadata("design:paramtypes", [Object, Object])
57
- ], Param);
58
- export { Param };
59
- export class BaseFunctionExpression extends AbstractExpressionNode {
60
- shareVariables(scopeList) {
61
- this.sharedVariables = scopeList;
62
- }
63
- initFunctionScope(stack) {
64
- const scope = Scope.blockScope();
65
- const innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];
66
- innerScopes.push(scope);
67
- innerScopes.forEach(variableScope => stack.pushScope(variableScope));
68
- return innerScopes;
69
- }
70
- clearFunctionScope(stack, innerScopes) {
71
- stack.clearTo(innerScopes[0]);
72
- }
73
- }
74
- let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends BaseFunctionExpression {
75
- constructor(params, body, async, generator, id) {
76
- super();
77
- this.params = params;
78
- this.body = body;
79
- this.async = async;
80
- this.generator = generator;
81
- this.id = id;
82
- }
55
+ AssignmentPattern = AssignmentPattern_1 = __decorate([
56
+ Deserializer('AssignmentPattern'),
57
+ __metadata("design:paramtypes", [Object, Object, Array, Object])
58
+ ], AssignmentPattern);
59
+ export { AssignmentPattern };
60
+ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends AbstractExpressionNode {
83
61
  static fromJSON(node, deserializer) {
84
- return new FunctionExpression_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, node.id ? deserializer(node.id) : void 0);
62
+ return new FunctionExpression_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, node.id ? deserializer(node.id) : void 0, node.range, node.loc);
85
63
  }
86
64
  static visit(node, visitNode) {
87
65
  node.id && visitNode(node.id);
88
66
  node.params.forEach(visitNode);
89
67
  visitNode(node.body);
90
68
  }
69
+ constructor(params, body, async, generator, id, range, loc) {
70
+ super(range, loc);
71
+ this.params = params;
72
+ this.body = body;
73
+ this.async = async;
74
+ this.generator = generator;
75
+ this.id = id;
76
+ }
91
77
  getParams() {
92
78
  return this.params;
93
79
  }
@@ -106,17 +92,19 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
106
92
  set(stack, value) {
107
93
  throw new Error(`${this.constructor.name}#set() has no implementation.`);
108
94
  }
109
- setParameter(stack, args) {
95
+ defineFunctionArguments(stack, args) {
110
96
  const rest = this.params[this.params.length - 1] instanceof RestElement;
111
97
  const limit = rest ? this.params.length - 1 : this.params.length;
112
98
  for (let i = 0; i < limit; i++) {
113
- this.params[i].set(stack, args[i]);
99
+ this.params[i].declareVariable(stack, args[i]);
114
100
  }
115
101
  if (rest) {
116
- this.params[limit].set(stack, args.slice(limit));
102
+ this.params[limit].declareVariable(stack, args.slice(limit));
117
103
  }
118
104
  }
119
105
  get(stack) {
106
+ // freeze scopes
107
+ stack = stack.copyStack();
120
108
  let func;
121
109
  if (this.async && this.generator) {
122
110
  func = this.getAsyncGeneratorFunction(stack);
@@ -133,16 +121,17 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
133
121
  // this.id?.declareVariable(stack, func);
134
122
  return func;
135
123
  }
136
- getAsyncFunction(stack) {
124
+ getAsyncFunction(gStack) {
137
125
  const self = this;
138
126
  return async function (...args) {
139
- const innerScopes = self.initFunctionScope(stack);
127
+ const stack = gStack.copyStack();
128
+ stack.pushBlockScope();
140
129
  stack.declareVariable('this', this);
141
- self.setParameter(stack, args);
130
+ stack.declareVariable('super', this?.constructor?.prototype);
131
+ self.defineFunctionArguments(stack, args);
142
132
  let returnValue;
143
133
  const statements = self.body.getBody();
144
134
  for (const statement of statements) {
145
- statement.shareVariables(innerScopes);
146
135
  returnValue = statement.get(stack);
147
136
  if (stack.awaitPromise?.length > 0) {
148
137
  for (const awaitRef of stack.awaitPromise) {
@@ -179,26 +168,24 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
179
168
  if (returnValue instanceof AwaitPromise) {
180
169
  returnValue = await returnValue.promise;
181
170
  }
182
- self.clearFunctionScope(stack, innerScopes);
183
171
  return returnValue;
184
172
  }
185
173
  }
186
- self.clearFunctionScope(stack, innerScopes);
187
174
  };
188
175
  }
189
- getGeneratorFunction(stack) {
176
+ getGeneratorFunction(gStack) {
190
177
  const self = this;
191
178
  return function* (...args) {
192
- const innerScopes = self.initFunctionScope(stack);
179
+ const stack = gStack.copyStack();
180
+ stack.pushBlockScope();
193
181
  stack.declareVariable('this', this);
194
- self.setParameter(stack, args);
182
+ stack.declareVariable('super', this?.constructor?.prototype);
183
+ self.defineFunctionArguments(stack, args);
195
184
  let returnValue;
196
185
  const statements = self.body.getBody();
197
186
  for (const statement of statements) {
198
- statement.shareVariables(innerScopes);
199
187
  returnValue = statement.get(stack);
200
188
  if (returnValue instanceof ReturnValue) {
201
- self.clearFunctionScope(stack, innerScopes);
202
189
  return returnValue.value;
203
190
  }
204
191
  else if (returnValue instanceof YieldValue) {
@@ -208,19 +195,19 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
208
195
  yield* returnValue.value;
209
196
  }
210
197
  }
211
- self.clearFunctionScope(stack, innerScopes);
212
198
  };
213
199
  }
214
- getAsyncGeneratorFunction(stack) {
200
+ getAsyncGeneratorFunction(gStack) {
215
201
  const self = this;
216
202
  return async function* (...args) {
217
- const innerScopes = self.initFunctionScope(stack);
203
+ const stack = gStack.copyStack();
204
+ stack.pushBlockScope();
218
205
  stack.declareVariable('this', this);
219
- self.setParameter(stack, args);
206
+ stack.declareVariable('super', this?.constructor?.prototype);
207
+ self.defineFunctionArguments(stack, args);
220
208
  let returnValue;
221
209
  const statements = self.body.getBody();
222
210
  for (const statement of statements) {
223
- statement.shareVariables(innerScopes);
224
211
  returnValue = statement.get(stack);
225
212
  if (stack.awaitPromise?.length > 0) {
226
213
  for (const awaitRef of stack.awaitPromise) {
@@ -246,7 +233,6 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
246
233
  }
247
234
  }
248
235
  else if (result instanceof ReturnValue) {
249
- self.clearFunctionScope(stack, innerScopes);
250
236
  returnValue = returnValue.value;
251
237
  if (returnValue instanceof AwaitPromise) {
252
238
  return await returnValue.promise;
@@ -270,26 +256,24 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
270
256
  return returnValue;
271
257
  }
272
258
  }
273
- self.clearFunctionScope(stack, innerScopes);
274
259
  };
275
260
  }
276
- getFunction(stack) {
261
+ getFunction(gStack) {
277
262
  const self = this;
278
263
  return function (...args) {
279
- const innerScopes = self.initFunctionScope(stack);
264
+ const stack = gStack.copyStack();
265
+ stack.pushBlockScope();
280
266
  stack.declareVariable('this', this);
281
- self.setParameter(stack, args);
267
+ stack.declareVariable('super', this?.constructor?.prototype);
268
+ self.defineFunctionArguments(stack, args);
282
269
  let returnValue;
283
270
  const statements = self.body.getBody();
284
271
  for (const statement of statements) {
285
- statement.shareVariables(innerScopes);
286
272
  returnValue = statement.get(stack);
287
273
  if (returnValue instanceof ReturnValue) {
288
- self.clearFunctionScope(stack, innerScopes);
289
274
  return returnValue.value;
290
275
  }
291
276
  }
292
- self.clearFunctionScope(stack, innerScopes);
293
277
  };
294
278
  }
295
279
  dependency(computed) {
@@ -326,20 +310,20 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
326
310
  };
327
311
  FunctionExpression = FunctionExpression_1 = __decorate([
328
312
  Deserializer('FunctionExpression'),
329
- __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier])
313
+ __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier, Array, Object])
330
314
  ], FunctionExpression);
331
315
  export { FunctionExpression };
332
316
  let FunctionDeclaration = FunctionDeclaration_1 = class FunctionDeclaration extends FunctionExpression {
333
317
  static fromJSON(node, deserializer) {
334
- return new FunctionDeclaration_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, deserializer(node.id));
318
+ return new FunctionDeclaration_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, deserializer(node.id), node.range, node.loc);
335
319
  }
336
320
  static visit(node, visitNode) {
337
321
  visitNode(node.id);
338
322
  node.params.forEach(visitNode);
339
323
  visitNode(node.body);
340
324
  }
341
- constructor(params, body, async, generator, id) {
342
- super(params, body, async, generator, id);
325
+ constructor(params, body, async, generator, id, range, loc) {
326
+ super(params, body, async, generator, id, range, loc);
343
327
  }
344
328
  get(stack) {
345
329
  const func = super.get(stack);
@@ -352,22 +336,14 @@ let FunctionDeclaration = FunctionDeclaration_1 = class FunctionDeclaration exte
352
336
  };
353
337
  FunctionDeclaration = FunctionDeclaration_1 = __decorate([
354
338
  Deserializer('FunctionDeclaration'),
355
- __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier])
339
+ __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier, Array, Object])
356
340
  ], FunctionDeclaration);
357
341
  export { FunctionDeclaration };
358
- let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExpression extends BaseFunctionExpression {
359
- constructor(params, body, expression, async) {
360
- super();
361
- this.params = params;
362
- this.body = body;
363
- this.expression = expression;
364
- this.async = async;
365
- this.generator = false;
366
- }
342
+ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExpression extends AbstractExpressionNode {
367
343
  static fromJSON(node, deserializer) {
368
344
  return new ArrowFunctionExpression_1(node.params.map(deserializer), Array.isArray(node.body)
369
345
  ? node.body.map(deserializer)
370
- : deserializer(node.body), node.expression, node.async);
346
+ : deserializer(node.body), node.expression, node.async, node.range, node.loc);
371
347
  }
372
348
  static visit(node, visitNode) {
373
349
  node.params.forEach(visitNode);
@@ -375,6 +351,14 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
375
351
  ? node.body.forEach(visitNode)
376
352
  : visitNode(node.body);
377
353
  }
354
+ constructor(params, body, expression, async, range, loc) {
355
+ super(range, loc);
356
+ this.params = params;
357
+ this.body = body;
358
+ this.expression = expression;
359
+ this.async = async;
360
+ this.generator = false;
361
+ }
378
362
  getParams() {
379
363
  return this.params;
380
364
  }
@@ -391,23 +375,25 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
391
375
  const rest = this.params[this.params.length - 1] instanceof RestElement;
392
376
  const limit = rest ? this.params.length - 1 : this.params.length;
393
377
  for (let i = 0; i < limit; i++) {
394
- this.params[i].set(stack, args[i]);
378
+ this.params[i].declareVariable(stack, args[i]);
395
379
  }
396
380
  if (rest) {
397
- this.params[limit].set(stack, args.slice(limit));
381
+ this.params[limit].declareVariable(stack, args.slice(limit));
398
382
  }
399
383
  }
400
384
  get(stack) {
385
+ // freeze stack
386
+ stack = stack.copyStack();
401
387
  return this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);
402
388
  }
403
- getAsyncArrowFunction(stack) {
389
+ getAsyncArrowFunction(gStack) {
404
390
  async (...args) => {
405
- const innerScopes = this.initFunctionScope(stack);
391
+ const stack = gStack.copyStack();
392
+ stack.pushBlockScope();
406
393
  this.setParameter(stack, args);
407
394
  let returnValue;
408
395
  const statements = Array.isArray(this.body) ? this.body : [this.body];
409
396
  for (const state of statements) {
410
- state.shareVariables(innerScopes);
411
397
  returnValue = state.get(stack);
412
398
  if (stack.awaitPromise?.length > 0) {
413
399
  for (const awaitRef of stack.awaitPromise) {
@@ -442,32 +428,28 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
442
428
  if (returnValue instanceof ReturnValue) {
443
429
  returnValue = returnValue.value;
444
430
  if (returnValue instanceof AwaitPromise) {
445
- this.clearFunctionScope(stack, innerScopes);
446
431
  return await returnValue.promise;
447
432
  }
448
433
  }
449
434
  }
450
- this.clearFunctionScope(stack, innerScopes);
451
435
  if (this.expression) {
452
436
  return returnValue;
453
437
  }
454
438
  };
455
439
  }
456
- getArrowFunction(stack) {
440
+ getArrowFunction(gStack) {
457
441
  return (...args) => {
458
- const innerScopes = this.initFunctionScope(stack);
442
+ const stack = gStack.copyStack();
443
+ stack.pushBlockScope();
459
444
  this.setParameter(stack, args);
460
445
  let returnValue;
461
446
  const statements = Array.isArray(this.body) ? this.body : [this.body];
462
447
  for (const statement of statements) {
463
- statement.shareVariables(innerScopes);
464
448
  returnValue = statement.get(stack);
465
449
  if (returnValue instanceof ReturnValue) {
466
- this.clearFunctionScope(stack, innerScopes);
467
450
  return returnValue.value;
468
451
  }
469
452
  }
470
- this.clearFunctionScope(stack, innerScopes);
471
453
  if (this.expression) {
472
454
  return returnValue;
473
455
  }
@@ -503,7 +485,7 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
503
485
  };
504
486
  ArrowFunctionExpression = ArrowFunctionExpression_1 = __decorate([
505
487
  Deserializer('ArrowFunctionExpression'),
506
- __metadata("design:paramtypes", [Array, Object, Boolean, Boolean])
488
+ __metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Array, Object])
507
489
  ], ArrowFunctionExpression);
508
490
  export { ArrowFunctionExpression };
509
491
  //# sourceMappingURL=function.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeType\n} from '../expression.js';\nimport { Stack } from '../../scope/stack.js';\nimport { Scope } from '../../scope/scope.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { TerminateReturnType } from '../statement/control/terminate.js';\nimport { RestElement } from '../computing/rest.js';\nimport { BlockStatement } from '../statement/control/block.js';\n\n@Deserializer('Param')\nexport class Param extends AbstractExpressionNode {\n\tstatic fromJSON(node: Param, deserializer: NodeDeserializer): Param {\n\t\treturn new Param(\n\t\t\tdeserializer(node.identifier) as DeclarationExpression,\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tstatic visit(node: Param, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.identifier);\n\t\tnode.defaultValue && visitNode(node.defaultValue);\n\t}\n\tconstructor(private identifier: DeclarationExpression, private defaultValue?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetIdentifier() {\n\t\treturn this.identifier;\n\t}\n\tgetDefaultValue() {\n\t\treturn this.defaultValue;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.defaultValue?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.declareVariable?.(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.defaultValue ? [this.defaultValue] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.defaultValue?.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\tlet init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';\n\t\treturn this.identifier.toString() + init;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tidentifier: this.identifier.toJSON(),\n\t\t\tdefaultValue: this.defaultValue?.toJSON()\n\t\t};\n\t}\n}\n\nexport abstract class BaseFunctionExpression extends AbstractExpressionNode {\n\tprivate sharedVariables: Scope<any>[];\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tinitFunctionScope(stack: Stack) {\n\t\tconst scope = Scope.blockScope<object>();\n\t\tconst innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];\n\t\tinnerScopes.push(scope);\n\t\tinnerScopes.forEach(variableScope => stack.pushScope(variableScope));\n\t\treturn innerScopes;\n\t}\n\tclearFunctionScope(stack: Stack, innerScopes: Scope<any>[]) {\n\t\tstack.clearTo(innerScopes[0]);\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t);\n\t}\n\tstatic visit(node: FunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.id && visitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode,\n\t\tprotected async: boolean, protected generator: boolean,\n\t\tprotected id?: Identifier,\n\t) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetGenerator() {\n\t\treturn this.generator;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetAsync() {\n\t\treturn this.async;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tsetParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tlet func: Function;\n\t\tif (this.async && this.generator) {\n\t\t\tfunc = this.getAsyncGeneratorFunction(stack);\n\t\t} else if (this.async) {\n\t\t\tfunc = this.getAsyncFunction(stack);\n\t\t} else if (this.generator) {\n\t\t\tfunc = this.getGeneratorFunction(stack);\n\t\t} else {\n\t\t\tfunc = this.getFunction(stack);\n\t\t}\n\t\t// this.id?.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tprivate getAsyncFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\n\t}\n\tprivate getGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\tyield returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getAsyncGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string = 'function ';\n\t\tif (this.async && this.generator) {\n\t\t\tdeclare = 'async function* ';\n\t\t} else if (this.async) {\n\t\t\tdeclare = 'async function ';\n\t\t} else if (this.generator) {\n\t\t\tdeclare = 'function* ';\n\t\t}\n\t\treturn `${declare}${this.id?.toString() || ''}${this.paramsAndBodyToString()}`;\n\t}\n\tparamsAndBodyToString() {\n\t\treturn `(${this.params.map(param => param.toString()).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.toJSON(),\n\t\t\tasync: this.async,\n\t\t\tid: this.id?.toJSON(),\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression implements DeclarationExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tdeserializer(node.id) as Identifier\n\t\t);\n\t}\n\tstatic visit(node: FunctionDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(\n\t\tparams: ExpressionNode[],\n\t\tbody: ExpressionNode,\n\t\tasync: boolean,\n\t\tgenerator: boolean,\n\t\tid: Identifier) {\n\t\tsuper(params, body, async, generator, id);\n\t}\n\toverride get(stack: Stack): Function {\n\t\tconst func = super.get(stack);\n\t\tthis.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tdeclareVariable(stack: Stack, value: Function) {\n\t\tthis.id.declareVariable(stack, value);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tnode.expression,\n\t\t\tnode.async\n\t\t);\n\t}\n\tstatic visit(node: ArrowFunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.params.forEach(visitNode);\n\t\tArray.isArray(node.body)\n\t\t\t? node.body.forEach(visitNode)\n\t\t\t: visitNode(node.body);\n\t}\n\tprivate generator = false;\n\tconstructor(\n\t\tprivate params: ExpressionNode[],\n\t\tprivate body: ExpressionNode | ExpressionNode[],\n\t\tprivate expression: boolean,\n\t\tprivate async: boolean,) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetExpression() {\n\t\treturn this.expression;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\treturn this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);\n\t}\n\tprivate getAsyncArrowFunction(stack: Stack) {\n\t\tasync (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const state of statements) {\n\t\t\t\tstate.shareVariables(innerScopes);\n\t\t\t\treturnValue = state.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tprivate getArrowFunction(stack: Stack) {\n\t\treturn (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.async ? 'async ' : '';\n\t\tif (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += `(${this.params.map(param => param.toString()).join(', ')})`;\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tasync: this.async,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, SourceLocation, VisitNodeType\n} from '../expression.js';\nimport { Stack } from '../../scope/stack.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { TerminateReturnType } from '../statement/control/terminate.js';\nimport { RestElement } from '../computing/rest.js';\nimport { BlockStatement } from '../statement/control/block.js';\n\n@Deserializer('AssignmentPattern')\nexport class AssignmentPattern extends AbstractExpressionNode implements DeclarationExpression {\n\tstatic fromJSON(node: AssignmentPattern, deserializer: NodeDeserializer): AssignmentPattern {\n\t\treturn new AssignmentPattern(\n\t\t\tdeserializer(node.left) as DeclarationExpression,\n\t\t\tdeserializer(node.right),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: AssignmentPattern, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t}\n\tconstructor(\n\t\tprivate left: DeclarationExpression,\n\t\tprivate right: 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\tset(stack: Stack, value?: Function) {\n\t\tthrow new Error('AssignmentPattern#set() has no implementation.');\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('AssignmentPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, value?: any) {\n\t\tif (value === undefined) {\n\t\t\tvalue = this.right.get(stack);\n\t\t}\n\t\tthis.left.declareVariable(stack, value);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [this.right];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\treturn `${this.left.toString()} = ${this.right.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};\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer) as DeclarationExpression[],\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: FunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.id && visitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprotected params: DeclarationExpression[],\n\t\tprotected body: ExpressionNode,\n\t\tprotected async: boolean,\n\t\tprotected generator: boolean,\n\t\tprotected id?: Identifier,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetGenerator() {\n\t\treturn this.generator;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetAsync() {\n\t\treturn this.async;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tdefineFunctionArguments(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].declareVariable(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].declareVariable(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\t// freeze scopes\n\t\tstack = stack.copyStack();\n\t\tlet func: Function;\n\t\tif (this.async && this.generator) {\n\t\t\tfunc = this.getAsyncGeneratorFunction(stack);\n\t\t} else if (this.async) {\n\t\t\tfunc = this.getAsyncFunction(stack);\n\t\t} else if (this.generator) {\n\t\t\tfunc = this.getGeneratorFunction(stack);\n\t\t} else {\n\t\t\tfunc = this.getFunction(stack);\n\t\t}\n\t\t// this.id?.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tprivate getAsyncFunction(gStack: Stack) {\n\t\tconst self = this;\n\t\treturn async function (this: any, ...args: any[]) {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tstack.declareVariable('this', this);\n\t\t\tstack.declareVariable('super', this?.constructor?.prototype);\n\t\t\tself.defineFunctionArguments(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t}\n\tprivate getGeneratorFunction(gStack: Stack) {\n\t\tconst self = this;\n\t\treturn function* (this: any, ...args: any[]) {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tstack.declareVariable('this', this);\n\t\t\tstack.declareVariable('super', this?.constructor?.prototype);\n\t\t\tself.defineFunctionArguments(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\tyield returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\tprivate getAsyncGeneratorFunction(gStack: Stack) {\n\t\tconst self = this;\n\t\treturn async function* (this: any, ...args: any[]) {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tstack.declareVariable('this', this);\n\t\t\tstack.declareVariable('super', this?.constructor?.prototype);\n\t\t\tself.defineFunctionArguments(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\tprivate getFunction(gStack: Stack) {\n\t\tconst self = this;\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tstack.declareVariable('this', this);\n\t\t\tstack.declareVariable('super', this?.constructor?.prototype);\n\t\t\tself.defineFunctionArguments(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string = 'function ';\n\t\tif (this.async && this.generator) {\n\t\t\tdeclare = 'async function* ';\n\t\t} else if (this.async) {\n\t\t\tdeclare = 'async function ';\n\t\t} else if (this.generator) {\n\t\t\tdeclare = 'function* ';\n\t\t}\n\t\treturn `${declare}${this.id?.toString() || ''}${this.paramsAndBodyToString()}`;\n\t}\n\tparamsAndBodyToString() {\n\t\treturn `(${this.params.map(param => param.toString()).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.toJSON(),\n\t\t\tasync: this.async,\n\t\t\tid: this.id?.toJSON(),\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression implements DeclarationExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer) as DeclarationExpression[],\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tdeserializer(node.id) as Identifier,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: FunctionDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(\n\t\tparams: DeclarationExpression[],\n\t\tbody: ExpressionNode,\n\t\tasync: boolean,\n\t\tgenerator: boolean,\n\t\tid: Identifier,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(params, body, async, generator, id, range, loc);\n\t}\n\toverride get(stack: Stack): Function {\n\t\tconst func = super.get(stack);\n\t\tthis.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tdeclareVariable(stack: Stack, value: Function) {\n\t\tthis.id.declareVariable(stack, value);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer) as DeclarationExpression[],\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tnode.expression,\n\t\t\tnode.async,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: ArrowFunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.params.forEach(visitNode);\n\t\tArray.isArray(node.body)\n\t\t\t? node.body.forEach(visitNode)\n\t\t\t: visitNode(node.body);\n\t}\n\tprivate generator = false;\n\tconstructor(\n\t\tprivate params: DeclarationExpression[],\n\t\tprivate body: ExpressionNode | ExpressionNode[],\n\t\tprivate expression: boolean,\n\t\tprivate async: boolean,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetExpression() {\n\t\treturn this.expression;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].declareVariable(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].declareVariable(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\t// freeze stack\n\t\tstack = stack.copyStack();\n\t\treturn this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);\n\t}\n\tprivate getAsyncArrowFunction(gStack: Stack) {\n\t\tasync (...args: any[]) => {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const state of statements) {\n\t\t\t\treturnValue = state.get(stack);\n\t\t\t\tif (stack.awaitPromise?.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tprivate getArrowFunction(gStack: Stack) {\n\t\treturn (...args: any[]) => {\n\t\t\tconst stack = gStack.copyStack();\n\t\t\tstack.pushBlockScope();\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const statement of statements) {\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.async ? 'async ' : '';\n\t\tif (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += `(${this.params.map(param => param.toString()).join(', ')})`;\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tasync: this.async,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, SourceLocation } 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';
@@ -9,10 +9,9 @@ export declare class MemberExpression extends AbstractExpressionNode implements
9
9
  private optional;
10
10
  static fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression;
11
11
  static visit(node: MemberExpression, visitNode: VisitNodeType): void;
12
- constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean);
12
+ constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean, range?: [number, number], loc?: SourceLocation);
13
13
  getObject(): ExpressionNode;
14
14
  getProperty(): ExpressionNode;
15
- shareVariables(scopeList: Scope<any>[]): void;
16
15
  set(stack: Stack, value: any): any;
17
16
  get(stack: Stack, thisContext?: any): any;
18
17
  findScope<T extends object>(stack: Stack): Scope<T>;