@ibyar/expressions 0.5.2 → 0.5.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +4 -3
- package/api/abstract.d.ts +5 -6
- package/api/abstract.js +8 -3
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +227 -0
- package/api/class/class.js +662 -0
- package/api/class/class.js.map +1 -0
- package/api/class/decorator.d.ts +20 -0
- package/api/class/decorator.js +48 -0
- package/api/class/decorator.js.map +1 -0
- package/api/computing/call.d.ts +3 -1
- package/api/computing/call.js +16 -4
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.d.ts +15 -0
- package/api/computing/debugger.js +35 -0
- package/api/computing/debugger.js.map +1 -0
- package/api/computing/new.d.ts +2 -1
- package/api/computing/new.js +4 -0
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.d.ts +6 -6
- package/api/computing/rest.js +5 -2
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.d.ts +6 -1
- package/api/computing/return.js +8 -0
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.d.ts +2 -1
- package/api/computing/spread.js +5 -2
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.d.ts +6 -1
- package/api/computing/throw.js +7 -0
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.d.ts +2 -1
- package/api/computing/yield.js +3 -0
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.d.ts +12 -12
- package/api/definition/array.js +31 -25
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.d.ts +8 -2
- package/api/definition/bind.js +7 -1
- package/api/definition/bind.js.map +1 -1
- package/api/definition/function.d.ts +40 -51
- package/api/definition/function.js +292 -309
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.d.ts +2 -2
- package/api/definition/member.js +1 -1
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.d.ts +15 -12
- package/api/definition/object.js +43 -13
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.d.ts +2 -2
- package/api/definition/statement.js +7 -3
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +44 -50
- package/api/definition/values.js +87 -149
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +7 -1
- package/api/deserialize/deserialize.js +9 -1
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/deserialize/type-store.d.ts +2 -2
- package/api/deserialize/type-store.js.map +1 -1
- package/api/expression.d.ts +159 -18
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +2 -0
- package/api/index.js +2 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +29 -0
- package/api/module/common.js +71 -0
- package/api/module/common.js.map +1 -0
- package/api/module/export.d.ts +129 -25
- package/api/module/export.js +333 -58
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +114 -25
- package/api/module/import.js +279 -68
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.d.ts +2 -2
- package/api/operators/assignment.js +1 -1
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.d.ts +2 -2
- package/api/operators/await.js +1 -1
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.d.ts +2 -2
- package/api/operators/binary.js +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.d.ts +2 -2
- package/api/operators/chaining.js +1 -1
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.d.ts +2 -2
- package/api/operators/comma.js +2 -2
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.d.ts +9 -2
- package/api/operators/grouping.js +8 -1
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.d.ts +2 -2
- package/api/operators/logical.js +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.d.ts +14 -2
- package/api/operators/pipeline.js +13 -1
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.d.ts +2 -2
- package/api/operators/ternary.js +1 -1
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/unary.d.ts +3 -3
- package/api/operators/unary.js +7 -3
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.d.ts +2 -2
- package/api/operators/update.js +1 -1
- package/api/operators/update.js.map +1 -1
- package/api/{app/program.d.ts → program.d.ts} +8 -9
- package/api/program.js +45 -0
- package/api/program.js.map +1 -0
- package/api/statement/control/block.d.ts +8 -5
- package/api/statement/control/block.js +26 -23
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +8 -1
- package/api/statement/control/empty.js +7 -0
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +7 -2
- package/api/statement/control/if.js +6 -1
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +10 -5
- package/api/statement/control/switch.js +22 -9
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +46 -13
- package/api/statement/control/terminate.js +89 -20
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.d.ts +17 -16
- package/api/statement/declarations/declares.js +24 -19
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.d.ts +10 -5
- package/api/statement/iterations/for.js +42 -23
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +9 -3
- package/api/statement/iterations/while.js +27 -13
- package/api/statement/iterations/while.js.map +1 -1
- package/api/utils.d.ts +5 -0
- package/api/utils.js +4 -0
- package/api/utils.js.map +1 -0
- package/package.json +5 -5
- package/scope/finalizer.d.ts +4 -0
- package/scope/finalizer.js +11 -0
- package/scope/finalizer.js.map +1 -0
- package/scope/proxy.d.ts +5 -3
- package/scope/proxy.js +26 -26
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +108 -51
- package/scope/scope.js +72 -134
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +117 -26
- package/scope/stack.js +154 -102
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +204 -0
- package/v8/enums.js +406 -0
- package/v8/enums.js.map +1 -0
- package/v8/index.d.ts +2 -1
- package/v8/index.js +2 -1
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +213 -0
- package/v8/inline.js +2375 -0
- package/v8/inline.js.map +1 -0
- package/v8/nodes.d.ts +8 -7
- package/v8/nodes.js +39 -64
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +49 -151
- package/v8/parser.js +839 -1607
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +39 -3
- package/v8/stream.js +685 -171
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +244 -9
- package/v8/token.js +315 -47
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +3 -0
- package/visit/visitor.js +4 -7
- package/visit/visitor.js.map +1 -1
- package/api/app/class.d.ts +0 -117
- package/api/app/class.js +0 -292
- package/api/app/class.js.map +0 -1
- package/api/app/program.js +0 -39
- package/api/app/program.js.map +0 -1
- package/api/module/module.d.ts +0 -26
- package/api/module/module.js +0 -63
- package/api/module/module.js.map +0 -1
- package/v8/app.d.ts +0 -0
- package/v8/app.js +0 -2
- package/v8/app.js.map +0 -1
|
@@ -3,29 +3,9 @@ import { __decorate, __metadata } from "tslib";
|
|
|
3
3
|
import { Scope } from '../../scope/scope.js';
|
|
4
4
|
import { AbstractExpressionNode, AwaitPromise, ReturnValue, YieldDelegateValue, YieldValue } from '../abstract.js';
|
|
5
5
|
import { Deserializer } from '../deserialize/deserialize.js';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
FunctionKind["NORMAL"] = "NORMAL";
|
|
10
|
-
FunctionKind["ASYNC"] = "ASYNC";
|
|
11
|
-
FunctionKind["GENERATOR"] = "GENERATOR";
|
|
12
|
-
FunctionKind["ASYNC_GENERATOR"] = "ASYNC_GENERATOR";
|
|
13
|
-
FunctionKind["CONCISE"] = "CONCISE";
|
|
14
|
-
FunctionKind["ASYNC_CONCISE"] = "ASYNC_CONCISE";
|
|
15
|
-
FunctionKind["CONCISE_GENERATOR"] = "CONCISE_GENERATOR";
|
|
16
|
-
FunctionKind["ASYNC_CONCISE_GENERATOR"] = "ASYNC_CONCISE_GENERATOR";
|
|
17
|
-
FunctionKind["STATIC_CONCISE"] = "STATIC_CONCISE";
|
|
18
|
-
FunctionKind["STATIC_ASYNC_CONCISE"] = "STATIC_ASYNC_CONCISE";
|
|
19
|
-
FunctionKind["STATIC_CONCISE_GENERATOR"] = "STATIC_CONCISE_GENERATOR";
|
|
20
|
-
FunctionKind["STATIC_ASYNC_CONCISE_GENERATOR"] = "STATIC_ASYNC_CONCISE_GENERATOR";
|
|
21
|
-
FunctionKind["DERIVED_CONSTRUCTOR"] = "DERIVED_CONSTRUCTOR";
|
|
22
|
-
FunctionKind["BASE_CONSTRUCTOR"] = "BASE_CONSTRUCTOR";
|
|
23
|
-
})(FunctionKind || (FunctionKind = {}));
|
|
24
|
-
export var ArrowFunctionType;
|
|
25
|
-
(function (ArrowFunctionType) {
|
|
26
|
-
ArrowFunctionType["NORMAL"] = "NORMAL";
|
|
27
|
-
ArrowFunctionType["ASYNC"] = "ASYNC";
|
|
28
|
-
})(ArrowFunctionType || (ArrowFunctionType = {}));
|
|
6
|
+
import { Identifier } from './values.js';
|
|
7
|
+
import { TerminateReturnType } from '../statement/control/terminate.js';
|
|
8
|
+
import { RestElement } from '../computing/rest.js';
|
|
29
9
|
let Param = Param_1 = class Param extends AbstractExpressionNode {
|
|
30
10
|
constructor(identifier, defaultValue) {
|
|
31
11
|
super();
|
|
@@ -35,7 +15,7 @@ let Param = Param_1 = class Param extends AbstractExpressionNode {
|
|
|
35
15
|
static fromJSON(node, deserializer) {
|
|
36
16
|
return new Param_1(deserializer(node.identifier), node.defaultValue ? deserializer(node.defaultValue) : void 0);
|
|
37
17
|
}
|
|
38
|
-
static visit(node, visitNode
|
|
18
|
+
static visit(node, visitNode) {
|
|
39
19
|
visitNode(node.identifier);
|
|
40
20
|
node.defaultValue && visitNode(node.defaultValue);
|
|
41
21
|
}
|
|
@@ -49,7 +29,7 @@ let Param = Param_1 = class Param extends AbstractExpressionNode {
|
|
|
49
29
|
this.defaultValue?.shareVariables(scopeList);
|
|
50
30
|
}
|
|
51
31
|
set(stack, value) {
|
|
52
|
-
this.identifier.declareVariable?.(stack,
|
|
32
|
+
this.identifier.declareVariable?.(stack, value);
|
|
53
33
|
}
|
|
54
34
|
get(stack) {
|
|
55
35
|
throw new Error('Param#get() has no implementation.');
|
|
@@ -76,12 +56,12 @@ Param = Param_1 = __decorate([
|
|
|
76
56
|
__metadata("design:paramtypes", [Object, Object])
|
|
77
57
|
], Param);
|
|
78
58
|
export { Param };
|
|
79
|
-
export class
|
|
59
|
+
export class BaseFunctionExpression extends AbstractExpressionNode {
|
|
80
60
|
shareVariables(scopeList) {
|
|
81
61
|
this.sharedVariables = scopeList;
|
|
82
62
|
}
|
|
83
63
|
initFunctionScope(stack) {
|
|
84
|
-
const scope = Scope.
|
|
64
|
+
const scope = Scope.blockScope();
|
|
85
65
|
const innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];
|
|
86
66
|
innerScopes.push(scope);
|
|
87
67
|
innerScopes.forEach(variableScope => stack.pushScope(variableScope));
|
|
@@ -91,23 +71,22 @@ export class FunctionBaseExpression extends AbstractExpressionNode {
|
|
|
91
71
|
stack.clearTo(innerScopes[0]);
|
|
92
72
|
}
|
|
93
73
|
}
|
|
94
|
-
let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
|
|
95
|
-
constructor(params, body,
|
|
74
|
+
let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends BaseFunctionExpression {
|
|
75
|
+
constructor(params, body, async, generator, id) {
|
|
96
76
|
super();
|
|
97
77
|
this.params = params;
|
|
98
78
|
this.body = body;
|
|
99
|
-
this.
|
|
100
|
-
this.id = id;
|
|
101
|
-
this.rest = rest;
|
|
79
|
+
this.async = async;
|
|
102
80
|
this.generator = generator;
|
|
81
|
+
this.id = id;
|
|
103
82
|
}
|
|
104
83
|
static fromJSON(node, deserializer) {
|
|
105
|
-
return new FunctionExpression_1(node.params.map(deserializer), node.body
|
|
84
|
+
return new FunctionExpression_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, node.id ? deserializer(node.id) : void 0);
|
|
106
85
|
}
|
|
107
|
-
static visit(node, visitNode
|
|
86
|
+
static visit(node, visitNode) {
|
|
108
87
|
node.id && visitNode(node.id);
|
|
109
|
-
|
|
110
|
-
|
|
88
|
+
node.params.forEach(visitNode);
|
|
89
|
+
visitNode(node.body);
|
|
111
90
|
}
|
|
112
91
|
getParams() {
|
|
113
92
|
return this.params;
|
|
@@ -115,182 +94,203 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
|
|
|
115
94
|
getBody() {
|
|
116
95
|
return this.body;
|
|
117
96
|
}
|
|
118
|
-
|
|
119
|
-
return this.
|
|
97
|
+
getGenerator() {
|
|
98
|
+
return this.generator;
|
|
120
99
|
}
|
|
121
100
|
getId() {
|
|
122
101
|
return this.id;
|
|
123
102
|
}
|
|
124
|
-
|
|
125
|
-
return this.
|
|
103
|
+
getAsync() {
|
|
104
|
+
return this.async;
|
|
126
105
|
}
|
|
127
106
|
set(stack, value) {
|
|
128
107
|
throw new Error(`${this.constructor.name}#set() has no implementation.`);
|
|
129
108
|
}
|
|
130
109
|
setParameter(stack, args) {
|
|
131
|
-
const
|
|
110
|
+
const rest = this.params[this.params.length - 1] instanceof RestElement;
|
|
111
|
+
const limit = rest ? this.params.length - 1 : this.params.length;
|
|
132
112
|
for (let i = 0; i < limit; i++) {
|
|
133
113
|
this.params[i].set(stack, args[i]);
|
|
134
114
|
}
|
|
135
|
-
if (
|
|
115
|
+
if (rest) {
|
|
136
116
|
this.params[limit].set(stack, args.slice(limit));
|
|
137
117
|
}
|
|
138
118
|
}
|
|
139
119
|
get(stack) {
|
|
140
|
-
const self = this;
|
|
141
120
|
let func;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
121
|
+
if (this.async && this.generator) {
|
|
122
|
+
func = this.getAsyncGeneratorFunction(stack);
|
|
123
|
+
}
|
|
124
|
+
else if (this.async) {
|
|
125
|
+
func = this.getAsyncFunction(stack);
|
|
126
|
+
}
|
|
127
|
+
else if (this.generator) {
|
|
128
|
+
func = this.getGeneratorFunction(stack);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
func = this.getFunction(stack);
|
|
132
|
+
}
|
|
133
|
+
// this.id?.declareVariable(stack, func);
|
|
134
|
+
return func;
|
|
135
|
+
}
|
|
136
|
+
getAsyncFunction(stack) {
|
|
137
|
+
const self = this;
|
|
138
|
+
return async function (...args) {
|
|
139
|
+
const innerScopes = self.initFunctionScope(stack);
|
|
140
|
+
stack.declareVariable('this', this);
|
|
141
|
+
self.setParameter(stack, args);
|
|
142
|
+
let returnValue;
|
|
143
|
+
const statements = self.body.getBody();
|
|
144
|
+
for (const statement of statements) {
|
|
145
|
+
statement.shareVariables(innerScopes);
|
|
146
|
+
returnValue = statement.get(stack);
|
|
147
|
+
if (stack.awaitPromise.length > 0) {
|
|
148
|
+
for (const awaitRef of stack.awaitPromise) {
|
|
149
|
+
const awaitValue = await awaitRef.promise;
|
|
150
|
+
if (awaitRef.declareVariable) {
|
|
151
|
+
awaitRef.node.declareVariable(stack, awaitValue);
|
|
163
152
|
}
|
|
164
|
-
else
|
|
165
|
-
|
|
166
|
-
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
167
|
-
if (ContinueStatement.ContinueSymbol === result) {
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
else if (BreakStatement.BreakSymbol === result) {
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
else if (result instanceof ReturnValue) {
|
|
174
|
-
returnValue = result;
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
stack.forAwaitAsyncIterable = undefined;
|
|
153
|
+
else {
|
|
154
|
+
awaitRef.node.set(stack, awaitValue);
|
|
179
155
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
156
|
+
}
|
|
157
|
+
stack.awaitPromise.splice(0);
|
|
158
|
+
}
|
|
159
|
+
else if (stack.forAwaitAsyncIterable) {
|
|
160
|
+
for await (let iterator of stack.forAwaitAsyncIterable.iterable) {
|
|
161
|
+
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
162
|
+
if (result instanceof TerminateReturnType) {
|
|
163
|
+
if (result.type === 'continue') {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
break;
|
|
186
168
|
}
|
|
187
169
|
}
|
|
170
|
+
else if (result instanceof ReturnValue) {
|
|
171
|
+
returnValue = result;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
188
174
|
}
|
|
175
|
+
stack.forAwaitAsyncIterable = undefined;
|
|
176
|
+
}
|
|
177
|
+
if (returnValue instanceof ReturnValue) {
|
|
178
|
+
returnValue = returnValue.value;
|
|
179
|
+
if (returnValue instanceof AwaitPromise) {
|
|
180
|
+
returnValue = await returnValue.promise;
|
|
181
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
182
|
+
return returnValue;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
getGeneratorFunction(stack) {
|
|
190
|
+
const self = this;
|
|
191
|
+
return function* (...args) {
|
|
192
|
+
const innerScopes = self.initFunctionScope(stack);
|
|
193
|
+
stack.declareVariable('this', this);
|
|
194
|
+
self.setParameter(stack, args);
|
|
195
|
+
let returnValue;
|
|
196
|
+
const statements = self.body.getBody();
|
|
197
|
+
for (const statement of statements) {
|
|
198
|
+
statement.shareVariables(innerScopes);
|
|
199
|
+
returnValue = statement.get(stack);
|
|
200
|
+
if (returnValue instanceof ReturnValue) {
|
|
189
201
|
self.clearFunctionScope(stack, innerScopes);
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
202
|
+
return returnValue.value;
|
|
203
|
+
}
|
|
204
|
+
else if (returnValue instanceof YieldValue) {
|
|
205
|
+
yield returnValue.value;
|
|
206
|
+
}
|
|
207
|
+
else if (returnValue instanceof YieldDelegateValue) {
|
|
208
|
+
yield* returnValue.value;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
getAsyncGeneratorFunction(stack) {
|
|
215
|
+
const self = this;
|
|
216
|
+
return async function* (...args) {
|
|
217
|
+
const innerScopes = self.initFunctionScope(stack);
|
|
218
|
+
stack.declareVariable('this', this);
|
|
219
|
+
self.setParameter(stack, args);
|
|
220
|
+
let returnValue;
|
|
221
|
+
const statements = self.body.getBody();
|
|
222
|
+
for (const statement of statements) {
|
|
223
|
+
statement.shareVariables(innerScopes);
|
|
224
|
+
returnValue = statement.get(stack);
|
|
225
|
+
if (stack.awaitPromise.length > 0) {
|
|
226
|
+
for (const awaitRef of stack.awaitPromise) {
|
|
227
|
+
const awaitValue = await awaitRef.promise;
|
|
228
|
+
if (awaitRef.declareVariable) {
|
|
229
|
+
awaitRef.node.declareVariable(stack, awaitValue);
|
|
207
230
|
}
|
|
208
|
-
else
|
|
209
|
-
|
|
231
|
+
else {
|
|
232
|
+
awaitRef.node.set(stack, awaitValue);
|
|
210
233
|
}
|
|
211
234
|
}
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
let returnValue;
|
|
221
|
-
for (const statement of self.body) {
|
|
222
|
-
statement.shareVariables(innerScopes);
|
|
223
|
-
returnValue = statement.get(stack);
|
|
224
|
-
if (stack.awaitPromise.length > 0) {
|
|
225
|
-
for (const awaitRef of stack.awaitPromise) {
|
|
226
|
-
const awaitValue = await awaitRef.promise;
|
|
227
|
-
if (awaitRef.declareVariable) {
|
|
228
|
-
awaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
awaitRef.node.set(stack, awaitValue);
|
|
232
|
-
}
|
|
235
|
+
stack.awaitPromise.splice(0);
|
|
236
|
+
}
|
|
237
|
+
else if (stack.forAwaitAsyncIterable) {
|
|
238
|
+
for await (let iterator of stack.forAwaitAsyncIterable.iterable) {
|
|
239
|
+
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
240
|
+
if (result instanceof TerminateReturnType) {
|
|
241
|
+
if (result.type === 'continue') {
|
|
242
|
+
continue;
|
|
233
243
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
else if (stack.forAwaitAsyncIterable) {
|
|
237
|
-
for await (let iterator of stack.forAwaitAsyncIterable.iterable) {
|
|
238
|
-
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
239
|
-
if (ContinueStatement.ContinueSymbol === result) {
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
else if (BreakStatement.BreakSymbol === result) {
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
else if (result instanceof ReturnValue) {
|
|
246
|
-
self.clearFunctionScope(stack, innerScopes);
|
|
247
|
-
returnValue = returnValue.value;
|
|
248
|
-
if (returnValue instanceof AwaitPromise) {
|
|
249
|
-
return await returnValue.promise;
|
|
250
|
-
}
|
|
251
|
-
else if (returnValue instanceof YieldValue) {
|
|
252
|
-
yield returnValue.value;
|
|
253
|
-
}
|
|
254
|
-
else if (returnValue instanceof YieldDelegateValue) {
|
|
255
|
-
yield* returnValue.value;
|
|
256
|
-
}
|
|
257
|
-
return returnValue;
|
|
258
|
-
}
|
|
244
|
+
else {
|
|
245
|
+
break;
|
|
259
246
|
}
|
|
260
|
-
stack.forAwaitAsyncIterable = undefined;
|
|
261
247
|
}
|
|
262
|
-
if (
|
|
248
|
+
else if (result instanceof ReturnValue) {
|
|
249
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
263
250
|
returnValue = returnValue.value;
|
|
264
251
|
if (returnValue instanceof AwaitPromise) {
|
|
265
252
|
return await returnValue.promise;
|
|
266
253
|
}
|
|
254
|
+
else if (returnValue instanceof YieldValue) {
|
|
255
|
+
yield returnValue.value;
|
|
256
|
+
}
|
|
257
|
+
else if (returnValue instanceof YieldDelegateValue) {
|
|
258
|
+
yield* returnValue.value;
|
|
259
|
+
}
|
|
267
260
|
return returnValue;
|
|
268
261
|
}
|
|
269
262
|
}
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const innerScopes = self.initFunctionScope(stack);
|
|
277
|
-
stack.declareVariable('function', 'this', this);
|
|
278
|
-
self.setParameter(stack, args);
|
|
279
|
-
let returnValue;
|
|
280
|
-
for (const statement of self.body) {
|
|
281
|
-
statement.shareVariables(innerScopes);
|
|
282
|
-
returnValue = statement.get(stack);
|
|
283
|
-
if (returnValue instanceof ReturnValue) {
|
|
284
|
-
self.clearFunctionScope(stack, innerScopes);
|
|
285
|
-
return returnValue.value;
|
|
286
|
-
}
|
|
263
|
+
stack.forAwaitAsyncIterable = undefined;
|
|
264
|
+
}
|
|
265
|
+
if (returnValue instanceof ReturnValue) {
|
|
266
|
+
returnValue = returnValue.value;
|
|
267
|
+
if (returnValue instanceof AwaitPromise) {
|
|
268
|
+
return await returnValue.promise;
|
|
287
269
|
}
|
|
270
|
+
return returnValue;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
getFunction(stack) {
|
|
277
|
+
const self = this;
|
|
278
|
+
return function (...args) {
|
|
279
|
+
const innerScopes = self.initFunctionScope(stack);
|
|
280
|
+
stack.declareVariable('this', this);
|
|
281
|
+
self.setParameter(stack, args);
|
|
282
|
+
let returnValue;
|
|
283
|
+
const statements = self.body.getBody();
|
|
284
|
+
for (const statement of statements) {
|
|
285
|
+
statement.shareVariables(innerScopes);
|
|
286
|
+
returnValue = statement.get(stack);
|
|
287
|
+
if (returnValue instanceof ReturnValue) {
|
|
288
288
|
self.clearFunctionScope(stack, innerScopes);
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
289
|
+
return returnValue.value;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
self.clearFunctionScope(stack, innerScopes);
|
|
293
|
+
};
|
|
294
294
|
}
|
|
295
295
|
dependency(computed) {
|
|
296
296
|
return this.params.flatMap(param => param.dependency());
|
|
@@ -299,83 +299,80 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
|
|
|
299
299
|
return this.params.flatMap(param => param.dependencyPath(computed));
|
|
300
300
|
}
|
|
301
301
|
toString() {
|
|
302
|
-
let declare;
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
declare = 'async function';
|
|
306
|
-
break;
|
|
307
|
-
case FunctionKind.GENERATOR:
|
|
308
|
-
declare = 'function*';
|
|
309
|
-
break;
|
|
310
|
-
case FunctionKind.ASYNC_GENERATOR:
|
|
311
|
-
declare = 'async function*';
|
|
312
|
-
break;
|
|
313
|
-
default:
|
|
314
|
-
case FunctionKind.NORMAL:
|
|
315
|
-
declare = 'function';
|
|
316
|
-
break;
|
|
302
|
+
let declare = 'function ';
|
|
303
|
+
if (this.async && this.generator) {
|
|
304
|
+
declare = 'async function* ';
|
|
317
305
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
306
|
+
else if (this.async) {
|
|
307
|
+
declare = 'async function ';
|
|
308
|
+
}
|
|
309
|
+
else if (this.generator) {
|
|
310
|
+
declare = 'function* ';
|
|
311
|
+
}
|
|
312
|
+
return `${declare}${this.id?.toString() || ''}${this.paramsAndBodyToString()}`;
|
|
313
|
+
}
|
|
314
|
+
paramsAndBodyToString() {
|
|
315
|
+
return `(${this.params.map(param => param.toString()).join(', ')}) ${this.body.toString()}`;
|
|
326
316
|
}
|
|
327
317
|
toJson() {
|
|
328
318
|
return {
|
|
329
319
|
params: this.params.map(param => param.toJSON()),
|
|
330
|
-
body: this.body.
|
|
331
|
-
|
|
320
|
+
body: this.body.toJSON(),
|
|
321
|
+
async: this.async,
|
|
332
322
|
id: this.id?.toJSON(),
|
|
333
|
-
rest: this.rest,
|
|
334
323
|
generator: this.generator
|
|
335
324
|
};
|
|
336
325
|
}
|
|
337
326
|
};
|
|
338
327
|
FunctionExpression = FunctionExpression_1 = __decorate([
|
|
339
328
|
Deserializer('FunctionExpression'),
|
|
340
|
-
__metadata("design:paramtypes", [Array,
|
|
329
|
+
__metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier])
|
|
341
330
|
], FunctionExpression);
|
|
342
331
|
export { FunctionExpression };
|
|
343
332
|
let FunctionDeclaration = FunctionDeclaration_1 = class FunctionDeclaration extends FunctionExpression {
|
|
344
|
-
constructor(params, body, kind, id, rest, generator) {
|
|
345
|
-
super(params, body, kind, id, rest, generator);
|
|
346
|
-
}
|
|
347
333
|
static fromJSON(node, deserializer) {
|
|
348
|
-
return new FunctionDeclaration_1(node.params.map(deserializer), node.body
|
|
334
|
+
return new FunctionDeclaration_1(node.params.map(deserializer), deserializer(node.body), node.async, node.generator, deserializer(node.id));
|
|
349
335
|
}
|
|
350
|
-
static visit(node, visitNode
|
|
336
|
+
static visit(node, visitNode) {
|
|
351
337
|
visitNode(node.id);
|
|
352
|
-
|
|
353
|
-
|
|
338
|
+
node.params.forEach(visitNode);
|
|
339
|
+
visitNode(node.body);
|
|
340
|
+
}
|
|
341
|
+
constructor(params, body, async, generator, id) {
|
|
342
|
+
super(params, body, async, generator, id);
|
|
343
|
+
}
|
|
344
|
+
get(stack) {
|
|
345
|
+
const func = super.get(stack);
|
|
346
|
+
this.declareVariable(stack, func);
|
|
347
|
+
return func;
|
|
348
|
+
}
|
|
349
|
+
declareVariable(stack, value) {
|
|
350
|
+
this.id.declareVariable(stack, value);
|
|
354
351
|
}
|
|
355
352
|
};
|
|
356
353
|
FunctionDeclaration = FunctionDeclaration_1 = __decorate([
|
|
357
354
|
Deserializer('FunctionDeclaration'),
|
|
358
|
-
__metadata("design:paramtypes", [Array,
|
|
355
|
+
__metadata("design:paramtypes", [Array, Object, Boolean, Boolean, Identifier])
|
|
359
356
|
], FunctionDeclaration);
|
|
360
357
|
export { FunctionDeclaration };
|
|
361
|
-
let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExpression extends
|
|
362
|
-
constructor(params, body,
|
|
358
|
+
let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExpression extends BaseFunctionExpression {
|
|
359
|
+
constructor(params, body, expression, async) {
|
|
363
360
|
super();
|
|
364
361
|
this.params = params;
|
|
365
362
|
this.body = body;
|
|
366
|
-
this.
|
|
367
|
-
this.
|
|
368
|
-
this.generator =
|
|
363
|
+
this.expression = expression;
|
|
364
|
+
this.async = async;
|
|
365
|
+
this.generator = false;
|
|
369
366
|
}
|
|
370
367
|
static fromJSON(node, deserializer) {
|
|
371
368
|
return new ArrowFunctionExpression_1(node.params.map(deserializer), Array.isArray(node.body)
|
|
372
369
|
? node.body.map(deserializer)
|
|
373
|
-
: deserializer(node.body),
|
|
370
|
+
: deserializer(node.body), node.expression, node.async);
|
|
374
371
|
}
|
|
375
|
-
static visit(node, visitNode
|
|
376
|
-
|
|
372
|
+
static visit(node, visitNode) {
|
|
373
|
+
node.params.forEach(visitNode);
|
|
377
374
|
Array.isArray(node.body)
|
|
378
|
-
?
|
|
375
|
+
? node.body.forEach(visitNode)
|
|
379
376
|
: visitNode(node.body);
|
|
380
377
|
}
|
|
381
378
|
getParams() {
|
|
@@ -384,98 +381,97 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
|
|
|
384
381
|
getBody() {
|
|
385
382
|
return this.body;
|
|
386
383
|
}
|
|
387
|
-
|
|
388
|
-
return this.
|
|
384
|
+
getExpression() {
|
|
385
|
+
return this.expression;
|
|
389
386
|
}
|
|
390
387
|
set(stack, value) {
|
|
391
388
|
throw new Error('ArrowFunctionExpression#set() has no implementation.');
|
|
392
389
|
}
|
|
393
390
|
setParameter(stack, args) {
|
|
394
|
-
const
|
|
391
|
+
const rest = this.params[this.params.length - 1] instanceof RestElement;
|
|
392
|
+
const limit = rest ? this.params.length - 1 : this.params.length;
|
|
395
393
|
for (let i = 0; i < limit; i++) {
|
|
396
394
|
this.params[i].set(stack, args[i]);
|
|
397
395
|
}
|
|
398
|
-
if (
|
|
396
|
+
if (rest) {
|
|
399
397
|
this.params[limit].set(stack, args.slice(limit));
|
|
400
398
|
}
|
|
401
399
|
}
|
|
402
400
|
get(stack) {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
else {
|
|
421
|
-
awaitRef.node.set(stack, awaitValue);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
stack.awaitPromise.splice(0);
|
|
401
|
+
return this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);
|
|
402
|
+
}
|
|
403
|
+
getAsyncArrowFunction(stack) {
|
|
404
|
+
async (...args) => {
|
|
405
|
+
const innerScopes = this.initFunctionScope(stack);
|
|
406
|
+
this.setParameter(stack, args);
|
|
407
|
+
let returnValue;
|
|
408
|
+
const statements = Array.isArray(this.body) ? this.body : [this.body];
|
|
409
|
+
for (const state of statements) {
|
|
410
|
+
state.shareVariables(innerScopes);
|
|
411
|
+
returnValue = state.get(stack);
|
|
412
|
+
if (stack.awaitPromise.length > 0) {
|
|
413
|
+
for (const awaitRef of stack.awaitPromise) {
|
|
414
|
+
const awaitValue = await awaitRef.promise;
|
|
415
|
+
if (awaitRef.declareVariable) {
|
|
416
|
+
awaitRef.node.declareVariable(stack, awaitValue);
|
|
425
417
|
}
|
|
426
|
-
else
|
|
427
|
-
|
|
428
|
-
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
429
|
-
if (ContinueStatement.ContinueSymbol === result) {
|
|
430
|
-
continue;
|
|
431
|
-
}
|
|
432
|
-
else if (BreakStatement.BreakSymbol === result) {
|
|
433
|
-
break;
|
|
434
|
-
}
|
|
435
|
-
else if (result instanceof ReturnValue) {
|
|
436
|
-
returnValue = result;
|
|
437
|
-
break;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
stack.forAwaitAsyncIterable = undefined;
|
|
418
|
+
else {
|
|
419
|
+
awaitRef.node.set(stack, awaitValue);
|
|
441
420
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
421
|
+
}
|
|
422
|
+
stack.awaitPromise.splice(0);
|
|
423
|
+
}
|
|
424
|
+
else if (stack.forAwaitAsyncIterable) {
|
|
425
|
+
for await (let iterator of stack.forAwaitAsyncIterable.iterable) {
|
|
426
|
+
const result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);
|
|
427
|
+
if (result instanceof TerminateReturnType) {
|
|
428
|
+
if (result.type === 'continue') {
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
break;
|
|
447
433
|
}
|
|
448
434
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
return returnValue;
|
|
453
|
-
}
|
|
454
|
-
};
|
|
455
|
-
break;
|
|
456
|
-
default:
|
|
457
|
-
case ArrowFunctionType.NORMAL:
|
|
458
|
-
func = (...args) => {
|
|
459
|
-
const innerScopes = this.initFunctionScope(stack);
|
|
460
|
-
this.setParameter(stack, args);
|
|
461
|
-
let returnValue;
|
|
462
|
-
const statements = Array.isArray(this.body) ? this.body : [this.body];
|
|
463
|
-
for (const statement of statements) {
|
|
464
|
-
statement.shareVariables(innerScopes);
|
|
465
|
-
returnValue = statement.get(stack);
|
|
466
|
-
if (returnValue instanceof ReturnValue) {
|
|
467
|
-
this.clearFunctionScope(stack, innerScopes);
|
|
468
|
-
return returnValue.value;
|
|
435
|
+
else if (result instanceof ReturnValue) {
|
|
436
|
+
returnValue = result;
|
|
437
|
+
break;
|
|
469
438
|
}
|
|
470
439
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
440
|
+
stack.forAwaitAsyncIterable = undefined;
|
|
441
|
+
}
|
|
442
|
+
if (returnValue instanceof ReturnValue) {
|
|
443
|
+
returnValue = returnValue.value;
|
|
444
|
+
if (returnValue instanceof AwaitPromise) {
|
|
445
|
+
this.clearFunctionScope(stack, innerScopes);
|
|
446
|
+
return await returnValue.promise;
|
|
474
447
|
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
this.clearFunctionScope(stack, innerScopes);
|
|
451
|
+
if (this.expression) {
|
|
452
|
+
return returnValue;
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
getArrowFunction(stack) {
|
|
457
|
+
return (...args) => {
|
|
458
|
+
const innerScopes = this.initFunctionScope(stack);
|
|
459
|
+
this.setParameter(stack, args);
|
|
460
|
+
let returnValue;
|
|
461
|
+
const statements = Array.isArray(this.body) ? this.body : [this.body];
|
|
462
|
+
for (const statement of statements) {
|
|
463
|
+
statement.shareVariables(innerScopes);
|
|
464
|
+
returnValue = statement.get(stack);
|
|
465
|
+
if (returnValue instanceof ReturnValue) {
|
|
466
|
+
this.clearFunctionScope(stack, innerScopes);
|
|
467
|
+
return returnValue.value;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
this.clearFunctionScope(stack, innerScopes);
|
|
471
|
+
if (this.expression) {
|
|
472
|
+
return returnValue;
|
|
473
|
+
}
|
|
474
|
+
};
|
|
479
475
|
}
|
|
480
476
|
dependency(computed) {
|
|
481
477
|
return this.params.flatMap(param => param.dependency());
|
|
@@ -484,24 +480,12 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
|
|
|
484
480
|
return this.params.flatMap(param => param.dependencyPath(computed));
|
|
485
481
|
}
|
|
486
482
|
toString() {
|
|
487
|
-
let str = this.
|
|
488
|
-
if (this.params.length ===
|
|
489
|
-
str += '()';
|
|
490
|
-
}
|
|
491
|
-
else if (this.params.length === 1) {
|
|
483
|
+
let str = this.async ? 'async ' : '';
|
|
484
|
+
if (this.params.length === 1) {
|
|
492
485
|
str += this.params[0].toString();
|
|
493
486
|
}
|
|
494
487
|
else {
|
|
495
|
-
str +=
|
|
496
|
-
str += this.params.map((param, index, array) => {
|
|
497
|
-
if (index === array.length - 1 && this.rest) {
|
|
498
|
-
return '...' + param.toString();
|
|
499
|
-
}
|
|
500
|
-
else {
|
|
501
|
-
return param.toString();
|
|
502
|
-
}
|
|
503
|
-
}).join(', ');
|
|
504
|
-
str += ')';
|
|
488
|
+
str += `(${this.params.map(param => param.toString()).join(', ')})`;
|
|
505
489
|
}
|
|
506
490
|
str += ' => ';
|
|
507
491
|
str += this.body.toString();
|
|
@@ -512,15 +496,14 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
|
|
|
512
496
|
params: this.params.map(param => param.toJSON()),
|
|
513
497
|
body: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),
|
|
514
498
|
expression: true,
|
|
515
|
-
|
|
516
|
-
rest: this.rest,
|
|
499
|
+
async: this.async,
|
|
517
500
|
generator: this.generator
|
|
518
501
|
};
|
|
519
502
|
}
|
|
520
503
|
};
|
|
521
504
|
ArrowFunctionExpression = ArrowFunctionExpression_1 = __decorate([
|
|
522
505
|
Deserializer('ArrowFunctionExpression'),
|
|
523
|
-
__metadata("design:paramtypes", [Array, Object,
|
|
506
|
+
__metadata("design:paramtypes", [Array, Object, Boolean, Boolean])
|
|
524
507
|
], ArrowFunctionExpression);
|
|
525
508
|
export { ArrowFunctionExpression };
|
|
526
509
|
//# sourceMappingURL=function.js.map
|