@ibyar/expressions 0.5.6 → 0.6.1
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/api/abstract.js +5 -0
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +28 -13
- package/api/class/class.js +46 -41
- package/api/class/class.js.map +1 -1
- package/api/computing/return.d.ts +4 -0
- package/api/computing/return.js +5 -0
- package/api/computing/return.js.map +1 -1
- package/api/computing/throw.d.ts +4 -0
- package/api/computing/throw.js +4 -0
- package/api/computing/throw.js.map +1 -1
- package/api/definition/bind.d.ts +6 -0
- package/api/definition/bind.js +6 -0
- package/api/definition/bind.js.map +1 -1
- package/api/definition/function.js +6 -5
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.js +1 -1
- package/api/definition/object.js.map +1 -1
- package/api/definition/values.d.ts +12 -3
- package/api/definition/values.js +25 -4
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +5 -0
- package/api/deserialize/deserialize.js +5 -0
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/expression.d.ts +151 -5
- package/api/expression.js.map +1 -1
- package/api/module/export.d.ts +63 -0
- package/api/module/export.js +64 -1
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +53 -0
- package/api/module/import.js +53 -0
- package/api/module/import.js.map +1 -1
- package/api/operators/grouping.d.ts +7 -0
- package/api/operators/grouping.js +7 -0
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/pipeline.d.ts +12 -0
- package/api/operators/pipeline.js +12 -0
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/unary.js +3 -0
- package/api/operators/unary.js.map +1 -1
- package/api/program.d.ts +2 -2
- package/api/program.js.map +1 -1
- package/api/statement/control/block.d.ts +4 -0
- package/api/statement/control/block.js +4 -0
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +7 -0
- package/api/statement/control/empty.js +7 -0
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +5 -0
- package/api/statement/control/if.js +5 -0
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +6 -0
- package/api/statement/control/switch.js +9 -0
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +8 -0
- package/api/statement/control/terminate.js +8 -0
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/iterations/for.d.ts +5 -0
- package/api/statement/iterations/for.js +13 -0
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +6 -0
- package/api/statement/iterations/while.js +10 -0
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +5 -3
- package/scope/event.d.ts +3 -3
- package/scope/event.js +2 -2
- package/scope/event.js.map +1 -1
- package/scope/pool.d.ts +7 -0
- package/scope/pool.js +29 -0
- package/scope/pool.js.map +1 -0
- package/scope/proxy.d.ts +6 -9
- package/scope/proxy.js +22 -31
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +161 -38
- package/scope/scope.js +260 -106
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +95 -19
- package/scope/stack.js +13 -0
- package/scope/stack.js.map +1 -1
- package/v8/enums.js +31 -0
- package/v8/enums.js.map +1 -1
- package/v8/inline.d.ts +36 -0
- package/v8/inline.js +407 -5
- package/v8/inline.js.map +1 -1
- package/v8/nodes.js +2 -1
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +8 -0
- package/v8/parser.js +304 -1
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +4 -0
- package/v8/stream.js +79 -17
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +229 -0
- package/v8/token.js +236 -1
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +3 -0
|
@@ -2,6 +2,10 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
|
|
|
2
2
|
import type { Scope } from '../../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* A block statement (or compound statement in other languages) is used to group zero or more statements.
|
|
7
|
+
* The block is delimited by a pair of braces ("curly brackets") and may optionally be labelled:
|
|
8
|
+
*/
|
|
5
9
|
export declare class BlockStatement extends AbstractExpressionNode {
|
|
6
10
|
protected body: ExpressionNode[];
|
|
7
11
|
static fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement;
|
|
@@ -4,6 +4,10 @@ import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
5
|
import { TerminateReturnType } from './terminate.js';
|
|
6
6
|
import { isDeclarationExpression } from '../../utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* A block statement (or compound statement in other languages) is used to group zero or more statements.
|
|
9
|
+
* The block is delimited by a pair of braces ("curly brackets") and may optionally be labelled:
|
|
10
|
+
*/
|
|
7
11
|
let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExpressionNode {
|
|
8
12
|
constructor(body) {
|
|
9
13
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/block.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/block.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from './terminate.js';\nimport { isDeclarationExpression } from '../../utils.js';\n\n/**\n * A block statement (or compound statement in other languages) is used to group zero or more statements.\n * The block is delimited by a pair of braces (\"curly brackets\") and may optionally be labelled:\n */\n@Deserializer('BlockStatement')\nexport class BlockStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement {\n\t\treturn new BlockStatement(node.body.map(deserializer));\n\t}\n\tstatic visit(node: BlockStatement, visitNode: VisitNodeType): void {\n\t\tnode.body.forEach(visitNode);\n\t}\n\tconstructor(protected body: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.body.forEach(statement => statement.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`BlockStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst blockScope = stack.pushBlockScope();\n\t\tlet value: any;\n\t\tfor (const node of this.body) {\n\t\t\tvalue = node.get(stack);\n\t\t\tif (value instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(blockScope);\n\t\t\t\treturn value.value;\n\t\t\t}\n\t\t\tif (value instanceof TerminateReturnType) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(blockScope);\n\t\treturn value;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.flatMap(exp => exp.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.flatMap(node => node.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `{\n\t\t\t${this.body\n\t\t\t\t.map(node => ({ insert: !isDeclarationExpression(node), string: node.toString() }))\n\t\t\t\t.map(ref => `${ref.string}${ref.insert ? ';' : ''}`)\n\t\t\t\t.join('\\n')}\n\t\t}`;\n\t}\n\ttoJson(): object {\n\t\treturn { body: this.body.map(node => node.toJSON()) };\n\t}\n}\n"]}
|
|
@@ -2,6 +2,13 @@ import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';
|
|
|
2
2
|
import type { Scope } from '../../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* The empty statement is a semicolon (;) indicating that no statement will be executed,
|
|
7
|
+
* even if JavaScript syntax requires one.
|
|
8
|
+
* The opposite behavior, where you want multiple statements,
|
|
9
|
+
* but JavaScript only allows a single one, is possible using a block statement,
|
|
10
|
+
* which combines several statements into a single one.
|
|
11
|
+
*/
|
|
5
12
|
export declare class EmptyStatement extends AbstractExpressionNode {
|
|
6
13
|
static readonly INSTANCE: EmptyStatement;
|
|
7
14
|
static fromJSON(node: EmptyStatement): EmptyStatement;
|
|
@@ -2,6 +2,13 @@ var EmptyStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
/**
|
|
6
|
+
* The empty statement is a semicolon (;) indicating that no statement will be executed,
|
|
7
|
+
* even if JavaScript syntax requires one.
|
|
8
|
+
* The opposite behavior, where you want multiple statements,
|
|
9
|
+
* but JavaScript only allows a single one, is possible using a block statement,
|
|
10
|
+
* which combines several statements into a single one.
|
|
11
|
+
*/
|
|
5
12
|
let EmptyStatement = EmptyStatement_1 = class EmptyStatement extends AbstractExpressionNode {
|
|
6
13
|
constructor() {
|
|
7
14
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;GAMG;AAEH,IAAa,cAAc,sBAA3B,MAAa,cAAe,SAAQ,sBAAsB;IAMzD;QACC,KAAK,EAAE,CAAC;QAFD,cAAS,GAAG,GAAG,CAAC;IAGxB,CAAC;IAND,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,gBAAc,CAAC,QAAQ,CAAC;IAChC,CAAC;IAKD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IACD,MAAM;QACL,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAA;AA3BgB,uBAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAc,EAAE,CAAoB,CAAA;AADrE,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CA4B1B;SA5BY,cAAc","sourcesContent":["import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The empty statement is a semicolon (;) indicating that no statement will be executed,\n * even if JavaScript syntax requires one.\n * The opposite behavior, where you want multiple statements,\n * but JavaScript only allows a single one, is possible using a block statement,\n * which combines several statements into a single one.\n */\n@Deserializer('EmptyStatement')\nexport class EmptyStatement extends AbstractExpressionNode {\n\tstatic readonly INSTANCE = Object.freeze(new EmptyStatement()) as EmptyStatement;\n\tstatic fromJSON(node: EmptyStatement): EmptyStatement {\n\t\treturn EmptyStatement.INSTANCE;\n\t}\n\tprivate semicolon = ';';\n\tconstructor() {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`EmptyStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn this.semicolon;\n\t}\n\ttoJson(): object {\n\t\treturn {};\n\t}\n}\n"]}
|
|
@@ -2,6 +2,11 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
|
|
|
2
2
|
import type { Scope } from '../../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
7
|
+
* If the condition is falsy, another statement can be executed.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
5
10
|
export declare class IfStatement extends AbstractExpressionNode {
|
|
6
11
|
private test;
|
|
7
12
|
private consequent;
|
|
@@ -2,6 +2,11 @@ var IfStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
/**
|
|
6
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
7
|
+
* If the condition is falsy, another statement can be executed.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
5
10
|
let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNode {
|
|
6
11
|
constructor(test, consequent, alternate) {
|
|
7
12
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('IfStatement')\nexport class IfStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement {\n\t\treturn new IfStatement(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.alternate ? deserializer(node.alternate) : void 0\n\t\t);\n\t}\n\tstatic visit(node: IfStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t\tnode.alternate && visitNode(node.alternate);\n\t}\n\tconstructor(private test: ExpressionNode, private consequent: ExpressionNode, private alternate?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t\tthis.alternate?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`IfStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tif (condition) {\n\t\t\tconst ifBlock = stack.pushBlockScope();\n\t\t\tconst value = this.consequent.get(stack);\n\t\t\tstack.clearTo(ifBlock);\n\t\t\treturn value;\n\t\t} else if (this.alternate) {\n\t\t\tconst elseBlock = stack.pushBlockScope();\n\t\t\tconst value = this.alternate.get(stack);\n\t\t\tstack.clearTo(elseBlock);\n\t\t\treturn value;\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.consequent.dependency(computed),\n\t\t\t\tthis.alternate?.dependency(computed) || []\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(\n\t\t\tthis.consequent.dependencyPath(computed),\n\t\t\tthis.alternate?.dependencyPath(computed) || []\n\t\t);\n\t}\n\ttoString(): string {\n\t\treturn `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON(),\n\t\t\talternate: this.alternate?.toJSON()\n\t\t};\n\t}\n}\n"]}
|
|
@@ -29,6 +29,12 @@ export declare class DefaultExpression extends SwitchCase {
|
|
|
29
29
|
toString(): string;
|
|
30
30
|
toJson(): object;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The switch statement evaluates an expression, matching the expression's value to a case clause,
|
|
34
|
+
* and executes statements associated with that case,
|
|
35
|
+
* as well as statements in cases that follow the matching case.
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
32
38
|
export declare class SwitchStatement extends AbstractExpressionNode {
|
|
33
39
|
private discriminant;
|
|
34
40
|
private cases;
|
|
@@ -85,6 +85,12 @@ DefaultExpression = DefaultExpression_1 = __decorate([
|
|
|
85
85
|
__metadata("design:paramtypes", [Object])
|
|
86
86
|
], DefaultExpression);
|
|
87
87
|
export { DefaultExpression };
|
|
88
|
+
/**
|
|
89
|
+
* The switch statement evaluates an expression, matching the expression's value to a case clause,
|
|
90
|
+
* and executes statements associated with that case,
|
|
91
|
+
* as well as statements in cases that follow the matching case.
|
|
92
|
+
*
|
|
93
|
+
*/
|
|
88
94
|
let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends AbstractExpressionNode {
|
|
89
95
|
constructor(discriminant, cases) {
|
|
90
96
|
super();
|
|
@@ -112,10 +118,13 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
112
118
|
throw new Error(`SwitchStatement#set() has no implementation.`);
|
|
113
119
|
}
|
|
114
120
|
get(stack) {
|
|
121
|
+
// need to fix statements execution and support default case
|
|
122
|
+
// stack = stack.newStack();
|
|
115
123
|
const result = this.discriminant.get(stack);
|
|
116
124
|
const values = this.cases.map(item => item.getTest().get(stack));
|
|
117
125
|
let startIndex = values.findIndex(item => result === item);
|
|
118
126
|
if (startIndex === -1) {
|
|
127
|
+
// search for default statement
|
|
119
128
|
startIndex = this.cases.findIndex(item => item instanceof DefaultExpression);
|
|
120
129
|
if (startIndex === -1) {
|
|
121
130
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/switch.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from './terminate.js';\nimport { Identifier } from '../../definition/values.js';\n\n\n@Deserializer('SwitchCase')\nexport class SwitchCase extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase {\n\t\treturn new SwitchCase(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent)\n\t\t);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(protected test: ExpressionNode, protected consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchCase#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.consequent.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.consequent.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `case ${this.test.toString()}: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('default')\nexport class DefaultExpression extends SwitchCase {\n\tstatic DefaultNode = Object.freeze(new Identifier('default')) as Identifier;\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(deserializer(node.consequent));\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(block: ExpressionNode) {\n\t\tsuper(DefaultExpression.DefaultNode, block);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.consequent.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.consequent.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `default: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n/**\n * The switch statement evaluates an expression, matching the expression's value to a case clause,\n * and executes statements associated with that case,\n * as well as statements in cases that follow the matching case.\n * \n */\n@Deserializer('SwitchStatement')\nexport class SwitchStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement {\n\t\treturn new SwitchStatement(\n\t\t\tdeserializer(node.discriminant),\n\t\t\tnode.cases.map(deserializer) as SwitchCase[]\n\t\t);\n\t}\n\tstatic visit(node: SwitchStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.discriminant);\n\t\tnode.cases.forEach(visitNode);\n\t}\n\tconstructor(private discriminant: ExpressionNode, private cases: SwitchCase[]) {\n\t\tsuper();\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.discriminant.shareVariables(scopeList);\n\t\tthis.cases.forEach(item => item.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\t// need to fix statements execution and support default case\n\t\t// stack = stack.newStack();\n\t\tconst result = this.discriminant.get(stack);\n\t\tconst values = this.cases.map(item => item.getTest().get(stack));\n\t\tlet startIndex = values.findIndex(item => result === item);\n\t\tif (startIndex === -1) {\n\t\t\t// search for default statement\n\t\t\tstartIndex = this.cases.findIndex(item => item instanceof DefaultExpression);\n\t\t\tif (startIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst caseBlock = stack.pushBlockScope();\n\t\tfor (let index = startIndex; index < this.cases.length; index++) {\n\t\t\tconst returnValue = this.cases[index].get(stack);\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(caseBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));\n\t}\n\ttoString(): string {\n\t\treturn `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tdiscriminant: this.discriminant.toJSON(),\n\t\t\tcases: this.cases.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/switch.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from './terminate.js';\nimport { Identifier } from '../../definition/values.js';\n\n\n@Deserializer('SwitchCase')\nexport class SwitchCase extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase {\n\t\treturn new SwitchCase(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent)\n\t\t);\n\t}\n\tstatic visit(node: SwitchCase, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(protected test: ExpressionNode, protected consequent: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchCase#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn this.consequent.get(stack);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.consequent.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.consequent.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `case ${this.test.toString()}: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('default')\nexport class DefaultExpression extends SwitchCase {\n\tstatic DefaultNode = Object.freeze(new Identifier('default')) as Identifier;\n\tstatic fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(deserializer(node.consequent));\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(block: ExpressionNode) {\n\t\tsuper(DefaultExpression.DefaultNode, block);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.consequent.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.consequent.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `default: ${this.consequent.toString()};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tconsequent: this.consequent.toJSON()\n\t\t};\n\t}\n}\n\n/**\n * The switch statement evaluates an expression, matching the expression's value to a case clause,\n * and executes statements associated with that case,\n * as well as statements in cases that follow the matching case.\n * \n */\n@Deserializer('SwitchStatement')\nexport class SwitchStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement {\n\t\treturn new SwitchStatement(\n\t\t\tdeserializer(node.discriminant),\n\t\t\tnode.cases.map(deserializer) as SwitchCase[]\n\t\t);\n\t}\n\tstatic visit(node: SwitchStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.discriminant);\n\t\tnode.cases.forEach(visitNode);\n\t}\n\tconstructor(private discriminant: ExpressionNode, private cases: SwitchCase[]) {\n\t\tsuper();\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.discriminant.shareVariables(scopeList);\n\t\tthis.cases.forEach(item => item.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`SwitchStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\t// need to fix statements execution and support default case\n\t\t// stack = stack.newStack();\n\t\tconst result = this.discriminant.get(stack);\n\t\tconst values = this.cases.map(item => item.getTest().get(stack));\n\t\tlet startIndex = values.findIndex(item => result === item);\n\t\tif (startIndex === -1) {\n\t\t\t// search for default statement\n\t\t\tstartIndex = this.cases.findIndex(item => item instanceof DefaultExpression);\n\t\t\tif (startIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst caseBlock = stack.pushBlockScope();\n\t\tfor (let index = startIndex; index < this.cases.length; index++) {\n\t\t\tconst returnValue = this.cases[index].get(stack);\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(caseBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.discriminant.dependency(computed).concat(this.cases.flatMap(expCase => expCase.dependency(computed)));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.discriminant.dependencyPath(computed).concat(this.cases.flatMap(expCase => expCase.dependencyPath(computed)));\n\t}\n\ttoString(): string {\n\t\treturn `switch (${this.discriminant.toString()}) {${this.cases.map(item => item.toString())}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tdiscriminant: this.discriminant.toJSON(),\n\t\t\tcases: this.cases.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
|
|
@@ -9,6 +9,14 @@ export declare class TerminateReturnType {
|
|
|
9
9
|
label?: string | undefined;
|
|
10
10
|
constructor(type: TerminateType, label?: string | undefined);
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The break statement terminates the current loop, switch, or label statement
|
|
14
|
+
* and transfers program control to the statement following the terminated statement.
|
|
15
|
+
*
|
|
16
|
+
* The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,
|
|
17
|
+
* and continues execution of the loop with the next iteration.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
12
20
|
declare abstract class TerminateStatement extends AbstractExpressionNode {
|
|
13
21
|
protected label?: Identifier | undefined;
|
|
14
22
|
constructor(label?: Identifier | undefined);
|
|
@@ -10,6 +10,14 @@ export class TerminateReturnType {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
;
|
|
13
|
+
/**
|
|
14
|
+
* The break statement terminates the current loop, switch, or label statement
|
|
15
|
+
* and transfers program control to the statement following the terminated statement.
|
|
16
|
+
*
|
|
17
|
+
* The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,
|
|
18
|
+
* and continues execution of the loop with the next iteration.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
13
21
|
class TerminateStatement extends AbstractExpressionNode {
|
|
14
22
|
constructor(label) {
|
|
15
23
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,MAAM,OAAO,mBAAmB;IAC/B,YAAmB,IAAmB,EAAS,KAAc;QAA1C,SAAI,GAAJ,IAAI,CAAe;QAAS,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;CAClE;AAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { Identifier } from '../../definition/values.js';\n\nexport type TerminateType = 'break' | 'continue';\n\nexport class TerminateReturnType {\n\tconstructor(public type: TerminateType, public label?: string) { }\n};\n\n\n\n/**\n * The break statement terminates the current loop, switch, or label statement\n * and transfers program control to the statement following the terminated statement.\n * \n * The continue statement terminates execution of the statements in the current iteration of the current or labeled loop,\n * and continues execution of the loop with the next iteration.\n *\n */\nabstract class TerminateStatement extends AbstractExpressionNode {\n\n\tconstructor(protected label?: Identifier) {\n\t\tsuper();\n\t}\n\tgetLabel() {\n\t\tthis.label;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`TerminateStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack): TerminateReturnType {\n\t\treturn new TerminateReturnType(this.getType(), this.label?.get(stack));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn `${this.getType()}${this.label ? ` ${this.label.toString()}` : ''};`;\n\t}\n\ttoJson(): object {\n\t\treturn { label: this.label?.toJSON() };\n\t}\n\n\tabstract getType(): TerminateType;\n}\n\n@Deserializer('BreakStatement')\nexport class BreakStatement extends TerminateStatement {\n\tstatic readonly BREAK_INSTANCE = Object.freeze(new BreakStatement()) as BreakStatement;\n\tstatic fromJSON(node: BreakStatement, deserializer: NodeDeserializer): BreakStatement {\n\t\treturn node.label\n\t\t\t? new BreakStatement(deserializer(node.label) as Identifier)\n\t\t\t: BreakStatement.BREAK_INSTANCE;\n\t}\n\tstatic visit(node: BreakStatement, visitNode: VisitNodeType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n\tgetType(): 'break' {\n\t\treturn 'break';\n\t}\n}\n\n@Deserializer('ContinueStatement')\nexport class ContinueStatement extends TerminateStatement {\n\tstatic readonly CONTINUE_INSTANCE = Object.freeze(new ContinueStatement()) as ContinueStatement;\n\tstatic fromJSON(node: ContinueStatement, deserializer: NodeDeserializer): ContinueStatement {\n\n\t\treturn node.label\n\t\t\t? new ContinueStatement(deserializer(node.label) as Identifier)\n\t\t\t: ContinueStatement.CONTINUE_INSTANCE;\n\t}\n\tstatic visit(node: ContinueStatement, visitNode: VisitNodeType): void {\n\t\tnode.label && visitNode(node.label);\n\t}\n\tgetType(): 'continue' {\n\t\treturn 'continue';\n\t}\n}\n\n@Deserializer('LabeledStatement')\nexport class LabeledStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: LabeledStatement, deserializer: NodeDeserializer): LabeledStatement {\n\t\treturn new LabeledStatement(\n\t\t\tdeserializer(node.label) as Identifier,\n\t\t\tdeserializer(node.body),\n\t\t);\n\t}\n\tstatic visit(node: LabeledStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.label);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(private label: Identifier, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\n\tgetLabel() {\n\t\treturn this.label;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('LabeledStatement#set() not implemented.');\n\t}\n\tget(stack: Stack) {\n\t\treturn this.body.get(stack);\n\t}\n\tdependency(computed?: true | undefined): ExpressionNode[] {\n\t\treturn this.body.dependency(computed);\n\t}\n\tdependencyPath(computed?: true | undefined): ExpressionEventPath[] {\n\t\treturn this.body.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `${this.label.toString()}:\\n${this.body.toString()}`;\n\t}\n\ttoJson() {\n\t\treturn {\n\t\t\tlabel: this.label.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n"]}
|
|
@@ -5,6 +5,11 @@ import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
|
5
5
|
import { VariableDeclarationNode } from '../declarations/declares.js';
|
|
6
6
|
import { ArrayPattern } from '../../definition/array.js';
|
|
7
7
|
import { ObjectPattern } from '../../definition/object.js';
|
|
8
|
+
/**
|
|
9
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
10
|
+
* If the condition is falsy, another statement can be executed.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
8
13
|
export declare class ForNode extends AbstractExpressionNode {
|
|
9
14
|
private body;
|
|
10
15
|
private init?;
|
|
@@ -3,6 +3,11 @@ import { __decorate, __metadata } from "tslib";
|
|
|
3
3
|
import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
5
|
import { TerminateReturnType } from '../control/terminate.js';
|
|
6
|
+
/**
|
|
7
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
8
|
+
* If the condition is falsy, another statement can be executed.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
6
11
|
let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
|
|
7
12
|
constructor(body, init, test, update) {
|
|
8
13
|
super();
|
|
@@ -45,6 +50,8 @@ let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
|
|
|
45
50
|
const forBlock = stack.pushBlockScope();
|
|
46
51
|
for (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {
|
|
47
52
|
const result = this.body.get(stack);
|
|
53
|
+
// useless case, as it at the end of for statement
|
|
54
|
+
// an array/block statement, should return last signal
|
|
48
55
|
if (result instanceof TerminateReturnType) {
|
|
49
56
|
if (result.type === 'continue') {
|
|
50
57
|
continue;
|
|
@@ -129,6 +136,8 @@ let ForOfNode = ForOfNode_1 = class ForOfNode extends AbstractExpressionNode {
|
|
|
129
136
|
const forBlock = stack.pushBlockScope();
|
|
130
137
|
this.left.declareVariable(stack, iterator);
|
|
131
138
|
const result = this.body.get(stack);
|
|
139
|
+
// useless case, as it at the end of for statement
|
|
140
|
+
// an array/block statement, should return last signal
|
|
132
141
|
if (result instanceof TerminateReturnType) {
|
|
133
142
|
if (result.type === 'continue') {
|
|
134
143
|
continue;
|
|
@@ -168,6 +177,7 @@ ForOfNode = ForOfNode_1 = __decorate([
|
|
|
168
177
|
], ForOfNode);
|
|
169
178
|
export { ForOfNode };
|
|
170
179
|
let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
|
|
180
|
+
// variable of iterable
|
|
171
181
|
constructor(left, right, body) {
|
|
172
182
|
super();
|
|
173
183
|
this.left = left;
|
|
@@ -204,6 +214,8 @@ let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
|
|
|
204
214
|
const forBlock = stack.pushBlockScope();
|
|
205
215
|
this.left.declareVariable(stack, iterator);
|
|
206
216
|
const result = this.body.get(stack);
|
|
217
|
+
// useless case, as it at the end of for statement
|
|
218
|
+
// an array/block statement, should return last signal
|
|
207
219
|
if (result instanceof TerminateReturnType) {
|
|
208
220
|
if (result.type === 'continue') {
|
|
209
221
|
continue;
|
|
@@ -243,6 +255,7 @@ ForInNode = ForInNode_1 = __decorate([
|
|
|
243
255
|
], ForInNode);
|
|
244
256
|
export { ForInNode };
|
|
245
257
|
let ForAwaitOfNode = ForAwaitOfNode_1 = class ForAwaitOfNode extends AbstractExpressionNode {
|
|
258
|
+
// variable of iterable
|
|
246
259
|
constructor(left, right, body) {
|
|
247
260
|
super();
|
|
248
261
|
this.left = left;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from '../control/terminate.js';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update)\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t\tthis.test?.shareVariables(scopeList);\n\t\tthis.update?.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"for.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/for.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAM9D;;;;GAIG;AAEH,IAAa,OAAO,eAApB,MAAa,OAAQ,SAAQ,sBAAsB;IAelD,YACS,IAAoB,EACpB,IAAqB,EACrB,IAAqB,EACrB,MAAuB;QAC/B,KAAK,EAAE,CAAC;QAJA,SAAI,GAAJ,IAAI,CAAgB;QACpB,SAAI,GAAJ,IAAI,CAAiB;QACrB,SAAI,GAAJ,IAAI,CAAiB;QACrB,WAAM,GAAN,MAAM,CAAiB;IAEhC,CAAC;IApBD,MAAM,CAAC,QAAQ,CAAC,IAAa,EAAE,YAA8B;QAC5D,OAAO,IAAI,SAAO,CACjB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CACxC,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAa,EAAE,SAAwB;QACnD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAQD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,kDAAkD;YAClD,sDAAsD;YACtD,IAAI,MAAM,YAAY,mBAAmB,EAAE;gBAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;oBAC/B,SAAS;iBACT;qBAAM;oBACN,MAAM;iBACN;aACD;YACD,IAAI,MAAM,YAAY,WAAW,EAAE;gBAClC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,MAAM,CAAC;aACd;SACD;QACD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,IAAI,UAAU,GAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClF,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,IAAI,cAAc,GAA0B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,QAAQ;QACP,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IACnH,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;SAC7B,CAAC;IACH,CAAC;CACD,CAAA;AAzFY,OAAO;IADnB,YAAY,CAAC,cAAc,CAAC;;GAChB,OAAO,CAyFnB;SAzFY,OAAO;AA8FpB,IAAa,SAAS,iBAAtB,MAAa,SAAU,SAAQ,sBAAsB;IAapD,YACS,IAAoB,EACpB,KAAqB,EACrB,IAAoB;QAC5B,KAAK,EAAE,CAAC;QAHA,SAAI,GAAJ,IAAI,CAAgB;QACpB,UAAK,GAAL,KAAK,CAAgB;QACrB,SAAI,GAAJ,IAAI,CAAgB;IAE7B,CAAC;IAjBD,MAAM,CAAC,QAAQ,CAAC,IAAe,EAAE,YAA8B;QAC9D,OAAO,IAAI,WAAS,CACnB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAmB,EACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAe,EAAE,SAAwB;QACrD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAOD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3D,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,QAAQ,GAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,kDAAkD;YAClD,sDAAsD;YACtD,IAAI,MAAM,YAAY,mBAAmB,EAAE;gBAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;oBAC/B,SAAS;iBACT;qBAAM;oBACN,MAAM;iBACN;aACD;iBACI,IAAI,MAAM,YAAY,WAAW,EAAE;gBACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,MAAM,CAAC;aACd;YACD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACxB;QACD,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ;QACP,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7F,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;SACxB,CAAC;IACH,CAAC;CACD,CAAA;AA1EY,SAAS;IADrB,YAAY,CAAC,gBAAgB,CAAC;;GAClB,SAAS,CA0ErB;SA1EY,SAAS;AA6EtB,IAAa,SAAS,iBAAtB,MAAa,SAAU,SAAQ,sBAAsB;IAapD,uBAAuB;IACvB,YACS,IAA4D,EAC5D,KAAqB,EACrB,IAAoB;QAC5B,KAAK,EAAE,CAAC;QAHA,SAAI,GAAJ,IAAI,CAAwD;QAC5D,UAAK,GAAL,KAAK,CAAgB;QACrB,SAAI,GAAJ,IAAI,CAAgB;IAE7B,CAAC;IAlBD,MAAM,CAAC,QAAQ,CAAC,IAAe,EAAE,YAA8B;QAC9D,OAAO,IAAI,WAAS,CACnB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAmB,EACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAe,EAAE,SAAwB;QACrD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAQD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3D,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,QAAQ,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,kDAAkD;YAClD,sDAAsD;YACtD,IAAI,MAAM,YAAY,mBAAmB,EAAE;gBAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;oBAC/B,SAAS;iBACT;qBAAM;oBACN,MAAM;iBACN;aACD;iBACI,IAAI,MAAM,YAAY,WAAW,EAAE;gBACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,MAAM,CAAC;aACd;YACD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACxB;QACD,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ;QACP,OAAO,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5F,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;SACxB,CAAC;IACH,CAAC;CACD,CAAA;AA3EY,SAAS;IADrB,YAAY,CAAC,gBAAgB,CAAC;;GAClB,SAAS,CA2ErB;SA3EY,SAAS;AA8EtB,IAAa,cAAc,sBAA3B,MAAa,cAAe,SAAQ,sBAAsB;IAazD,uBAAuB;IACvB,YACS,IAAoB,EACpB,KAAqB,EACrB,IAAoB;QAC5B,KAAK,EAAE,CAAC;QAHA,SAAI,GAAJ,IAAI,CAAgB;QACpB,UAAK,GAAL,KAAK,CAAgB;QACrB,SAAI,GAAJ,IAAI,CAAgB;IAE7B,CAAC;IAlBD,MAAM,CAAC,QAAQ,CAAC,IAAoB,EAAE,YAA8B;QACnE,OAAO,IAAI,gBAAc,CACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAmB,EACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAoB,EAAE,SAAwB;QAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAQD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,QAAQ,GAAuB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,CAAC,QAAa,EAAO,EAAE;YAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;QACF,KAAK,CAAC,qBAAqB,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAC1D,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ;QACP,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7F,CAAC;IACD,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;SACxB,CAAC;IACH,CAAC;CACD,CAAA;AA/DY,cAAc;IAD1B,YAAY,CAAC,qBAAqB,CAAC;;GACvB,cAAc,CA+D1B;SA/DY,cAAc","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from '../control/terminate.js';\nimport { VariableDeclarationNode } from '../declarations/declares.js';\nimport { ArrayPattern } from '../../definition/array.js';\nimport { ObjectPattern } from '../../definition/object.js';\n\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('ForStatement')\nexport class ForNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForNode, deserializer: NodeDeserializer): ForNode {\n\t\treturn new ForNode(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.init && deserializer(node.init),\n\t\t\tnode.test && deserializer(node.test),\n\t\t\tnode.update && deserializer(node.update)\n\t\t);\n\t}\n\tstatic visit(node: ForNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.init && visitNode(node.init);\n\t\tnode.test && visitNode(node.test);\n\t\tnode.update && visitNode(node.update);\n\t}\n\tconstructor(\n\t\tprivate body: ExpressionNode,\n\t\tprivate init?: ExpressionNode,\n\t\tprivate test?: ExpressionNode,\n\t\tprivate update?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetUpdate() {\n\t\treturn this.update;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t\tthis.test?.shareVariables(scopeList);\n\t\tthis.update?.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst forBlock = stack.pushBlockScope();\n\t\tfor (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(forBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tlet dependency: ExpressionNode[] = this.body.dependency(computed);\n\t\tthis.init && (dependency = dependency.concat(this.init.dependency(computed)));\n\t\tthis.test && (dependency = dependency.concat(this.test.dependency(computed)));\n\t\tthis.update && (dependency = dependency.concat(this.update.dependency(computed)));\n\t\treturn dependency;\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tlet dependencyPath: ExpressionEventPath[] = this.body.dependencyPath(computed);\n\t\tthis.init && (dependencyPath = dependencyPath.concat(this.init.dependencyPath(computed)));\n\t\tthis.test && (dependencyPath = dependencyPath.concat(this.test.dependencyPath(computed)));\n\t\tthis.update && (dependencyPath = dependencyPath.concat(this.update.dependencyPath(computed)));\n\t\treturn dependencyPath;\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.init?.toString()};${this.test?.toString()};${this.init?.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tinit: this.init?.toJSON(),\n\t\t\ttest: this.test?.toJSON(),\n\t\t\tupdate: this.update?.toJSON(),\n\t\t};\n\t}\n}\n\nexport type ForDeclaration = VariableDeclarationNode | ObjectPattern | ArrayPattern;\n\n@Deserializer('ForOfStatement')\nexport class ForOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForOfNode, deserializer: NodeDeserializer): ForOfNode {\n\t\treturn new ForOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <any[]>this.right.get(stack);\n\t\tfor (const iterator of iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForInStatement')\nexport class ForInNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForInNode, deserializer: NodeDeserializer): ForInNode {\n\t\treturn new ForInNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForInNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: VariableDeclarationNode | ObjectPattern | ArrayPattern,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable = <object>this.right.get(stack);\n\t\tfor (const iterator in iterable) {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(forBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tstack.clearTo(forBlock);\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left.toString()} in ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ForAwaitOfStatement')\nexport class ForAwaitOfNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: ForAwaitOfNode, deserializer: NodeDeserializer): ForAwaitOfNode {\n\t\treturn new ForAwaitOfNode(\n\t\t\tdeserializer(node.left) as ForDeclaration,\n\t\t\tdeserializer(node.right),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: ForAwaitOfNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.left);\n\t\tvisitNode(node.right);\n\t\tvisitNode(node.body);\n\t}\n\t// variable of iterable\n\tconstructor(\n\t\tprivate left: ForDeclaration,\n\t\tprivate right: ExpressionNode,\n\t\tprivate body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.right.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ForAwaitOfNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst iterable: AsyncIterable<any> = this.right.get(stack);\n\t\tconst forAwaitBody = (iterator: any): any => {\n\t\t\tconst forBlock = stack.pushBlockScope();\n\t\t\tthis.left.declareVariable(stack, iterator);\n\t\t\tconst result = this.body.get(stack);\n\t\t\tstack.clearTo(forBlock);\n\t\t\treturn result;\n\t\t};\n\t\tstack.forAwaitAsyncIterable = { iterable, forAwaitBody };\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.right.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.right.dependencyPath(computed);\n\t}\n\ttoString(): string {\n\t\treturn `for (${this.left?.toString()} of ${this.right.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON(),\n\t\t\tbody: this.body.toJSON(),\n\t\t};\n\t}\n}\n"]}
|
|
@@ -2,6 +2,12 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
|
|
|
2
2
|
import type { Scope } from '../../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* The while statement creates a loop that executes a specified
|
|
7
|
+
* statement as long as the test condition evaluates to true.
|
|
8
|
+
* The condition is evaluated before executing the statement.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
5
11
|
export declare class WhileNode extends AbstractExpressionNode {
|
|
6
12
|
private test;
|
|
7
13
|
private body;
|
|
@@ -3,6 +3,12 @@ import { __decorate, __metadata } from "tslib";
|
|
|
3
3
|
import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
5
|
import { TerminateReturnType } from '../control/terminate.js';
|
|
6
|
+
/**
|
|
7
|
+
* The while statement creates a loop that executes a specified
|
|
8
|
+
* statement as long as the test condition evaluates to true.
|
|
9
|
+
* The condition is evaluated before executing the statement.
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
6
12
|
let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
|
|
7
13
|
constructor(test, body) {
|
|
8
14
|
super();
|
|
@@ -34,6 +40,8 @@ let WhileNode = WhileNode_1 = class WhileNode extends AbstractExpressionNode {
|
|
|
34
40
|
const whileBlock = stack.pushBlockScope();
|
|
35
41
|
while (condition) {
|
|
36
42
|
const result = this.body.get(stack);
|
|
43
|
+
// useless case, as it at the end of for statement
|
|
44
|
+
// an array/block statement, should return last signal
|
|
37
45
|
if (result instanceof TerminateReturnType) {
|
|
38
46
|
if (result.type === 'continue') {
|
|
39
47
|
continue;
|
|
@@ -101,6 +109,8 @@ let DoWhileNode = DoWhileNode_1 = class DoWhileNode extends AbstractExpressionNo
|
|
|
101
109
|
const whileBlock = stack.pushBlockScope();
|
|
102
110
|
do {
|
|
103
111
|
const result = this.body.get(stack);
|
|
112
|
+
// useless case, as it at the end of for statement
|
|
113
|
+
// an array/block statement, should return last signal
|
|
104
114
|
if (result instanceof TerminateReturnType) {
|
|
105
115
|
if (result.type === 'continue') {
|
|
106
116
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"while.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/while.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"while.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/iterations/while.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, ReturnValue } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\nimport { TerminateReturnType } from '../control/terminate.js';\n\n/**\n * The while statement creates a loop that executes a specified\n * statement as long as the test condition evaluates to true.\n * The condition is evaluated before executing the statement.\n * \n */\n@Deserializer('WhileStatement')\nexport class WhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: WhileNode, deserializer: NodeDeserializer): WhileNode {\n\t\treturn new WhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: WhileNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tvisitNode(node.test);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\twhile (condition) {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed).concat(this.body.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(this.body.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `while (${this.test.toString()}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('DoWhileStatement')\nexport class DoWhileNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: DoWhileNode, deserializer: NodeDeserializer): DoWhileNode {\n\t\treturn new DoWhileNode(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.body)\n\t\t);\n\t}\n\tstatic visit(node: DoWhileNode, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(private test: ExpressionNode, private body: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.body.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`WhileNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst whileBlock = stack.pushBlockScope();\n\t\tdo {\n\t\t\tconst result = this.body.get(stack);\n\t\t\t// useless case, as it at the end of for statement\n\t\t\t// an array/block statement, should return last signal\n\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result instanceof ReturnValue) {\n\t\t\t\tstack.clearTo(whileBlock);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} while (this.test.get(stack));\n\t\tstack.clearTo(whileBlock);\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.dependency(computed).concat(this.test.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.dependencyPath(computed).concat(this.test.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `do {${this.body.toString()}} while (${this.test.toString()})`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tbody: this.body.toJSON()\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
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Aurora expression, an template expression and evaluation, An 100% spec compliant ES2022 JavaScript toolchain,",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ibyar/aurora/tree/dev/packages/expressions",
|
|
@@ -47,7 +47,9 @@
|
|
|
47
47
|
"expression",
|
|
48
48
|
"js",
|
|
49
49
|
"eval",
|
|
50
|
-
"evaluation"
|
|
50
|
+
"evaluation",
|
|
51
|
+
"backend",
|
|
52
|
+
"front-end"
|
|
51
53
|
],
|
|
52
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "b2375dc0a3d6fea0231a3d91eb65f38a457e2a1e"
|
|
53
55
|
}
|
package/scope/event.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ExpressionEventMap } from '../api/expression.js';
|
|
2
|
-
import { ReactiveScope, Scope,
|
|
2
|
+
import { ReactiveScope, Scope, Context } from './scope.js';
|
|
3
3
|
import { Stack } from './stack.js';
|
|
4
|
-
export declare function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<
|
|
5
|
-
export declare function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<
|
|
4
|
+
export declare function findScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, Scope<Context>][];
|
|
5
|
+
export declare function findReactiveScopeByEventMap(events: ExpressionEventMap, stack: Stack): [string, ReactiveScope<Context>][];
|