@ibyar/expressions 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -0
- package/api/abstract.d.ts +3 -3
- package/api/abstract.js +2 -2
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +18 -12
- package/api/class/class.js +122 -81
- package/api/class/class.js.map +1 -1
- package/api/computing/debugger.d.ts +15 -0
- package/api/computing/debugger.js +35 -0
- package/api/computing/debugger.js.map +1 -0
- package/api/computing/rest.d.ts +4 -4
- package/api/computing/rest.js.map +1 -1
- package/api/definition/array.d.ts +7 -6
- package/api/definition/array.js +20 -14
- package/api/definition/array.js.map +1 -1
- package/api/definition/function.d.ts +35 -46
- package/api/definition/function.js +281 -299
- package/api/definition/function.js.map +1 -1
- package/api/definition/object.d.ts +9 -6
- package/api/definition/object.js +34 -4
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.js +5 -1
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +31 -47
- package/api/definition/values.js +59 -145
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +2 -1
- package/api/deserialize/deserialize.js +4 -1
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/deserialize/type-store.d.ts +2 -2
- package/api/deserialize/type-store.js.map +1 -1
- package/api/expression.d.ts +5 -7
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +2 -0
- package/api/index.js +2 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +29 -0
- package/api/module/common.js +71 -0
- package/api/module/common.js.map +1 -0
- package/api/module/export.d.ts +15 -9
- package/api/module/export.js +57 -15
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +3 -8
- package/api/module/import.js +9 -19
- package/api/module/import.js.map +1 -1
- package/api/{module/app/program.d.ts → program.d.ts} +4 -4
- package/api/{module/app/program.js → program.js} +3 -3
- package/api/program.js.map +1 -0
- package/api/statement/control/block.d.ts +1 -2
- package/api/statement/control/block.js +20 -21
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/switch.js +8 -3
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +36 -11
- package/api/statement/control/terminate.js +79 -18
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.d.ts +7 -7
- package/api/statement/declarations/declares.js +1 -1
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.js +22 -16
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.js +15 -11
- package/api/statement/iterations/while.js.map +1 -1
- package/api/utils.d.ts +2 -0
- package/api/utils.js +3 -1
- package/api/utils.js.map +1 -1
- package/package.json +4 -4
- package/scope/proxy.d.ts +0 -2
- package/scope/proxy.js +4 -24
- package/scope/proxy.js.map +1 -1
- package/scope/stack.d.ts +2 -2
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +204 -0
- package/v8/enums.js +375 -0
- package/v8/enums.js.map +1 -0
- package/v8/index.d.ts +2 -1
- package/v8/index.js +2 -1
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +177 -0
- package/v8/inline.js +1973 -0
- package/v8/inline.js.map +1 -0
- package/v8/nodes.d.ts +8 -7
- package/v8/nodes.js +37 -63
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +41 -151
- package/v8/parser.js +507 -1579
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +35 -3
- package/v8/stream.js +616 -164
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +15 -9
- package/v8/token.js +79 -46
- package/v8/token.js.map +1 -1
- package/visit/visitor.js.map +1 -1
- package/api/module/app/program.js.map +0 -1
- package/v8/app.d.ts +0 -0
- package/v8/app.js +0 -2
- package/v8/app.js.map +0 -1
|
@@ -2,15 +2,15 @@ var BlockStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
-
import {
|
|
5
|
+
import { TerminateReturnType } from './terminate.js';
|
|
6
|
+
import { isDeclarationExpression } from '../../utils.js';
|
|
6
7
|
let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExpressionNode {
|
|
7
|
-
constructor(body
|
|
8
|
+
constructor(body) {
|
|
8
9
|
super();
|
|
9
10
|
this.body = body;
|
|
10
|
-
this.isStatement = isStatement;
|
|
11
11
|
}
|
|
12
12
|
static fromJSON(node, deserializer) {
|
|
13
|
-
return new BlockStatement_1(node.body.map(
|
|
13
|
+
return new BlockStatement_1(node.body.map(deserializer));
|
|
14
14
|
}
|
|
15
15
|
static visit(node, visitNode) {
|
|
16
16
|
node.body.forEach(visitNode);
|
|
@@ -26,25 +26,19 @@ let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExp
|
|
|
26
26
|
}
|
|
27
27
|
get(stack) {
|
|
28
28
|
const blockScope = stack.pushBlockScope();
|
|
29
|
+
let value;
|
|
29
30
|
for (const node of this.body) {
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
case ContinueStatement.ContinueSymbol === value:
|
|
35
|
-
case value instanceof ReturnValue:
|
|
36
|
-
stack.clearTo(blockScope);
|
|
37
|
-
return value;
|
|
38
|
-
}
|
|
31
|
+
value = node.get(stack);
|
|
32
|
+
if (value instanceof ReturnValue) {
|
|
33
|
+
stack.clearTo(blockScope);
|
|
34
|
+
return value.value;
|
|
39
35
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
stack.clearTo(blockScope);
|
|
43
|
-
return value.value;
|
|
44
|
-
}
|
|
36
|
+
if (value instanceof TerminateReturnType) {
|
|
37
|
+
return value;
|
|
45
38
|
}
|
|
46
39
|
}
|
|
47
40
|
stack.clearTo(blockScope);
|
|
41
|
+
return value;
|
|
48
42
|
}
|
|
49
43
|
dependency(computed) {
|
|
50
44
|
return this.body.flatMap(exp => exp.dependency(computed));
|
|
@@ -53,15 +47,20 @@ let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExp
|
|
|
53
47
|
return this.body.flatMap(node => node.dependencyPath(computed));
|
|
54
48
|
}
|
|
55
49
|
toString() {
|
|
56
|
-
return `{
|
|
50
|
+
return `{
|
|
51
|
+
${this.body
|
|
52
|
+
.map(node => ({ insert: !isDeclarationExpression(node), string: node.toString() }))
|
|
53
|
+
.map(ref => `${ref.string}${ref.insert ? ';' : ''}`)
|
|
54
|
+
.join('\n')}
|
|
55
|
+
}`;
|
|
57
56
|
}
|
|
58
57
|
toJson() {
|
|
59
|
-
return { body: this.body.map(node => node.toJSON())
|
|
58
|
+
return { body: this.body.map(node => node.toJSON()) };
|
|
60
59
|
}
|
|
61
60
|
};
|
|
62
61
|
BlockStatement = BlockStatement_1 = __decorate([
|
|
63
62
|
Deserializer('BlockStatement'),
|
|
64
|
-
__metadata("design:paramtypes", [Array
|
|
63
|
+
__metadata("design:paramtypes", [Array])
|
|
65
64
|
], BlockStatement);
|
|
66
65
|
export { BlockStatement };
|
|
67
66
|
//# sourceMappingURL=block.js.map
|
|
@@ -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,
|
|
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,7 +2,7 @@ var SwitchCase_1, DefaultExpression_1, SwitchStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
-
import {
|
|
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
8
|
constructor(test, consequent) {
|
|
@@ -124,8 +124,13 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
124
124
|
const caseBlock = stack.pushBlockScope();
|
|
125
125
|
for (let index = startIndex; index < this.cases.length; index++) {
|
|
126
126
|
const returnValue = this.cases[index].get(stack);
|
|
127
|
-
if (
|
|
128
|
-
|
|
127
|
+
if (result instanceof TerminateReturnType) {
|
|
128
|
+
if (result.type === 'continue') {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
129
134
|
}
|
|
130
135
|
}
|
|
131
136
|
stack.clearTo(caseBlock);
|
|
@@ -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 { BreakStatement } 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 (returnValue === BreakStatement.BreakSymbol) {\n\t\t\t\tbreak;\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"]}
|
|
@@ -1,31 +1,56 @@
|
|
|
1
|
-
import type { ExpressionEventPath, ExpressionNode, VisitNodeType } from '../../expression.js';
|
|
1
|
+
import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } 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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
import { Identifier } from '../../definition/values.js';
|
|
6
|
+
export declare type TerminateType = 'break' | 'continue';
|
|
7
|
+
export declare class TerminateReturnType {
|
|
8
|
+
type: TerminateType;
|
|
9
|
+
label?: string | undefined;
|
|
10
|
+
constructor(type: TerminateType, label?: string | undefined);
|
|
11
|
+
}
|
|
12
|
+
declare abstract class TerminateStatement extends AbstractExpressionNode {
|
|
13
|
+
protected label?: Identifier | undefined;
|
|
14
|
+
constructor(label?: Identifier | undefined);
|
|
10
15
|
getLabel(): void;
|
|
11
16
|
shareVariables(scopeList: Scope<any>[]): void;
|
|
12
17
|
set(stack: Stack, value: any): void;
|
|
13
|
-
get(stack: Stack):
|
|
18
|
+
get(stack: Stack): TerminateReturnType;
|
|
14
19
|
dependency(computed?: true): ExpressionNode[];
|
|
15
20
|
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
16
21
|
toString(): string;
|
|
17
22
|
toJson(): object;
|
|
23
|
+
abstract getType(): TerminateType;
|
|
18
24
|
}
|
|
19
25
|
export declare class BreakStatement extends TerminateStatement {
|
|
20
|
-
static readonly BreakSymbol: unique symbol;
|
|
21
26
|
static readonly BREAK_INSTANCE: BreakStatement;
|
|
22
|
-
static fromJSON(node: BreakStatement): BreakStatement;
|
|
27
|
+
static fromJSON(node: BreakStatement, deserializer: NodeDeserializer): BreakStatement;
|
|
23
28
|
static visit(node: BreakStatement, visitNode: VisitNodeType): void;
|
|
29
|
+
getType(): 'break';
|
|
24
30
|
}
|
|
25
31
|
export declare class ContinueStatement extends TerminateStatement {
|
|
26
|
-
static readonly ContinueSymbol: unique symbol;
|
|
27
32
|
static readonly CONTINUE_INSTANCE: ContinueStatement;
|
|
28
|
-
static fromJSON(node: ContinueStatement): ContinueStatement;
|
|
33
|
+
static fromJSON(node: ContinueStatement, deserializer: NodeDeserializer): ContinueStatement;
|
|
29
34
|
static visit(node: ContinueStatement, visitNode: VisitNodeType): void;
|
|
35
|
+
getType(): 'continue';
|
|
36
|
+
}
|
|
37
|
+
export declare class LabeledStatement extends AbstractExpressionNode {
|
|
38
|
+
private label;
|
|
39
|
+
private body;
|
|
40
|
+
static fromJSON(node: LabeledStatement, deserializer: NodeDeserializer): LabeledStatement;
|
|
41
|
+
static visit(node: LabeledStatement, visitNode: VisitNodeType): void;
|
|
42
|
+
constructor(label: Identifier, body: ExpressionNode);
|
|
43
|
+
getLabel(): Identifier;
|
|
44
|
+
getBody(): ExpressionNode;
|
|
45
|
+
shareVariables(scopeList: Scope<any>[]): void;
|
|
46
|
+
set(stack: Stack, value: any): void;
|
|
47
|
+
get(stack: Stack): any;
|
|
48
|
+
dependency(computed?: true | undefined): ExpressionNode[];
|
|
49
|
+
dependencyPath(computed?: true | undefined): ExpressionEventPath[];
|
|
50
|
+
toString(): string;
|
|
51
|
+
toJson(): {
|
|
52
|
+
label: import("../../expression.js").NodeJsonType;
|
|
53
|
+
body: import("../../expression.js").NodeJsonType;
|
|
54
|
+
};
|
|
30
55
|
}
|
|
31
56
|
export {};
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
var BreakStatement_1, ContinueStatement_1;
|
|
2
|
-
import { __decorate } from "tslib";
|
|
1
|
+
var BreakStatement_1, ContinueStatement_1, LabeledStatement_1;
|
|
2
|
+
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
import { Identifier } from '../../definition/values.js';
|
|
6
|
+
export class TerminateReturnType {
|
|
7
|
+
constructor(type, label) {
|
|
8
|
+
this.type = type;
|
|
9
|
+
this.label = label;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
;
|
|
5
13
|
class TerminateStatement extends AbstractExpressionNode {
|
|
6
|
-
constructor(
|
|
14
|
+
constructor(label) {
|
|
7
15
|
super();
|
|
8
|
-
this.symbol = symbol;
|
|
9
16
|
this.label = label;
|
|
10
17
|
}
|
|
11
|
-
getSymbol() {
|
|
12
|
-
return this.symbol;
|
|
13
|
-
}
|
|
14
18
|
getLabel() {
|
|
15
19
|
this.label;
|
|
16
20
|
}
|
|
@@ -19,7 +23,7 @@ class TerminateStatement extends AbstractExpressionNode {
|
|
|
19
23
|
throw new Error(`TerminateStatement#set() has no implementation.`);
|
|
20
24
|
}
|
|
21
25
|
get(stack) {
|
|
22
|
-
return this.
|
|
26
|
+
return new TerminateReturnType(this.getType(), this.label?.get(stack));
|
|
23
27
|
}
|
|
24
28
|
dependency(computed) {
|
|
25
29
|
return [];
|
|
@@ -28,38 +32,95 @@ class TerminateStatement extends AbstractExpressionNode {
|
|
|
28
32
|
return [];
|
|
29
33
|
}
|
|
30
34
|
toString() {
|
|
31
|
-
return this.
|
|
35
|
+
return `${this.getType()}${this.label ? ` ${this.label.toString()}` : ''};`;
|
|
32
36
|
}
|
|
33
37
|
toJson() {
|
|
34
|
-
return {
|
|
38
|
+
return { label: this.label?.toJSON() };
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
41
|
let BreakStatement = BreakStatement_1 = class BreakStatement extends TerminateStatement {
|
|
38
|
-
static fromJSON(node) {
|
|
39
|
-
return
|
|
42
|
+
static fromJSON(node, deserializer) {
|
|
43
|
+
return node.label
|
|
44
|
+
? new BreakStatement_1(deserializer(node.label))
|
|
45
|
+
: BreakStatement_1.BREAK_INSTANCE;
|
|
40
46
|
}
|
|
41
47
|
static visit(node, visitNode) {
|
|
42
48
|
node.label && visitNode(node.label);
|
|
43
49
|
}
|
|
50
|
+
getType() {
|
|
51
|
+
return 'break';
|
|
52
|
+
}
|
|
44
53
|
};
|
|
45
|
-
BreakStatement.
|
|
46
|
-
BreakStatement.BREAK_INSTANCE = Object.freeze(new BreakStatement_1(BreakStatement_1.BreakSymbol));
|
|
54
|
+
BreakStatement.BREAK_INSTANCE = Object.freeze(new BreakStatement_1());
|
|
47
55
|
BreakStatement = BreakStatement_1 = __decorate([
|
|
48
56
|
Deserializer('BreakStatement')
|
|
49
57
|
], BreakStatement);
|
|
50
58
|
export { BreakStatement };
|
|
51
59
|
let ContinueStatement = ContinueStatement_1 = class ContinueStatement extends TerminateStatement {
|
|
52
|
-
static fromJSON(node) {
|
|
53
|
-
return
|
|
60
|
+
static fromJSON(node, deserializer) {
|
|
61
|
+
return node.label
|
|
62
|
+
? new ContinueStatement_1(deserializer(node.label))
|
|
63
|
+
: ContinueStatement_1.CONTINUE_INSTANCE;
|
|
54
64
|
}
|
|
55
65
|
static visit(node, visitNode) {
|
|
56
66
|
node.label && visitNode(node.label);
|
|
57
67
|
}
|
|
68
|
+
getType() {
|
|
69
|
+
return 'continue';
|
|
70
|
+
}
|
|
58
71
|
};
|
|
59
|
-
ContinueStatement.
|
|
60
|
-
ContinueStatement.CONTINUE_INSTANCE = Object.freeze(new ContinueStatement_1(ContinueStatement_1.ContinueSymbol));
|
|
72
|
+
ContinueStatement.CONTINUE_INSTANCE = Object.freeze(new ContinueStatement_1());
|
|
61
73
|
ContinueStatement = ContinueStatement_1 = __decorate([
|
|
62
74
|
Deserializer('ContinueStatement')
|
|
63
75
|
], ContinueStatement);
|
|
64
76
|
export { ContinueStatement };
|
|
77
|
+
let LabeledStatement = LabeledStatement_1 = class LabeledStatement extends AbstractExpressionNode {
|
|
78
|
+
constructor(label, body) {
|
|
79
|
+
super();
|
|
80
|
+
this.label = label;
|
|
81
|
+
this.body = body;
|
|
82
|
+
}
|
|
83
|
+
static fromJSON(node, deserializer) {
|
|
84
|
+
return new LabeledStatement_1(deserializer(node.label), deserializer(node.body));
|
|
85
|
+
}
|
|
86
|
+
static visit(node, visitNode) {
|
|
87
|
+
visitNode(node.label);
|
|
88
|
+
visitNode(node.body);
|
|
89
|
+
}
|
|
90
|
+
getLabel() {
|
|
91
|
+
return this.label;
|
|
92
|
+
}
|
|
93
|
+
getBody() {
|
|
94
|
+
return this.body;
|
|
95
|
+
}
|
|
96
|
+
shareVariables(scopeList) {
|
|
97
|
+
this.body.shareVariables(scopeList);
|
|
98
|
+
}
|
|
99
|
+
set(stack, value) {
|
|
100
|
+
throw new Error('LabeledStatement#set() not implemented.');
|
|
101
|
+
}
|
|
102
|
+
get(stack) {
|
|
103
|
+
return this.body.get(stack);
|
|
104
|
+
}
|
|
105
|
+
dependency(computed) {
|
|
106
|
+
return this.body.dependency(computed);
|
|
107
|
+
}
|
|
108
|
+
dependencyPath(computed) {
|
|
109
|
+
return this.body.dependencyPath(computed);
|
|
110
|
+
}
|
|
111
|
+
toString() {
|
|
112
|
+
return `${this.label.toString()}:\n${this.body.toString()}`;
|
|
113
|
+
}
|
|
114
|
+
toJson() {
|
|
115
|
+
return {
|
|
116
|
+
label: this.label.toJSON(),
|
|
117
|
+
body: this.body.toJSON()
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
LabeledStatement = LabeledStatement_1 = __decorate([
|
|
122
|
+
Deserializer('LabeledStatement'),
|
|
123
|
+
__metadata("design:paramtypes", [Identifier, Object])
|
|
124
|
+
], LabeledStatement);
|
|
125
|
+
export { LabeledStatement };
|
|
65
126
|
//# sourceMappingURL=terminate.js.map
|
|
@@ -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;
|
|
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"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode,
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, DeclarationExpression, ExpressionEventPath, VisitNodeType } 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
|
-
export declare class VariableDeclarator extends AbstractExpressionNode implements
|
|
6
|
-
id:
|
|
5
|
+
export declare class VariableDeclarator extends AbstractExpressionNode implements DeclarationExpression {
|
|
6
|
+
id: DeclarationExpression;
|
|
7
7
|
init?: ExpressionNode | undefined;
|
|
8
8
|
static fromJSON(node: VariableDeclarator, deserializer: NodeDeserializer): VariableDeclarator;
|
|
9
9
|
static visit(node: VariableDeclarator, visitNode: VisitNodeType): void;
|
|
10
|
-
constructor(id:
|
|
11
|
-
getId():
|
|
10
|
+
constructor(id: DeclarationExpression, init?: ExpressionNode | undefined);
|
|
11
|
+
getId(): DeclarationExpression;
|
|
12
12
|
getInit(): ExpressionNode | undefined;
|
|
13
13
|
shareVariables(scopeList: Scope<any>[]): void;
|
|
14
14
|
set(stack: Stack, value: any): void;
|
|
@@ -23,14 +23,14 @@ export declare class VariableDeclarator extends AbstractExpressionNode implement
|
|
|
23
23
|
init: import("../../expression.js").NodeJsonType | undefined;
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
-
export declare class VariableDeclarationNode extends AbstractExpressionNode implements
|
|
26
|
+
export declare class VariableDeclarationNode extends AbstractExpressionNode implements DeclarationExpression {
|
|
27
27
|
protected declarations: VariableDeclarator[];
|
|
28
28
|
protected kind: 'var' | 'let' | 'const';
|
|
29
29
|
static fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode;
|
|
30
30
|
static visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void;
|
|
31
31
|
constructor(declarations: VariableDeclarator[], kind: 'var' | 'let' | 'const');
|
|
32
32
|
getDeclarations(): VariableDeclarator[];
|
|
33
|
-
getKind(): "
|
|
33
|
+
getKind(): "let" | "var" | "const";
|
|
34
34
|
shareVariables(scopeList: Scope<any>[]): void;
|
|
35
35
|
set(stack: Stack, value: any): void;
|
|
36
36
|
get(stack: Stack): void;
|
|
@@ -115,7 +115,7 @@ let VariableDeclarationNode = VariableDeclarationNode_1 = class VariableDeclarat
|
|
|
115
115
|
return this.declarations.flatMap(declareVariable => declareVariable.dependencyPath(computed));
|
|
116
116
|
}
|
|
117
117
|
toString() {
|
|
118
|
-
return `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')}
|
|
118
|
+
return `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')};`;
|
|
119
119
|
}
|
|
120
120
|
toJson() {
|
|
121
121
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declares.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/declarations/declares.ts"],"names":[],"mappings":";;AAOA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,IAAa,kBAAkB,0BAA/B,MAAa,kBAAmB,SAAQ,sBAAsB;IAW7D,YAAmB,
|
|
1
|
+
{"version":3,"file":"declares.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/declarations/declares.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type {\n\tNodeDeserializer, ExpressionNode, DeclarationExpression,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n@Deserializer('VariableDeclarator')\nexport class VariableDeclarator extends AbstractExpressionNode implements DeclarationExpression {\n\tstatic fromJSON(node: VariableDeclarator, deserializer: NodeDeserializer): VariableDeclarator {\n\t\treturn new VariableDeclarator(\n\t\t\tdeserializer(node.id) as DeclarationExpression,\n\t\t\tnode.init ? deserializer(node.init) : void 0\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarator, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.init && visitNode(node.init);\n\t}\n\tconstructor(public id: DeclarationExpression, public init?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetInit() {\n\t\treturn this.init;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.init?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`VariableNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tthis.declareVariable(stack);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue?: any) {\n\t\tif (propertyValue !== undefined) {\n\t\t\tthis.id.declareVariable(stack, propertyValue);\n\t\t\treturn;\n\t\t}\n\t\tconst value = this.init?.get(stack);\n\t\tif (value instanceof AwaitPromise) {\n\t\t\tvalue.node = this.id;\n\t\t\tvalue.declareVariable = true;\n\t\t\tvalue.node.declareVariable(stack);\n\t\t\tstack.resolveAwait(value);\n\t\t} else {\n\t\t\tthis.id.declareVariable(stack, value);\n\t\t}\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.id.getDeclarationName!();\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.init?.dependency() || [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.init?.dependencyPath(computed) || [];\n\t}\n\ttoString() {\n\t\treturn `${this.id.toString()}${this.init ? ` = ${this.init.toString()}` : ''}`;\n\t}\n\ttoJson() {\n\t\treturn {\n\t\t\tid: this.id.toJSON(),\n\t\t\tinit: this.init?.toJSON()\n\t\t};\n\t}\n}\n\n@Deserializer('VariableDeclaration')\nexport class VariableDeclarationNode extends AbstractExpressionNode implements DeclarationExpression {\n\tstatic fromJSON(node: VariableDeclarationNode, deserializer: NodeDeserializer): VariableDeclarationNode {\n\t\treturn new VariableDeclarationNode(\n\t\t\tnode.declarations.map(deserializer) as VariableDeclarator[],\n\t\t\tnode.kind\n\t\t);\n\t}\n\tstatic visit(node: VariableDeclarationNode, visitNode: VisitNodeType): void {\n\t\tnode.declarations.forEach(visitNode);\n\t}\n\tconstructor(protected declarations: VariableDeclarator[], protected kind: 'var' | 'let' | 'const') {\n\t\tsuper();\n\t}\n\tgetDeclarations() {\n\t\treturn this.declarations;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.declarations.forEach(declaration => declaration.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tif (Array.isArray(value)) {\n\t\t\tthrow new Error(`VariableDeclarationNode#set() has no implementation.`);\n\t\t}\n\t\tthis.declarations[0].id.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tfor (const item of this.declarations) {\n\t\t\titem.declareVariable(stack);\n\t\t}\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.declarations[0].getDeclarationName!();\n\t}\n\tdeclareVariable(stack: Stack, propertyValue: any): any {\n\t\tthis.declarations[0].declareVariable(stack, propertyValue);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.declarations.flatMap(declareVariable => declareVariable.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\treturn `${this.kind} ${this.declarations.map(v => v.toString()).join(', ')};`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\tdeclarations: this.declarations.map(v => v.toJSON()),\n\t\t};\n\t}\n}\n"]}
|
|
@@ -2,7 +2,7 @@ var ForNode_1, ForOfNode_1, ForInNode_1, ForAwaitOfNode_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode, ReturnValue } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
-
import {
|
|
5
|
+
import { TerminateReturnType } from '../control/terminate.js';
|
|
6
6
|
let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
|
|
7
7
|
constructor(body, init, test, update) {
|
|
8
8
|
super();
|
|
@@ -45,11 +45,13 @@ let ForNode = ForNode_1 = class ForNode extends AbstractExpressionNode {
|
|
|
45
45
|
const forBlock = stack.pushBlockScope();
|
|
46
46
|
for (this.init?.get(stack); this.test?.get(stack) ?? true; this.update?.get(stack)) {
|
|
47
47
|
const result = this.body.get(stack);
|
|
48
|
-
if (
|
|
49
|
-
continue
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
if (result instanceof TerminateReturnType) {
|
|
49
|
+
if (result.type === 'continue') {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
53
55
|
}
|
|
54
56
|
if (result instanceof ReturnValue) {
|
|
55
57
|
stack.clearTo(forBlock);
|
|
@@ -127,11 +129,13 @@ let ForOfNode = ForOfNode_1 = class ForOfNode extends AbstractExpressionNode {
|
|
|
127
129
|
const forBlock = stack.pushBlockScope();
|
|
128
130
|
this.left.declareVariable(stack, iterator);
|
|
129
131
|
const result = this.body.get(stack);
|
|
130
|
-
if (
|
|
131
|
-
continue
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
if (result instanceof TerminateReturnType) {
|
|
133
|
+
if (result.type === 'continue') {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
135
139
|
}
|
|
136
140
|
else if (result instanceof ReturnValue) {
|
|
137
141
|
stack.clearTo(forBlock);
|
|
@@ -200,11 +204,13 @@ let ForInNode = ForInNode_1 = class ForInNode extends AbstractExpressionNode {
|
|
|
200
204
|
const forBlock = stack.pushBlockScope();
|
|
201
205
|
this.left.declareVariable(stack, iterator);
|
|
202
206
|
const result = this.body.get(stack);
|
|
203
|
-
if (
|
|
204
|
-
continue
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
207
|
+
if (result instanceof TerminateReturnType) {
|
|
208
|
+
if (result.type === 'continue') {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
208
214
|
}
|
|
209
215
|
else if (result instanceof ReturnValue) {
|
|
210
216
|
stack.clearTo(forBlock);
|