@ibyar/expressions 0.8.2-dev.20221008 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/api/abstract.d.ts +6 -5
- package/api/abstract.js +15 -12
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +99 -60
- package/api/class/class.js +285 -233
- package/api/class/class.js.map +1 -1
- package/api/class/decorator.d.ts +2 -4
- package/api/class/decorator.js +6 -9
- package/api/class/decorator.js.map +1 -1
- package/api/computing/call.d.ts +2 -4
- package/api/computing/call.js +8 -11
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.d.ts +1 -4
- package/api/computing/debugger.js +2 -5
- package/api/computing/debugger.js.map +1 -1
- package/api/computing/new.d.ts +2 -4
- package/api/computing/new.js +7 -10
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.d.ts +2 -4
- package/api/computing/rest.js +6 -9
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.d.ts +2 -4
- package/api/computing/return.js +6 -9
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.d.ts +2 -4
- package/api/computing/spread.js +6 -9
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.d.ts +4 -8
- package/api/computing/throw.js +18 -23
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.d.ts +2 -4
- package/api/computing/yield.js +7 -10
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.d.ts +3 -6
- package/api/definition/array.js +14 -18
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.d.ts +2 -3
- package/api/definition/bind.js +9 -10
- package/api/definition/bind.js.map +1 -1
- package/api/definition/comment.d.ts +3 -5
- package/api/definition/comment.js +6 -7
- package/api/definition/comment.js.map +1 -1
- package/api/definition/function.d.ts +20 -27
- package/api/definition/function.js +92 -110
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.d.ts +2 -3
- package/api/definition/member.js +14 -11
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.d.ts +5 -9
- package/api/definition/object.js +24 -30
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.d.ts +2 -4
- package/api/definition/statement.js +6 -9
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +15 -40
- package/api/definition/values.js +49 -79
- package/api/definition/values.js.map +1 -1
- package/api/expression.d.ts +40 -26
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +1 -0
- package/api/index.js +1 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +4 -5
- package/api/module/common.js +12 -12
- package/api/module/common.js.map +1 -1
- package/api/module/export.d.ts +5 -10
- package/api/module/export.js +35 -38
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +6 -10
- package/api/module/import.js +28 -32
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.d.ts +3 -3
- package/api/operators/assignment.js +5 -5
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.d.ts +3 -5
- package/api/operators/await.js +7 -10
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.d.ts +1 -1
- package/api/operators/binary.js +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.d.ts +2 -3
- package/api/operators/chaining.js +6 -7
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.d.ts +2 -4
- package/api/operators/comma.js +6 -9
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.d.ts +2 -4
- package/api/operators/grouping.js +6 -9
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.d.ts +1 -1
- package/api/operators/logical.js +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.d.ts +2 -4
- package/api/operators/pipeline.js +8 -15
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.d.ts +2 -4
- package/api/operators/ternary.js +8 -13
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/types.d.ts +1 -1
- package/api/operators/unary.d.ts +3 -5
- package/api/operators/unary.js +7 -10
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.d.ts +3 -5
- package/api/operators/update.js +8 -11
- package/api/operators/update.js.map +1 -1
- package/api/program.d.ts +3 -5
- package/api/program.js +7 -8
- package/api/program.js.map +1 -1
- package/api/statement/control/block.d.ts +2 -4
- package/api/statement/control/block.js +9 -14
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +2 -5
- package/api/statement/control/empty.js +6 -8
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +2 -4
- package/api/statement/control/if.js +8 -13
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +4 -9
- package/api/statement/control/switch.js +19 -28
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +4 -7
- package/api/statement/control/terminate.js +11 -19
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/control/with.d.ts +21 -0
- package/api/statement/control/with.js +67 -0
- package/api/statement/control/with.js.map +1 -0
- package/api/statement/declarations/declares.d.ts +4 -7
- package/api/statement/declarations/declares.js +14 -20
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.d.ts +6 -11
- package/api/statement/iterations/for.js +35 -53
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +3 -6
- package/api/statement/iterations/while.js +14 -22
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +14 -4
- package/scope/finalizer.d.ts +1 -1
- package/scope/pool.d.ts +1 -1
- package/scope/proxy.d.ts +1 -1
- package/scope/proxy.js +1 -0
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +8 -24
- package/scope/scope.js +25 -75
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +15 -3
- package/scope/stack.js +49 -32
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +4 -2
- package/v8/enums.js.map +1 -1
- package/v8/factory.d.ts +148 -0
- package/v8/factory.js +499 -0
- package/v8/factory.js.map +1 -0
- package/v8/inline.d.ts +50 -48
- package/v8/inline.js +322 -300
- package/v8/inline.js.map +1 -1
- package/v8/node.d.ts +141 -0
- package/v8/node.js +2 -0
- package/v8/node.js.map +1 -0
- package/v8/nodes.d.ts +0 -14
- package/v8/nodes.js +1 -152
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +21 -18
- package/v8/parser.js +97 -84
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +2 -1
- package/v8/stream.js +221 -311
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +3 -1
- package/v8/token.js +7 -5
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +1 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';
|
|
2
|
-
import type { Scope } from '../../../scope/scope.js';
|
|
1
|
+
import type { ExpressionEventPath, ExpressionNode, SourceLocation } from '../../expression.js';
|
|
3
2
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
4
|
/**
|
|
@@ -12,9 +11,7 @@ import { AbstractExpressionNode } from '../../abstract.js';
|
|
|
12
11
|
export declare class EmptyStatement extends AbstractExpressionNode {
|
|
13
12
|
static readonly INSTANCE: EmptyStatement;
|
|
14
13
|
static fromJSON(node: EmptyStatement): EmptyStatement;
|
|
15
|
-
|
|
16
|
-
constructor();
|
|
17
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
14
|
+
constructor(range?: [number, number], loc?: SourceLocation);
|
|
18
15
|
set(stack: Stack, value: any): void;
|
|
19
16
|
get(stack: Stack): undefined;
|
|
20
17
|
dependency(computed?: true): ExpressionNode[];
|
|
@@ -10,14 +10,12 @@ import { Deserializer } from '../../deserialize/deserialize.js';
|
|
|
10
10
|
* which combines several statements into a single one.
|
|
11
11
|
*/
|
|
12
12
|
let EmptyStatement = EmptyStatement_1 = class EmptyStatement extends AbstractExpressionNode {
|
|
13
|
-
constructor() {
|
|
14
|
-
super();
|
|
15
|
-
this.semicolon = ';';
|
|
16
|
-
}
|
|
17
13
|
static fromJSON(node) {
|
|
18
|
-
return EmptyStatement_1.
|
|
14
|
+
return new EmptyStatement_1(node.range, node.loc);
|
|
15
|
+
}
|
|
16
|
+
constructor(range, loc) {
|
|
17
|
+
super(range, loc);
|
|
19
18
|
}
|
|
20
|
-
shareVariables(scopeList) { }
|
|
21
19
|
set(stack, value) {
|
|
22
20
|
throw new Error(`EmptyStatement#set() has no implementation.`);
|
|
23
21
|
}
|
|
@@ -31,7 +29,7 @@ let EmptyStatement = EmptyStatement_1 = class EmptyStatement extends AbstractExp
|
|
|
31
29
|
return [];
|
|
32
30
|
}
|
|
33
31
|
toString() {
|
|
34
|
-
return
|
|
32
|
+
return ';';
|
|
35
33
|
}
|
|
36
34
|
toJson() {
|
|
37
35
|
return {};
|
|
@@ -40,7 +38,7 @@ let EmptyStatement = EmptyStatement_1 = class EmptyStatement extends AbstractExp
|
|
|
40
38
|
EmptyStatement.INSTANCE = Object.freeze(new EmptyStatement_1());
|
|
41
39
|
EmptyStatement = EmptyStatement_1 = __decorate([
|
|
42
40
|
Deserializer('EmptyStatement'),
|
|
43
|
-
__metadata("design:paramtypes", [])
|
|
41
|
+
__metadata("design:paramtypes", [Array, Object])
|
|
44
42
|
], EmptyStatement);
|
|
45
43
|
export { EmptyStatement };
|
|
46
44
|
//# sourceMappingURL=empty.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;GAMG;AAEI,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,sBAAsB;IAEzD,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,IAAI,gBAAc,CACxB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,CACR,CAAC;IACH,CAAC;IACD,YACC,KAAwB,EACxB,GAAoB;QACpB,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,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,GAAG,CAAC;IACZ,CAAC;IACD,MAAM;QACL,OAAO,EAAE,CAAC;IACX,CAAC;;AA7Be,uBAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAc,EAAE,CAAmB,CAAC;AADrE,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CA+B1B;SA/BY,cAAc","sourcesContent":["import type { ExpressionEventPath, ExpressionNode, SourceLocation } from '../../expression.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 new EmptyStatement(\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tconstructor(\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\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 ';';\n\t}\n\ttoJson(): object {\n\t\treturn {};\n\t}\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } from '../../expression.js';
|
|
2
|
-
import type { Scope } from '../../../scope/scope.js';
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
|
|
3
2
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
4
|
/**
|
|
@@ -13,11 +12,10 @@ export declare class IfStatement extends AbstractExpressionNode {
|
|
|
13
12
|
private alternate?;
|
|
14
13
|
static fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement;
|
|
15
14
|
static visit(node: IfStatement, visitNode: VisitNodeType): void;
|
|
16
|
-
constructor(test: ExpressionNode, consequent: ExpressionNode, alternate?: ExpressionNode | undefined);
|
|
15
|
+
constructor(test: ExpressionNode, consequent: ExpressionNode, alternate?: ExpressionNode | undefined, range?: [number, number], loc?: SourceLocation);
|
|
17
16
|
getTest(): ExpressionNode;
|
|
18
17
|
getConsequent(): ExpressionNode;
|
|
19
18
|
getAlternate(): ExpressionNode | undefined;
|
|
20
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
21
19
|
set(stack: Stack, value: any): void;
|
|
22
20
|
get(stack: Stack): any;
|
|
23
21
|
dependency(computed?: true): ExpressionNode[];
|
|
@@ -8,20 +8,20 @@ import { Deserializer } from '../../deserialize/deserialize.js';
|
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
10
|
let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNode {
|
|
11
|
-
constructor(test, consequent, alternate) {
|
|
12
|
-
super();
|
|
13
|
-
this.test = test;
|
|
14
|
-
this.consequent = consequent;
|
|
15
|
-
this.alternate = alternate;
|
|
16
|
-
}
|
|
17
11
|
static fromJSON(node, deserializer) {
|
|
18
|
-
return new IfStatement_1(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0);
|
|
12
|
+
return new IfStatement_1(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0, node.range, node.loc);
|
|
19
13
|
}
|
|
20
14
|
static visit(node, visitNode) {
|
|
21
15
|
visitNode(node.test);
|
|
22
16
|
visitNode(node.consequent);
|
|
23
17
|
node.alternate && visitNode(node.alternate);
|
|
24
18
|
}
|
|
19
|
+
constructor(test, consequent, alternate, range, loc) {
|
|
20
|
+
super(range, loc);
|
|
21
|
+
this.test = test;
|
|
22
|
+
this.consequent = consequent;
|
|
23
|
+
this.alternate = alternate;
|
|
24
|
+
}
|
|
25
25
|
getTest() {
|
|
26
26
|
return this.test;
|
|
27
27
|
}
|
|
@@ -31,11 +31,6 @@ let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNo
|
|
|
31
31
|
getAlternate() {
|
|
32
32
|
return this.alternate;
|
|
33
33
|
}
|
|
34
|
-
shareVariables(scopeList) {
|
|
35
|
-
this.test.shareVariables(scopeList);
|
|
36
|
-
this.consequent.shareVariables(scopeList);
|
|
37
|
-
this.alternate?.shareVariables(scopeList);
|
|
38
|
-
}
|
|
39
34
|
set(stack, value) {
|
|
40
35
|
throw new Error(`IfStatement#set() has no implementation.`);
|
|
41
36
|
}
|
|
@@ -75,7 +70,7 @@ let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNo
|
|
|
75
70
|
};
|
|
76
71
|
IfStatement = IfStatement_1 = __decorate([
|
|
77
72
|
Deserializer('IfStatement'),
|
|
78
|
-
__metadata("design:paramtypes", [Object, Object, Object])
|
|
73
|
+
__metadata("design:paramtypes", [Object, Object, Object, Array, Object])
|
|
79
74
|
], IfStatement);
|
|
80
75
|
export { IfStatement };
|
|
81
76
|
//# sourceMappingURL=if.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":";;
|
|
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, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.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\tnode.range,\n\t\t\tnode.loc\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(\n\t\tprivate test: ExpressionNode,\n\t\tprivate consequent: ExpressionNode,\n\t\tprivate alternate?: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\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\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"]}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } from '../../expression.js';
|
|
2
|
-
import type { Scope } from '../../../scope/scope.js';
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
|
|
3
2
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
|
-
import { Identifier } from '../../definition/values.js';
|
|
6
4
|
export declare class SwitchCase extends AbstractExpressionNode {
|
|
7
5
|
protected test: ExpressionNode;
|
|
8
6
|
protected consequent: ExpressionNode;
|
|
9
7
|
static fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase;
|
|
10
8
|
static visit(node: SwitchCase, visitNode: VisitNodeType): void;
|
|
11
|
-
constructor(test: ExpressionNode, consequent: ExpressionNode);
|
|
9
|
+
constructor(test: ExpressionNode, consequent: ExpressionNode, range?: [number, number], loc?: SourceLocation);
|
|
12
10
|
getTest(): ExpressionNode;
|
|
13
11
|
getConsequent(): ExpressionNode;
|
|
14
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
15
12
|
set(stack: Stack, value: any): void;
|
|
16
13
|
get(stack: Stack): any;
|
|
17
14
|
dependency(computed?: true): ExpressionNode[];
|
|
@@ -20,10 +17,9 @@ export declare class SwitchCase extends AbstractExpressionNode {
|
|
|
20
17
|
toJson(): object;
|
|
21
18
|
}
|
|
22
19
|
export declare class DefaultExpression extends SwitchCase {
|
|
23
|
-
static DefaultNode: Identifier;
|
|
24
20
|
static fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression;
|
|
25
21
|
static visit(node: DefaultExpression, visitNode: VisitNodeType): void;
|
|
26
|
-
constructor(block: ExpressionNode);
|
|
22
|
+
constructor(block: ExpressionNode, range?: [number, number], loc?: SourceLocation);
|
|
27
23
|
dependency(computed?: true): ExpressionNode[];
|
|
28
24
|
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
29
25
|
toString(): string;
|
|
@@ -40,10 +36,9 @@ export declare class SwitchStatement extends AbstractExpressionNode {
|
|
|
40
36
|
private cases;
|
|
41
37
|
static fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement;
|
|
42
38
|
static visit(node: SwitchStatement, visitNode: VisitNodeType): void;
|
|
43
|
-
constructor(discriminant: ExpressionNode, cases: SwitchCase[]);
|
|
39
|
+
constructor(discriminant: ExpressionNode, cases: SwitchCase[], range?: [number, number], loc?: SourceLocation);
|
|
44
40
|
getDiscriminant(): ExpressionNode;
|
|
45
41
|
getCases(): SwitchCase[];
|
|
46
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
47
42
|
set(stack: Stack, value: any): void;
|
|
48
43
|
get(stack: Stack): undefined;
|
|
49
44
|
dependency(computed?: true): ExpressionNode[];
|
|
@@ -5,28 +5,24 @@ import { Deserializer } from '../../deserialize/deserialize.js';
|
|
|
5
5
|
import { TerminateReturnType } from './terminate.js';
|
|
6
6
|
import { Identifier } from '../../definition/values.js';
|
|
7
7
|
let SwitchCase = SwitchCase_1 = class SwitchCase extends AbstractExpressionNode {
|
|
8
|
-
constructor(test, consequent) {
|
|
9
|
-
super();
|
|
10
|
-
this.test = test;
|
|
11
|
-
this.consequent = consequent;
|
|
12
|
-
}
|
|
13
8
|
static fromJSON(node, deserializer) {
|
|
14
|
-
return new SwitchCase_1(deserializer(node.test), deserializer(node.consequent));
|
|
9
|
+
return new SwitchCase_1(deserializer(node.test), deserializer(node.consequent), node.range, node.loc);
|
|
15
10
|
}
|
|
16
11
|
static visit(node, visitNode) {
|
|
17
12
|
visitNode(node.test);
|
|
18
13
|
visitNode(node.consequent);
|
|
19
14
|
}
|
|
15
|
+
constructor(test, consequent, range, loc) {
|
|
16
|
+
super(range, loc);
|
|
17
|
+
this.test = test;
|
|
18
|
+
this.consequent = consequent;
|
|
19
|
+
}
|
|
20
20
|
getTest() {
|
|
21
21
|
return this.test;
|
|
22
22
|
}
|
|
23
23
|
getConsequent() {
|
|
24
24
|
return this.consequent;
|
|
25
25
|
}
|
|
26
|
-
shareVariables(scopeList) {
|
|
27
|
-
this.test.shareVariables(scopeList);
|
|
28
|
-
this.consequent.shareVariables(scopeList);
|
|
29
|
-
}
|
|
30
26
|
set(stack, value) {
|
|
31
27
|
throw new Error(`SwitchCase#set() has no implementation.`);
|
|
32
28
|
}
|
|
@@ -51,19 +47,19 @@ let SwitchCase = SwitchCase_1 = class SwitchCase extends AbstractExpressionNode
|
|
|
51
47
|
};
|
|
52
48
|
SwitchCase = SwitchCase_1 = __decorate([
|
|
53
49
|
Deserializer('SwitchCase'),
|
|
54
|
-
__metadata("design:paramtypes", [Object, Object])
|
|
50
|
+
__metadata("design:paramtypes", [Object, Object, Array, Object])
|
|
55
51
|
], SwitchCase);
|
|
56
52
|
export { SwitchCase };
|
|
57
53
|
let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends SwitchCase {
|
|
58
|
-
constructor(block) {
|
|
59
|
-
super(DefaultExpression_1.DefaultNode, block);
|
|
60
|
-
}
|
|
61
54
|
static fromJSON(node, deserializer) {
|
|
62
|
-
return new DefaultExpression_1(deserializer(node.consequent));
|
|
55
|
+
return new DefaultExpression_1(deserializer(node.consequent), node.range, node.loc);
|
|
63
56
|
}
|
|
64
57
|
static visit(node, visitNode) {
|
|
65
58
|
visitNode(node.consequent);
|
|
66
59
|
}
|
|
60
|
+
constructor(block, range, loc) {
|
|
61
|
+
super(new Identifier('default'), block, range, loc);
|
|
62
|
+
}
|
|
67
63
|
dependency(computed) {
|
|
68
64
|
return this.consequent.dependency(computed);
|
|
69
65
|
}
|
|
@@ -79,10 +75,9 @@ let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends Sw
|
|
|
79
75
|
};
|
|
80
76
|
}
|
|
81
77
|
};
|
|
82
|
-
DefaultExpression.DefaultNode = Object.freeze(new Identifier('default'));
|
|
83
78
|
DefaultExpression = DefaultExpression_1 = __decorate([
|
|
84
79
|
Deserializer('default'),
|
|
85
|
-
__metadata("design:paramtypes", [Object])
|
|
80
|
+
__metadata("design:paramtypes", [Object, Array, Object])
|
|
86
81
|
], DefaultExpression);
|
|
87
82
|
export { DefaultExpression };
|
|
88
83
|
/**
|
|
@@ -92,28 +87,24 @@ export { DefaultExpression };
|
|
|
92
87
|
*
|
|
93
88
|
*/
|
|
94
89
|
let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends AbstractExpressionNode {
|
|
95
|
-
constructor(discriminant, cases) {
|
|
96
|
-
super();
|
|
97
|
-
this.discriminant = discriminant;
|
|
98
|
-
this.cases = cases;
|
|
99
|
-
}
|
|
100
90
|
static fromJSON(node, deserializer) {
|
|
101
|
-
return new SwitchStatement_1(deserializer(node.discriminant), node.cases.map(deserializer));
|
|
91
|
+
return new SwitchStatement_1(deserializer(node.discriminant), node.cases.map(deserializer), node.range, node.loc);
|
|
102
92
|
}
|
|
103
93
|
static visit(node, visitNode) {
|
|
104
94
|
visitNode(node.discriminant);
|
|
105
95
|
node.cases.forEach(visitNode);
|
|
106
96
|
}
|
|
97
|
+
constructor(discriminant, cases, range, loc) {
|
|
98
|
+
super(range, loc);
|
|
99
|
+
this.discriminant = discriminant;
|
|
100
|
+
this.cases = cases;
|
|
101
|
+
}
|
|
107
102
|
getDiscriminant() {
|
|
108
103
|
return this.discriminant;
|
|
109
104
|
}
|
|
110
105
|
getCases() {
|
|
111
106
|
return this.cases;
|
|
112
107
|
}
|
|
113
|
-
shareVariables(scopeList) {
|
|
114
|
-
this.discriminant.shareVariables(scopeList);
|
|
115
|
-
this.cases.forEach(item => item.shareVariables(scopeList));
|
|
116
|
-
}
|
|
117
108
|
set(stack, value) {
|
|
118
109
|
throw new Error(`SwitchStatement#set() has no implementation.`);
|
|
119
110
|
}
|
|
@@ -163,7 +154,7 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
163
154
|
};
|
|
164
155
|
SwitchStatement = SwitchStatement_1 = __decorate([
|
|
165
156
|
Deserializer('SwitchStatement'),
|
|
166
|
-
__metadata("design:paramtypes", [Object, Array])
|
|
157
|
+
__metadata("design:paramtypes", [Object, Array, Array, Object])
|
|
167
158
|
], SwitchStatement);
|
|
168
159
|
export { SwitchStatement };
|
|
169
160
|
//# sourceMappingURL=switch.js.map
|
|
@@ -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, ExpressionEventPath,\n\tVisitNodeType, SourceLocation\n} from '../../expression.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\tnode.range,\n\t\t\tnode.loc\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(\n\t\tprotected test: ExpressionNode,\n\t\tprotected consequent: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\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 fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression {\n\t\treturn new DefaultExpression(\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\n\t}\n\tstatic visit(node: DefaultExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.consequent);\n\t}\n\tconstructor(\n\t\tblock: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(new Identifier('default'), block, range, loc);\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\tnode.range,\n\t\t\tnode.loc\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(\n\t\tprivate discriminant: ExpressionNode,\n\t\tprivate cases: SwitchCase[],\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetDiscriminant() {\n\t\treturn this.discriminant;\n\t}\n\tgetCases() {\n\t\treturn this.cases;\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,9 +1,8 @@
|
|
|
1
|
-
import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../../expression.js';
|
|
2
|
-
import type { Scope } from '../../../scope/scope.js';
|
|
1
|
+
import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, SourceLocation, VisitNodeType } from '../../expression.js';
|
|
3
2
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
4
|
import { Identifier } from '../../definition/values.js';
|
|
6
|
-
export
|
|
5
|
+
export type TerminateType = 'break' | 'continue';
|
|
7
6
|
export declare class TerminateReturnType {
|
|
8
7
|
type: TerminateType;
|
|
9
8
|
label?: string | undefined;
|
|
@@ -19,9 +18,8 @@ export declare class TerminateReturnType {
|
|
|
19
18
|
*/
|
|
20
19
|
declare abstract class TerminateStatement extends AbstractExpressionNode {
|
|
21
20
|
protected label?: Identifier | undefined;
|
|
22
|
-
constructor(label?: Identifier | undefined);
|
|
21
|
+
constructor(label?: Identifier | undefined, range?: [number, number], loc?: SourceLocation);
|
|
23
22
|
getLabel(): void;
|
|
24
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
25
23
|
set(stack: Stack, value: any): void;
|
|
26
24
|
get(stack: Stack): TerminateReturnType;
|
|
27
25
|
dependency(computed?: true): ExpressionNode[];
|
|
@@ -47,10 +45,9 @@ export declare class LabeledStatement extends AbstractExpressionNode {
|
|
|
47
45
|
private body;
|
|
48
46
|
static fromJSON(node: LabeledStatement, deserializer: NodeDeserializer): LabeledStatement;
|
|
49
47
|
static visit(node: LabeledStatement, visitNode: VisitNodeType): void;
|
|
50
|
-
constructor(label: Identifier, body: ExpressionNode);
|
|
48
|
+
constructor(label: Identifier, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
|
|
51
49
|
getLabel(): Identifier;
|
|
52
50
|
getBody(): ExpressionNode;
|
|
53
|
-
shareVariables(scopeList: Scope<any>[]): void;
|
|
54
51
|
set(stack: Stack, value: any): void;
|
|
55
52
|
get(stack: Stack): any;
|
|
56
53
|
dependency(computed?: true | undefined): ExpressionNode[];
|
|
@@ -19,14 +19,13 @@ export class TerminateReturnType {
|
|
|
19
19
|
*
|
|
20
20
|
*/
|
|
21
21
|
class TerminateStatement extends AbstractExpressionNode {
|
|
22
|
-
constructor(label) {
|
|
23
|
-
super();
|
|
22
|
+
constructor(label, range, loc) {
|
|
23
|
+
super(range, loc);
|
|
24
24
|
this.label = label;
|
|
25
25
|
}
|
|
26
26
|
getLabel() {
|
|
27
27
|
this.label;
|
|
28
28
|
}
|
|
29
|
-
shareVariables(scopeList) { }
|
|
30
29
|
set(stack, value) {
|
|
31
30
|
throw new Error(`TerminateStatement#set() has no implementation.`);
|
|
32
31
|
}
|
|
@@ -48,9 +47,7 @@ class TerminateStatement extends AbstractExpressionNode {
|
|
|
48
47
|
}
|
|
49
48
|
let BreakStatement = BreakStatement_1 = class BreakStatement extends TerminateStatement {
|
|
50
49
|
static fromJSON(node, deserializer) {
|
|
51
|
-
return node.label
|
|
52
|
-
? new BreakStatement_1(deserializer(node.label))
|
|
53
|
-
: BreakStatement_1.BREAK_INSTANCE;
|
|
50
|
+
return new BreakStatement_1(node.label ? deserializer(node.label) : void 0, node.range, node.loc);
|
|
54
51
|
}
|
|
55
52
|
static visit(node, visitNode) {
|
|
56
53
|
node.label && visitNode(node.label);
|
|
@@ -66,9 +63,7 @@ BreakStatement = BreakStatement_1 = __decorate([
|
|
|
66
63
|
export { BreakStatement };
|
|
67
64
|
let ContinueStatement = ContinueStatement_1 = class ContinueStatement extends TerminateStatement {
|
|
68
65
|
static fromJSON(node, deserializer) {
|
|
69
|
-
return node.label
|
|
70
|
-
? new ContinueStatement_1(deserializer(node.label))
|
|
71
|
-
: ContinueStatement_1.CONTINUE_INSTANCE;
|
|
66
|
+
return new ContinueStatement_1(node.label && deserializer(node.label), node.range, node.loc);
|
|
72
67
|
}
|
|
73
68
|
static visit(node, visitNode) {
|
|
74
69
|
node.label && visitNode(node.label);
|
|
@@ -83,27 +78,24 @@ ContinueStatement = ContinueStatement_1 = __decorate([
|
|
|
83
78
|
], ContinueStatement);
|
|
84
79
|
export { ContinueStatement };
|
|
85
80
|
let LabeledStatement = LabeledStatement_1 = class LabeledStatement extends AbstractExpressionNode {
|
|
86
|
-
constructor(label, body) {
|
|
87
|
-
super();
|
|
88
|
-
this.label = label;
|
|
89
|
-
this.body = body;
|
|
90
|
-
}
|
|
91
81
|
static fromJSON(node, deserializer) {
|
|
92
|
-
return new LabeledStatement_1(deserializer(node.label), deserializer(node.body));
|
|
82
|
+
return new LabeledStatement_1(deserializer(node.label), deserializer(node.body), node.range, node.loc);
|
|
93
83
|
}
|
|
94
84
|
static visit(node, visitNode) {
|
|
95
85
|
visitNode(node.label);
|
|
96
86
|
visitNode(node.body);
|
|
97
87
|
}
|
|
88
|
+
constructor(label, body, range, loc) {
|
|
89
|
+
super(range, loc);
|
|
90
|
+
this.label = label;
|
|
91
|
+
this.body = body;
|
|
92
|
+
}
|
|
98
93
|
getLabel() {
|
|
99
94
|
return this.label;
|
|
100
95
|
}
|
|
101
96
|
getBody() {
|
|
102
97
|
return this.body;
|
|
103
98
|
}
|
|
104
|
-
shareVariables(scopeList) {
|
|
105
|
-
this.body.shareVariables(scopeList);
|
|
106
|
-
}
|
|
107
99
|
set(stack, value) {
|
|
108
100
|
throw new Error('LabeledStatement#set() not implemented.');
|
|
109
101
|
}
|
|
@@ -128,7 +120,7 @@ let LabeledStatement = LabeledStatement_1 = class LabeledStatement extends Abstr
|
|
|
128
120
|
};
|
|
129
121
|
LabeledStatement = LabeledStatement_1 = __decorate([
|
|
130
122
|
Deserializer('LabeledStatement'),
|
|
131
|
-
__metadata("design:paramtypes", [Identifier, Object])
|
|
123
|
+
__metadata("design:paramtypes", [Identifier, Object, Array, Object])
|
|
132
124
|
], LabeledStatement);
|
|
133
125
|
export { LabeledStatement };
|
|
134
126
|
//# sourceMappingURL=terminate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/terminate.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tExpressionEventPath, ExpressionNode, NodeDeserializer,\n\tSourceLocation, VisitNodeType\n} from '../../expression.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(\n\t\tprotected label?: Identifier,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\tgetLabel() {\n\t\tthis.label;\n\t}\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 new BreakStatement(\n\t\t\tnode.label ? deserializer(node.label) as Identifier : void 0,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\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\t\treturn new ContinueStatement(\n\t\t\tnode.label && deserializer(node.label) as Identifier,\n\t\t\tnode.range,\n\t\t\tnode.loc\n\t\t);\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\tnode.range,\n\t\t\tnode.loc\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(\n\t\tprivate label: Identifier,\n\t\tprivate body: ExpressionNode,\n\t\trange?: [number, number],\n\t\tloc?: SourceLocation) {\n\t\tsuper(range, loc);\n\t}\n\n\tgetLabel() {\n\t\treturn this.label;\n\t}\n\tgetBody() {\n\t\treturn this.body;\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"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType, SourceLocation } from '../../expression.js';
|
|
2
|
+
import type { Stack } from '../../../scope/stack.js';
|
|
3
|
+
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
|
+
/**
|
|
5
|
+
* The with statement extends the scope chain for a statement.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WithStatement extends AbstractExpressionNode {
|
|
8
|
+
protected object: ExpressionNode;
|
|
9
|
+
protected body: ExpressionNode;
|
|
10
|
+
static fromJSON(node: WithStatement, deserializer: NodeDeserializer): WithStatement;
|
|
11
|
+
static visit(node: WithStatement, visitNode: VisitNodeType): void;
|
|
12
|
+
constructor(object: ExpressionNode, body: ExpressionNode, range?: [number, number], loc?: SourceLocation);
|
|
13
|
+
getObject(): ExpressionNode;
|
|
14
|
+
getBody(): ExpressionNode;
|
|
15
|
+
set(stack: Stack, value: any): void;
|
|
16
|
+
get(stack: Stack): any;
|
|
17
|
+
dependency(computed?: true): ExpressionNode[];
|
|
18
|
+
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
19
|
+
toString(): string;
|
|
20
|
+
toJson(): object;
|
|
21
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var WithStatement_1;
|
|
2
|
+
import { __decorate, __metadata } from "tslib";
|
|
3
|
+
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
|
+
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
/**
|
|
6
|
+
* The with statement extends the scope chain for a statement.
|
|
7
|
+
*/
|
|
8
|
+
let WithStatement = WithStatement_1 = class WithStatement extends AbstractExpressionNode {
|
|
9
|
+
static fromJSON(node, deserializer) {
|
|
10
|
+
return new WithStatement_1(deserializer(node.object), deserializer(node.body), node.range, node.loc);
|
|
11
|
+
}
|
|
12
|
+
static visit(node, visitNode) {
|
|
13
|
+
visitNode(node.object);
|
|
14
|
+
visitNode(node.body);
|
|
15
|
+
}
|
|
16
|
+
constructor(object, body, range, loc) {
|
|
17
|
+
super(range, loc);
|
|
18
|
+
this.object = object;
|
|
19
|
+
this.body = body;
|
|
20
|
+
}
|
|
21
|
+
getObject() {
|
|
22
|
+
return this.object;
|
|
23
|
+
}
|
|
24
|
+
getBody() {
|
|
25
|
+
return this.body;
|
|
26
|
+
}
|
|
27
|
+
set(stack, value) {
|
|
28
|
+
throw new Error(`WithStatement#set() has no implementation.`);
|
|
29
|
+
}
|
|
30
|
+
get(stack) {
|
|
31
|
+
const object = this.object.get(stack);
|
|
32
|
+
let propertyKeys;
|
|
33
|
+
if (object[Symbol.unscopables]) {
|
|
34
|
+
const allKeys = [...Object.keys(object), ...Object.getOwnPropertySymbols(object)];
|
|
35
|
+
const unscopablesKeys = Object.entries(object[Symbol.unscopables])
|
|
36
|
+
.filter(entry => entry[1])
|
|
37
|
+
.map(entry => entry[0]);
|
|
38
|
+
propertyKeys = allKeys.filter(key => !unscopablesKeys.includes(key));
|
|
39
|
+
}
|
|
40
|
+
const objectScope = stack.pushBlockScopeFor(object, propertyKeys);
|
|
41
|
+
objectScope.getContextProxy = () => object;
|
|
42
|
+
const value = this.body.get(stack);
|
|
43
|
+
stack.clearTo(objectScope);
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
dependency(computed) {
|
|
47
|
+
return this.object.dependency(computed).concat(this.body.dependency(computed));
|
|
48
|
+
}
|
|
49
|
+
dependencyPath(computed) {
|
|
50
|
+
return this.object.dependencyPath(computed).concat(this.body.dependencyPath(computed));
|
|
51
|
+
}
|
|
52
|
+
toString() {
|
|
53
|
+
return `with (${this.object.toString()}) ${this.body.toString()}`;
|
|
54
|
+
}
|
|
55
|
+
toJson() {
|
|
56
|
+
return {
|
|
57
|
+
object: this.object.toJSON(),
|
|
58
|
+
body: this.body.toJSON()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
WithStatement = WithStatement_1 = __decorate([
|
|
63
|
+
Deserializer('WithStatement'),
|
|
64
|
+
__metadata("design:paramtypes", [Object, Object, Array, Object])
|
|
65
|
+
], WithStatement);
|
|
66
|
+
export { WithStatement };
|
|
67
|
+
//# sourceMappingURL=with.js.map
|