@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.
- package/README.md +0 -3
- package/api/abstract.d.ts +6 -5
- package/api/abstract.js +15 -12
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +99 -60
- package/api/class/class.js +285 -233
- package/api/class/class.js.map +1 -1
- package/api/class/decorator.d.ts +2 -4
- package/api/class/decorator.js +6 -9
- package/api/class/decorator.js.map +1 -1
- package/api/computing/call.d.ts +2 -4
- package/api/computing/call.js +8 -11
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.d.ts +1 -4
- package/api/computing/debugger.js +2 -5
- package/api/computing/debugger.js.map +1 -1
- package/api/computing/new.d.ts +2 -4
- package/api/computing/new.js +7 -10
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.d.ts +2 -4
- package/api/computing/rest.js +6 -9
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.d.ts +2 -4
- package/api/computing/return.js +6 -9
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.d.ts +2 -4
- package/api/computing/spread.js +6 -9
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.d.ts +4 -8
- package/api/computing/throw.js +18 -23
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.d.ts +2 -4
- package/api/computing/yield.js +7 -10
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.d.ts +3 -6
- package/api/definition/array.js +14 -18
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.d.ts +2 -3
- package/api/definition/bind.js +9 -10
- package/api/definition/bind.js.map +1 -1
- package/api/definition/comment.d.ts +3 -5
- package/api/definition/comment.js +6 -7
- package/api/definition/comment.js.map +1 -1
- package/api/definition/function.d.ts +20 -27
- package/api/definition/function.js +92 -110
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.d.ts +2 -3
- package/api/definition/member.js +14 -11
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.d.ts +5 -9
- package/api/definition/object.js +24 -30
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.d.ts +2 -4
- package/api/definition/statement.js +6 -9
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +15 -40
- package/api/definition/values.js +49 -79
- package/api/definition/values.js.map +1 -1
- package/api/expression.d.ts +40 -26
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +1 -0
- package/api/index.js +1 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +4 -5
- package/api/module/common.js +12 -12
- package/api/module/common.js.map +1 -1
- package/api/module/export.d.ts +5 -10
- package/api/module/export.js +35 -38
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +6 -10
- package/api/module/import.js +28 -32
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.d.ts +3 -3
- package/api/operators/assignment.js +5 -5
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.d.ts +3 -5
- package/api/operators/await.js +7 -10
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.d.ts +1 -1
- package/api/operators/binary.js +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.d.ts +2 -3
- package/api/operators/chaining.js +6 -7
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.d.ts +2 -4
- package/api/operators/comma.js +6 -9
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.d.ts +2 -4
- package/api/operators/grouping.js +6 -9
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.d.ts +1 -1
- package/api/operators/logical.js +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.d.ts +2 -4
- package/api/operators/pipeline.js +8 -15
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.d.ts +2 -4
- package/api/operators/ternary.js +8 -13
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/types.d.ts +1 -1
- package/api/operators/unary.d.ts +3 -5
- package/api/operators/unary.js +7 -10
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.d.ts +3 -5
- package/api/operators/update.js +8 -11
- package/api/operators/update.js.map +1 -1
- package/api/program.d.ts +3 -5
- package/api/program.js +7 -8
- package/api/program.js.map +1 -1
- package/api/statement/control/block.d.ts +2 -4
- package/api/statement/control/block.js +9 -14
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +2 -5
- package/api/statement/control/empty.js +6 -8
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +2 -4
- package/api/statement/control/if.js +8 -13
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +4 -9
- package/api/statement/control/switch.js +19 -28
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +4 -7
- package/api/statement/control/terminate.js +11 -19
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/control/with.d.ts +21 -0
- package/api/statement/control/with.js +67 -0
- package/api/statement/control/with.js.map +1 -0
- package/api/statement/declarations/declares.d.ts +4 -7
- package/api/statement/declarations/declares.js +14 -20
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.d.ts +6 -11
- package/api/statement/iterations/for.js +35 -53
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +3 -6
- package/api/statement/iterations/while.js +14 -22
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +14 -4
- package/scope/finalizer.d.ts +1 -1
- package/scope/pool.d.ts +1 -1
- package/scope/proxy.d.ts +1 -1
- package/scope/proxy.js +1 -0
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +8 -24
- package/scope/scope.js +25 -75
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +15 -3
- package/scope/stack.js +49 -32
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +4 -2
- package/v8/enums.js.map +1 -1
- package/v8/factory.d.ts +148 -0
- package/v8/factory.js +499 -0
- package/v8/factory.js.map +1 -0
- package/v8/inline.d.ts +50 -48
- package/v8/inline.js +322 -300
- package/v8/inline.js.map +1 -1
- package/v8/node.d.ts +141 -0
- package/v8/node.js +2 -0
- package/v8/node.js.map +1 -0
- package/v8/nodes.d.ts +0 -14
- package/v8/nodes.js +1 -152
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +21 -18
- package/v8/parser.js +97 -84
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +2 -1
- package/v8/stream.js +221 -311
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +3 -1
- package/v8/token.js +7 -5
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +1 -1
|
@@ -1,93 +1,79 @@
|
|
|
1
|
-
var
|
|
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
|
|
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
|
|
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.
|
|
20
|
-
|
|
13
|
+
visitNode(node.left);
|
|
14
|
+
visitNode(node.right);
|
|
21
15
|
}
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
constructor(left, right, range, loc) {
|
|
17
|
+
super(range, loc);
|
|
18
|
+
this.left = left;
|
|
19
|
+
this.right = right;
|
|
24
20
|
}
|
|
25
|
-
|
|
26
|
-
return this.
|
|
21
|
+
getLeft() {
|
|
22
|
+
return this.left;
|
|
27
23
|
}
|
|
28
|
-
|
|
29
|
-
this.
|
|
24
|
+
getRight() {
|
|
25
|
+
return this.right;
|
|
30
26
|
}
|
|
31
27
|
set(stack, value) {
|
|
32
|
-
|
|
28
|
+
throw new Error('AssignmentPattern#set() has no implementation.');
|
|
33
29
|
}
|
|
34
30
|
get(stack) {
|
|
35
|
-
throw new Error('
|
|
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
|
|
40
|
+
return [this.right];
|
|
39
41
|
}
|
|
40
42
|
dependencyPath(computed) {
|
|
41
|
-
return this.
|
|
43
|
+
return this.right.dependencyPath(computed) || [];
|
|
42
44
|
}
|
|
43
45
|
toString() {
|
|
44
|
-
|
|
45
|
-
return this.identifier.toString() + init;
|
|
46
|
+
return `${this.left.toString()} = ${this.right.toString()}`;
|
|
46
47
|
}
|
|
47
48
|
toJson() {
|
|
48
49
|
return {
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
left: this.left.toJSON(),
|
|
51
|
+
right: this.right.toJSON()
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
|
-
|
|
55
|
-
Deserializer('
|
|
56
|
-
__metadata("design:paramtypes", [Object, Object])
|
|
57
|
-
],
|
|
58
|
-
export {
|
|
59
|
-
|
|
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
|
-
|
|
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].
|
|
99
|
+
this.params[i].declareVariable(stack, args[i]);
|
|
114
100
|
}
|
|
115
101
|
if (rest) {
|
|
116
|
-
this.params[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(
|
|
124
|
+
getAsyncFunction(gStack) {
|
|
137
125
|
const self = this;
|
|
138
126
|
return async function (...args) {
|
|
139
|
-
const
|
|
127
|
+
const stack = gStack.copyStack();
|
|
128
|
+
stack.pushBlockScope();
|
|
140
129
|
stack.declareVariable('this', this);
|
|
141
|
-
|
|
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(
|
|
176
|
+
getGeneratorFunction(gStack) {
|
|
190
177
|
const self = this;
|
|
191
178
|
return function* (...args) {
|
|
192
|
-
const
|
|
179
|
+
const stack = gStack.copyStack();
|
|
180
|
+
stack.pushBlockScope();
|
|
193
181
|
stack.declareVariable('this', this);
|
|
194
|
-
|
|
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(
|
|
200
|
+
getAsyncGeneratorFunction(gStack) {
|
|
215
201
|
const self = this;
|
|
216
202
|
return async function* (...args) {
|
|
217
|
-
const
|
|
203
|
+
const stack = gStack.copyStack();
|
|
204
|
+
stack.pushBlockScope();
|
|
218
205
|
stack.declareVariable('this', this);
|
|
219
|
-
|
|
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(
|
|
261
|
+
getFunction(gStack) {
|
|
277
262
|
const self = this;
|
|
278
263
|
return function (...args) {
|
|
279
|
-
const
|
|
264
|
+
const stack = gStack.copyStack();
|
|
265
|
+
stack.pushBlockScope();
|
|
280
266
|
stack.declareVariable('this', this);
|
|
281
|
-
|
|
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
|
|
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].
|
|
378
|
+
this.params[i].declareVariable(stack, args[i]);
|
|
395
379
|
}
|
|
396
380
|
if (rest) {
|
|
397
|
-
this.params[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(
|
|
389
|
+
getAsyncArrowFunction(gStack) {
|
|
404
390
|
async (...args) => {
|
|
405
|
-
const
|
|
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(
|
|
440
|
+
getArrowFunction(gStack) {
|
|
457
441
|
return (...args) => {
|
|
458
|
-
const
|
|
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>;
|