@ibyar/expressions 0.3.6 → 0.3.8
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 +30 -18
- package/api/definition/function.js +6 -0
- package/api/definition/function.js.map +1 -1
- package/package.json +6 -2
- package/v8/parser.d.ts +1 -0
- package/v8/parser.js +103 -57
- package/v8/parser.js.map +1 -1
- package/v8/stream.js +5 -1
- package/v8/stream.js.map +1 -1
package/README.md
CHANGED
|
@@ -48,7 +48,7 @@ const source = `
|
|
|
48
48
|
setTimeout(() => console.log('setTimeout', alex), 500);
|
|
49
49
|
const sara = { firstName: 'sara', lastName: 'jon', age: 28, [Symbol.toStringTag]: 'SARA'};
|
|
50
50
|
console.log(sara['age']);
|
|
51
|
-
console.log('toStringTag', sara
|
|
51
|
+
console.log('toStringTag', Object.prototype.toString.call(sara));
|
|
52
52
|
console.log('compare', sara.age <=> alex.age);
|
|
53
53
|
console.log('older', sara.age >? alex.age);
|
|
54
54
|
console.log('younger', sara.age <? alex.age);
|
|
@@ -69,7 +69,16 @@ const source = `
|
|
|
69
69
|
'let taggedStringLiteral = latex`Hi\n${2+3}!`; console.log({taggedStringLiteral});'
|
|
70
70
|
;
|
|
71
71
|
|
|
72
|
-
const
|
|
72
|
+
const pipeSource = `
|
|
73
|
+
const add = (arg1, arg2) => arg1 + arg2;
|
|
74
|
+
a
|
|
75
|
+
|> function(s) {return s;}
|
|
76
|
+
|> (c => b = c + 1)
|
|
77
|
+
|> add(?, 2)
|
|
78
|
+
|> add(3, ?)
|
|
79
|
+
|> console.log:4:5;`;
|
|
80
|
+
|
|
81
|
+
const ast = JavaScriptParser.parse(source + pipeSource);
|
|
73
82
|
const esTree = ast.toJSON();
|
|
74
83
|
const esTreeString = JSON.stringify(ast, void 0, 2);
|
|
75
84
|
console.log({ esTree, esTreeString });
|
|
@@ -77,10 +86,14 @@ const context = {
|
|
|
77
86
|
Promise,
|
|
78
87
|
setTimeout,
|
|
79
88
|
console,
|
|
80
|
-
Symbol
|
|
89
|
+
Symbol,
|
|
90
|
+
Object
|
|
81
91
|
};
|
|
82
92
|
const stack = Stack.for(context);
|
|
83
|
-
const globalScope = Scope.
|
|
93
|
+
const globalScope = Scope.functionScopeFor({
|
|
94
|
+
a: 7,
|
|
95
|
+
b: undefined
|
|
96
|
+
});
|
|
84
97
|
stack.pushScope(globalScope);
|
|
85
98
|
ast.get(stack);
|
|
86
99
|
console.log(
|
|
@@ -133,27 +146,26 @@ non-ecma operator are `%% >? <? <=> >?= <?= %%=`
|
|
|
133
146
|
|
|
134
147
|
## Pipeline Operator |> Support
|
|
135
148
|
|
|
136
|
-
-
|
|
149
|
+
- support angular-like syntax and partial operator for a call syntax:
|
|
137
150
|
|
|
138
|
-
- support the following F# syntax:
|
|
139
|
-
|
|
140
151
|
```js
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
argument |> map
|
|
144
|
-
|> function(x) { console.log(x); return x; }
|
|
145
|
-
|> (x) => { console.log(x); return x; }
|
|
146
|
-
|> add(a) // y = a, x will be th return value from the arrow function
|
|
147
|
-
|
|
148
|
-
```
|
|
152
|
+
x |> methodName1:arg2:arg3
|
|
153
|
+
|> methodName2(arg1, ?, ...arg3);
|
|
149
154
|
|
|
150
|
-
- support angular like pipeline syntax
|
|
151
155
|
|
|
152
|
-
```js
|
|
153
156
|
function add(x, y, z) { return x + y + z };
|
|
154
157
|
const a = 88;
|
|
155
158
|
const b = 99;
|
|
156
159
|
const c = 11;
|
|
157
|
-
const
|
|
160
|
+
const z = a |> add:b:c; // === add(a, b, c)
|
|
158
161
|
```
|
|
159
162
|
|
|
163
|
+
```js
|
|
164
|
+
function add(x, y) { return x + y };
|
|
165
|
+
const a = 88;
|
|
166
|
+
argument |> map
|
|
167
|
+
|> function(x) { console.log(x); return x; }
|
|
168
|
+
|> (x) => { console.log(x); return x; }
|
|
169
|
+
|> methodName3(a)
|
|
170
|
+
|
|
171
|
+
```
|
|
@@ -382,6 +382,9 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
|
|
|
382
382
|
}
|
|
383
383
|
}
|
|
384
384
|
stack.clearTo(scope);
|
|
385
|
+
if (this.body.length === 1) {
|
|
386
|
+
return returnValue;
|
|
387
|
+
}
|
|
385
388
|
};
|
|
386
389
|
break;
|
|
387
390
|
default:
|
|
@@ -398,6 +401,9 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
|
|
|
398
401
|
}
|
|
399
402
|
}
|
|
400
403
|
stack.clearTo(scope);
|
|
404
|
+
if (this.body.length === 1) {
|
|
405
|
+
return returnValue;
|
|
406
|
+
}
|
|
401
407
|
};
|
|
402
408
|
break;
|
|
403
409
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtF,MAAM,CAAN,IAAY,YAmBX;AAnBD,WAAY,YAAY;IACvB,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,uCAAuB,CAAA;IACvB,mDAAmC,CAAA;IAEnC,mCAAmB,CAAA;IACnB,+CAA+B,CAAA;IAC/B,uDAAuC,CAAA;IACvC,mEAAmD,CAAA;IAEnD,iDAAiC,CAAA;IACjC,6DAA6C,CAAA;IAC7C,qEAAqD,CAAA;IACrD,iFAAiE,CAAA;IAEjE,2DAA2C,CAAA;IAC3C,qDAAqC,CAAA;AAEtC,CAAC,EAnBW,YAAY,KAAZ,YAAY,QAmBvB;AACD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC5B,sCAAiB,CAAA;IACjB,oCAAe,CAAA;AAChB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAGD,IAAa,KAAK,aAAlB,MAAa,KAAM,SAAQ,sBAAsB;IAOhD,YAAoB,UAA0B,EAAU,YAA6B;QACpF,KAAK,EAAE,CAAC;QADW,eAAU,GAAV,UAAU,CAAgB;QAAU,iBAAY,GAAZ,YAAY,CAAiB;IAErF,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAW,EAAE,YAA8B;QAC1D,OAAO,IAAI,OAAK,CACf,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAC1E,CAAC;IACH,CAAC;IAID,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IACD,eAAe;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,QAAQ;QACP,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1C,CAAC;IACD,MAAM;QACL,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;SACzC,CAAC;IACH,CAAC;CACD,CAAA;AAnCY,KAAK;IADjB,YAAY,CAAC,OAAO,CAAC;;GACT,KAAK,CAmCjB;SAnCY,KAAK;AAsClB,IAAa,kBAAkB,0BAA/B,MAAa,kBAAmB,SAAQ,sBAAsB;IAW7D,YACW,MAAwB,EAAY,IAAsB,EAC1D,IAAkB,EAAY,EAAyB,EACvD,IAAc,EAAY,SAAmB;QACvD,KAAK,EAAE,CAAC;QAHE,WAAM,GAAN,MAAM,CAAkB;QAAY,SAAI,GAAJ,IAAI,CAAkB;QAC1D,SAAI,GAAJ,IAAI,CAAc;QAAY,OAAE,GAAF,EAAE,CAAuB;QACvD,SAAI,GAAJ,IAAI,CAAU;QAAY,cAAS,GAAT,SAAS,CAAU;IAExD,CAAC;IAfD,MAAM,CAAC,QAAQ,CAAC,IAAwB,EAAE,YAA8B;QACvE,OAAO,IAAI,oBAAkB,CAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAe,CAAC,CAAC,CAAC,KAAK,CAAC,EACtD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IAOD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,KAAK;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpE,CAAC;IACO,YAAY,CAAC,KAAY,EAAE,IAAW;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,IAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,YAAY,CAAC,KAAK;gBACtB,IAAI,GAAG,KAAK,WAAsB,GAAG,IAAW;oBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,WAAW,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,WAAW,CAAC;6BACnB;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,KAAK,YAAY,CAAC,SAAS;gBAC1B,IAAI,GAAG,QAAQ,CAAC,EAAa,GAAG,IAAW;oBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,KAAK,YAAY,CAAC,eAAe;gBAChC,IAAI,GAAG,KAAK,SAAS,CAAC,EAAa,GAAG,IAAW;oBAChD,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC;6BACjC;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,QAAQ;YACR,KAAK,YAAY,CAAC,MAAM;gBACvB,IAAI,GAAG,UAAqB,GAAG,IAAW;oBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;SACP;QACD,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM;QACL,OAAO;YACN,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC;IACD,QAAQ;QACP,IAAI,OAAe,CAAC;QACpB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,YAAY,CAAC,KAAK;gBACtB,OAAO,GAAG,gBAAgB,CAAC;gBAAC,MAAM;YACnC,KAAK,YAAY,CAAC,SAAS;gBAC1B,OAAO,GAAG,WAAW,CAAC;gBAAC,MAAM;YAC9B,KAAK,YAAY,CAAC,eAAe;gBAChC,OAAO,GAAG,iBAAiB,CAAC;gBAAC,MAAM;YACpC,QAAQ;YACR,KAAK,YAAY,CAAC,MAAM;gBACvB,OAAO,GAAG,UAAU,CAAC;gBAAC,MAAM;SAC7B;QACD,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACzF,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC5C,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;aAChC;iBAAM;gBACN,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;aACxB;QACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACH,CAAC;CACD,CAAA;AAvNY,kBAAkB;IAD9B,YAAY,CAAC,oBAAoB,CAAC;;GACtB,kBAAkB,CAuN9B;SAvNY,kBAAkB;AA0N/B,IAAa,mBAAmB,2BAAhC,MAAa,mBAAoB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,IAAyB,EAAE,YAA8B;QACxE,OAAO,IAAI,qBAAmB,CAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,YAAY,CAAC,IAAI,CAAC,EAAG,CAAyB,EAC9C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IACD,YACC,MAAwB,EAAE,IAAsB,EAChD,IAAkB,EAAE,EAAwB,EAC5C,IAAc,EAAE,SAAmB;QACnC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;CACD,CAAA;AAjBY,mBAAmB;IAD/B,YAAY,CAAC,qBAAqB,CAAC;;GACvB,mBAAmB,CAiB/B;SAjBY,mBAAmB;AAqBhC,IAAa,uBAAuB,+BAApC,MAAa,uBAAwB,SAAQ,sBAAsB;IAUlE,YAAoB,MAAwB,EAAU,IAAsB,EACnE,IAAuB,EAAU,IAAc,EAAU,SAAmB;QACpF,KAAK,EAAE,CAAC;QAFW,WAAM,GAAN,MAAM,CAAkB;QAAU,SAAI,GAAJ,IAAI,CAAkB;QACnE,SAAI,GAAJ,IAAI,CAAmB;QAAU,SAAI,GAAJ,IAAI,CAAU;QAAU,cAAS,GAAT,SAAS,CAAU;IAErF,CAAC;IAZD,MAAM,CAAC,QAAQ,CAAC,IAA6B,EAAE,YAA8B;QAC5E,OAAO,IAAI,yBAAuB,CACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IAKD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACzE,CAAC;IACO,YAAY,CAAC,KAAY,EAAE,IAAW;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IACD,GAAG,CAAC,KAAY;QACf,IAAI,IAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,iBAAiB,CAAC,KAAK;gBAC3B,IAAI,GAAG,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;oBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAGxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC;6BACjC;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,QAAQ;YACR,KAAK,iBAAiB,CAAC,MAAM;gBAC5B,IAAI,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;oBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAGxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;SACP;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM;QACL,OAAO;YACN,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC;IACD,QAAQ;QACP,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,GAAG,IAAI,IAAI,CAAC;SACZ;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACjC;aAAM;YACN,GAAG,IAAI,GAAG,CAAC;YACX,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9C,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC5C,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;iBAChC;qBAAM;oBACN,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;iBACxB;YACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,GAAG,IAAI,GAAG,CAAC;SACX;QACD,GAAG,IAAI,MAAM,CAAC;QACd,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACH,CAAC;CACD,CAAA;AA9IY,uBAAuB;IADnC,YAAY,CAAC,yBAAyB,CAAC;;GAC3B,uBAAuB,CA8InC;SA9IY,uBAAuB","sourcesContent":["import type { CanDeclareExpression, ExpressionNode, NodeDeserializer } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise, ReturnValue } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { BreakStatement, ContinueStatement } from '../statement/control/terminate.js';\n\nexport enum FunctionKind {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC',\n\tGENERATOR = 'GENERATOR',\n\tASYNC_GENERATOR = 'ASYNC_GENERATOR',\n\n\tCONCISE = 'CONCISE',\n\tASYNC_CONCISE = 'ASYNC_CONCISE',\n\tCONCISE_GENERATOR = 'CONCISE_GENERATOR',\n\tASYNC_CONCISE_GENERATOR = 'ASYNC_CONCISE_GENERATOR',\n\n\tSTATIC_CONCISE = 'STATIC_CONCISE',\n\tSTATIC_ASYNC_CONCISE = 'STATIC_ASYNC_CONCISE',\n\tSTATIC_CONCISE_GENERATOR = 'STATIC_CONCISE_GENERATOR',\n\tSTATIC_ASYNC_CONCISE_GENERATOR = 'STATIC_ASYNC_CONCISE_GENERATOR',\n\n\tDERIVED_CONSTRUCTOR = 'DERIVED_CONSTRUCTOR',\n\tBASE_CONSTRUCTOR = 'BASE_CONSTRUCTOR',\n\n}\nexport enum ArrowFunctionType {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC'\n}\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),\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tconstructor(private identifier: ExpressionNode, 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\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.set(stack, value || this.defaultValue?.get(stack));\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tevents(): string[] {\n\t\treturn this.identifier.events().concat(this.defaultValue?.events() || []);\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\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),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode[],\n\t\tprotected kind: FunctionKind, protected id?: CanDeclareExpression,\n\t\tprotected rest?: boolean, protected generator?: 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\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('FunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.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 (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tconst self = this;\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tfunc = async function (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tfunc = function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tfunc = async function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tfunc = function (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.id?.declareVariable(stack, 'block', func);\n\t\treturn func;\n\t}\n\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\n\t}\n\ttoString(): string {\n\t\tlet declare: string;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tdeclare = 'async function'; break;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tdeclare = 'function*'; break;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tdeclare = 'async function*'; break;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tdeclare = 'function'; break;\n\t\t}\n\t\treturn `${declare} ${this.id?.toString() || ''}(${this.params.map((param, index, array) => {\n\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\treturn '...' + param.toString();\n\t\t\t} else {\n\t\t\t\treturn param.toString();\n\t\t\t}\n\t\t}).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.map(statement => statement.toJSON()),\n\t\t\tkind: this.kind,\n\t\t\tid: this.id?.toJSON(),\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tdeserializer(node.id!) as CanDeclareExpression,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tparams: ExpressionNode[], body: ExpressionNode[],\n\t\tkind: FunctionKind, id: CanDeclareExpression,\n\t\trest?: boolean, generator?: boolean) {\n\t\tsuper(params, body, kind, id, rest, generator);\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),\n\t\t\tnode.body.map(deserializer),\n\t\t\tArrowFunctionType[node.kind],\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(private params: ExpressionNode[], private body: ExpressionNode[],\n\t\tprivate kind: ArrowFunctionType, private rest?: boolean, private generator?: 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\tgetRest() {\n\t\treturn this.rest;\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 limit = this.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 (this.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\tswitch (this.kind) {\n\t\t\tcase ArrowFunctionType.ASYNC:\n\t\t\t\tfunc = async (...args: any[]) => {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase ArrowFunctionType.NORMAL:\n\t\t\t\tfunc = (...args: any[]) => {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\treturn func;\n\t}\n\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\n\t}\n\ttoString(): string {\n\t\tlet str = this.kind === ArrowFunctionType.ASYNC ? 'async ' : '';\n\t\tif (this.params.length === 0) {\n\t\t\tstr += '()';\n\t\t} else if (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += '(';\n\t\t\tstr += this.params.map((param, index, array) => {\n\t\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\t\treturn '...' + param.toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn param.toString();\n\t\t\t\t}\n\t\t\t}).join(', ');\n\t\t\tstr += ')';\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: this.body.map(item => item.toJSON()),\n\t\t\texpression: true,\n\t\t\tkind: this.kind,\n\t\t\trest: this.rest,\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 { CanDeclareExpression, ExpressionNode, NodeDeserializer } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise, ReturnValue } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { BreakStatement, ContinueStatement } from '../statement/control/terminate.js';\n\nexport enum FunctionKind {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC',\n\tGENERATOR = 'GENERATOR',\n\tASYNC_GENERATOR = 'ASYNC_GENERATOR',\n\n\tCONCISE = 'CONCISE',\n\tASYNC_CONCISE = 'ASYNC_CONCISE',\n\tCONCISE_GENERATOR = 'CONCISE_GENERATOR',\n\tASYNC_CONCISE_GENERATOR = 'ASYNC_CONCISE_GENERATOR',\n\n\tSTATIC_CONCISE = 'STATIC_CONCISE',\n\tSTATIC_ASYNC_CONCISE = 'STATIC_ASYNC_CONCISE',\n\tSTATIC_CONCISE_GENERATOR = 'STATIC_CONCISE_GENERATOR',\n\tSTATIC_ASYNC_CONCISE_GENERATOR = 'STATIC_ASYNC_CONCISE_GENERATOR',\n\n\tDERIVED_CONSTRUCTOR = 'DERIVED_CONSTRUCTOR',\n\tBASE_CONSTRUCTOR = 'BASE_CONSTRUCTOR',\n\n}\nexport enum ArrowFunctionType {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC'\n}\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),\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tconstructor(private identifier: ExpressionNode, 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\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.set(stack, value || this.defaultValue?.get(stack));\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tevents(): string[] {\n\t\treturn this.identifier.events().concat(this.defaultValue?.events() || []);\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\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),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode[],\n\t\tprotected kind: FunctionKind, protected id?: CanDeclareExpression,\n\t\tprotected rest?: boolean, protected generator?: 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\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('FunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.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 (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tconst self = this;\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tfunc = async function (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tfunc = function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tfunc = async function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tfunc = function (this: any, ...args: any[]) {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.id?.declareVariable(stack, 'block', func);\n\t\treturn func;\n\t}\n\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\n\t}\n\ttoString(): string {\n\t\tlet declare: string;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tdeclare = 'async function'; break;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tdeclare = 'function*'; break;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tdeclare = 'async function*'; break;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tdeclare = 'function'; break;\n\t\t}\n\t\treturn `${declare} ${this.id?.toString() || ''}(${this.params.map((param, index, array) => {\n\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\treturn '...' + param.toString();\n\t\t\t} else {\n\t\t\t\treturn param.toString();\n\t\t\t}\n\t\t}).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.map(statement => statement.toJSON()),\n\t\t\tkind: this.kind,\n\t\t\tid: this.id?.toJSON(),\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tdeserializer(node.id!) as CanDeclareExpression,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tparams: ExpressionNode[], body: ExpressionNode[],\n\t\tkind: FunctionKind, id: CanDeclareExpression,\n\t\trest?: boolean, generator?: boolean) {\n\t\tsuper(params, body, kind, id, rest, generator);\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),\n\t\t\tnode.body.map(deserializer),\n\t\t\tArrowFunctionType[node.kind],\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(private params: ExpressionNode[], private body: ExpressionNode[],\n\t\tprivate kind: ArrowFunctionType, private rest?: boolean, private generator?: 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\tgetRest() {\n\t\treturn this.rest;\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 limit = this.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 (this.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\tswitch (this.kind) {\n\t\t\tcase ArrowFunctionType.ASYNC:\n\t\t\t\tfunc = async (...args: any[]) => {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue 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\tstack.clearTo(scope);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\tif (this.body.length === 1) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase ArrowFunctionType.NORMAL:\n\t\t\t\tfunc = (...args: any[]) => {\n\t\t\t\t\tconst scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t\tif (this.body.length === 1) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\treturn func;\n\t}\n\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\n\t}\n\ttoString(): string {\n\t\tlet str = this.kind === ArrowFunctionType.ASYNC ? 'async ' : '';\n\t\tif (this.params.length === 0) {\n\t\t\tstr += '()';\n\t\t} else if (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += '(';\n\t\t\tstr += this.params.map((param, index, array) => {\n\t\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\t\treturn '...' + param.toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn param.toString();\n\t\t\t\t}\n\t\t\t}).join(', ');\n\t\t\tstr += ')';\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: this.body.map(item => item.toJSON()),\n\t\t\texpression: true,\n\t\t\tkind: this.kind,\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibyar/expressions",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Aurora expression, an template expression evaluation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ibyar/aurora",
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public"
|
|
16
16
|
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"reflect-metadata": "^0.1.13",
|
|
19
|
+
"tslib": "^2.3.1"
|
|
20
|
+
},
|
|
17
21
|
"devDependencies": {
|
|
18
22
|
"typescript": "^4.4.3"
|
|
19
23
|
},
|
|
@@ -37,5 +41,5 @@
|
|
|
37
41
|
"eval",
|
|
38
42
|
"evaluation"
|
|
39
43
|
],
|
|
40
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "6e8f85ae5e22ace13e9846f3960577fea9836190"
|
|
41
45
|
}
|
package/v8/parser.d.ts
CHANGED
|
@@ -135,6 +135,7 @@ export declare class JavaScriptParser extends AbstractParser {
|
|
|
135
135
|
protected doParseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode;
|
|
136
136
|
protected parsePropertyName(): ExpressionNode;
|
|
137
137
|
protected parsePipelineExpression(expression: ExpressionNode): ExpressionNode;
|
|
138
|
+
protected parsePipelineBody(lhs: ExpressionNode): ExpressionNode;
|
|
138
139
|
protected parseConditionalExpression(): ExpressionNode;
|
|
139
140
|
protected parseLogicalExpression(): ExpressionNode;
|
|
140
141
|
protected parseBinaryContinuation(x: ExpressionNode, prec: number, prec1: number): ExpressionNode;
|
package/v8/parser.js
CHANGED
|
@@ -959,7 +959,12 @@ export class JavaScriptParser extends AbstractParser {
|
|
|
959
959
|
}
|
|
960
960
|
this.expect(Token.R_PARENTHESES);
|
|
961
961
|
if (this.peek().isType(Token.ARROW)) {
|
|
962
|
-
|
|
962
|
+
if (expression instanceof SequenceExpression) {
|
|
963
|
+
expression = this.parseArrowFunctionLiteral(expression.getExpressions(), ArrowFunctionType.NORMAL, info.rest);
|
|
964
|
+
}
|
|
965
|
+
else {
|
|
966
|
+
expression = this.parseArrowFunctionLiteral([expression], ArrowFunctionType.NORMAL, info.rest);
|
|
967
|
+
}
|
|
963
968
|
}
|
|
964
969
|
return expression;
|
|
965
970
|
}
|
|
@@ -1326,71 +1331,112 @@ export class JavaScriptParser extends AbstractParser {
|
|
|
1326
1331
|
throw new Error(this.errorMessage(`Parsing property expression: Unexpected Token`));
|
|
1327
1332
|
}
|
|
1328
1333
|
parsePipelineExpression(expression) {
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1334
|
+
let token;
|
|
1335
|
+
while (Token.isPipelineOperator(token = this.peek().token)) {
|
|
1336
|
+
this.consume(token);
|
|
1337
|
+
expression = this.parsePipelineBody(expression);
|
|
1338
|
+
}
|
|
1339
|
+
return expression;
|
|
1340
|
+
}
|
|
1341
|
+
parsePipelineBody(lhs) {
|
|
1342
|
+
let body;
|
|
1343
|
+
let token = this.peek();
|
|
1344
|
+
switch (token.token) {
|
|
1345
|
+
case Token.FUNCTION:
|
|
1346
|
+
this.consume(Token.FUNCTION);
|
|
1347
|
+
if (this.peek().isType(Token.MUL)) {
|
|
1348
|
+
this.consume(Token.MUL);
|
|
1349
|
+
body = this.parseFunctionExpression(FunctionKind.GENERATOR);
|
|
1350
|
+
break;
|
|
1351
|
+
}
|
|
1352
|
+
body = this.parseFunctionExpression(FunctionKind.NORMAL);
|
|
1353
|
+
break;
|
|
1354
|
+
case Token.ASYNC:
|
|
1355
|
+
if (this.peekAhead().isType(Token.FUNCTION)) {
|
|
1356
|
+
this.consume(Token.ASYNC);
|
|
1357
|
+
this.consume(Token.FUNCTION);
|
|
1358
|
+
if (this.peek().isType(Token.MUL)) {
|
|
1359
|
+
this.consume(Token.MUL);
|
|
1360
|
+
body = this.parseFunctionExpression(FunctionKind.ASYNC_GENERATOR);
|
|
1361
|
+
break;
|
|
1362
|
+
}
|
|
1363
|
+
body = this.parseFunctionExpression(FunctionKind.ASYNC);
|
|
1364
|
+
break;
|
|
1365
|
+
}
|
|
1366
|
+
break;
|
|
1367
|
+
default:
|
|
1368
|
+
break;
|
|
1369
|
+
}
|
|
1370
|
+
if (body) {
|
|
1371
|
+
return new PipelineExpression(lhs, body);
|
|
1372
|
+
}
|
|
1373
|
+
if (token.isType(Token.L_PARENTHESES)) {
|
|
1374
|
+
body = this.parsePrimaryExpression();
|
|
1375
|
+
return new PipelineExpression(lhs, body);
|
|
1376
|
+
}
|
|
1377
|
+
const func = this.parseMemberExpression();
|
|
1378
|
+
let args = [];
|
|
1379
|
+
switch (this.peek().token) {
|
|
1380
|
+
case Token.COLON:
|
|
1381
|
+
do {
|
|
1382
|
+
this.consume(Token.COLON);
|
|
1383
|
+
const isSpread = this.check(Token.ELLIPSIS);
|
|
1384
|
+
if (this.peek().isType(Token.CONDITIONAL)) {
|
|
1385
|
+
this.consume(Token.CONDITIONAL);
|
|
1386
|
+
if (isSpread) {
|
|
1387
|
+
args.push('...?');
|
|
1346
1388
|
}
|
|
1347
1389
|
else {
|
|
1348
|
-
|
|
1349
|
-
if (isSpread) {
|
|
1350
|
-
args.push(new SpreadElement(arg));
|
|
1351
|
-
}
|
|
1352
|
-
else {
|
|
1353
|
-
args.push(arg);
|
|
1354
|
-
}
|
|
1390
|
+
args.push('?');
|
|
1355
1391
|
}
|
|
1356
|
-
}
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
while (this.peek().isNotType(Token.R_PARENTHESES)) {
|
|
1362
|
-
const isSpread = this.check(Token.ELLIPSIS);
|
|
1363
|
-
if (this.peek().isType(Token.CONDITIONAL)) {
|
|
1364
|
-
this.consume(Token.CONDITIONAL);
|
|
1365
|
-
indexed = true;
|
|
1366
|
-
if (isSpread) {
|
|
1367
|
-
args.push('...?');
|
|
1368
|
-
}
|
|
1369
|
-
else {
|
|
1370
|
-
args.push('?');
|
|
1371
|
-
}
|
|
1392
|
+
}
|
|
1393
|
+
else {
|
|
1394
|
+
const arg = this.parseAssignmentExpressionCoverGrammar();
|
|
1395
|
+
if (isSpread) {
|
|
1396
|
+
args.push(new SpreadElement(arg));
|
|
1372
1397
|
}
|
|
1373
1398
|
else {
|
|
1374
|
-
|
|
1375
|
-
if (isSpread) {
|
|
1376
|
-
args.push(new SpreadElement(arg));
|
|
1377
|
-
}
|
|
1378
|
-
else {
|
|
1379
|
-
args.push(arg);
|
|
1380
|
-
}
|
|
1399
|
+
args.push(arg);
|
|
1381
1400
|
}
|
|
1382
1401
|
}
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1402
|
+
} while (this.peek().isType(Token.COLON));
|
|
1403
|
+
break;
|
|
1404
|
+
case Token.L_PARENTHESES:
|
|
1405
|
+
this.consume(Token.L_PARENTHESES);
|
|
1406
|
+
let indexed = false;
|
|
1407
|
+
while (this.peek().isNotType(Token.R_PARENTHESES)) {
|
|
1408
|
+
const isSpread = this.check(Token.ELLIPSIS);
|
|
1409
|
+
if (this.peek().isType(Token.CONDITIONAL)) {
|
|
1410
|
+
this.consume(Token.CONDITIONAL);
|
|
1411
|
+
indexed = true;
|
|
1412
|
+
if (isSpread) {
|
|
1413
|
+
args.push('...?');
|
|
1414
|
+
}
|
|
1415
|
+
else {
|
|
1416
|
+
args.push('?');
|
|
1417
|
+
}
|
|
1386
1418
|
}
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1419
|
+
else {
|
|
1420
|
+
const arg = this.parseAssignmentExpressionCoverGrammar();
|
|
1421
|
+
if (isSpread) {
|
|
1422
|
+
args.push(new SpreadElement(arg));
|
|
1423
|
+
}
|
|
1424
|
+
else {
|
|
1425
|
+
args.push(arg);
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
this.check(Token.COMMA);
|
|
1429
|
+
}
|
|
1430
|
+
this.expect(Token.R_PARENTHESES);
|
|
1431
|
+
if (!indexed) {
|
|
1432
|
+
body = new CallExpression(func, args);
|
|
1433
|
+
return new PipelineExpression(lhs, body);
|
|
1434
|
+
}
|
|
1435
|
+
break;
|
|
1436
|
+
default:
|
|
1437
|
+
break;
|
|
1392
1438
|
}
|
|
1393
|
-
return
|
|
1439
|
+
return new PipelineExpression(lhs, func, args);
|
|
1394
1440
|
}
|
|
1395
1441
|
parseConditionalExpression() {
|
|
1396
1442
|
let expression = this.parseLogicalExpression();
|