@ibyar/expressions 0.5.2 → 0.5.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +4 -3
- package/api/abstract.d.ts +5 -6
- package/api/abstract.js +8 -3
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +227 -0
- package/api/class/class.js +662 -0
- package/api/class/class.js.map +1 -0
- package/api/class/decorator.d.ts +20 -0
- package/api/class/decorator.js +48 -0
- package/api/class/decorator.js.map +1 -0
- package/api/computing/call.d.ts +3 -1
- package/api/computing/call.js +16 -4
- package/api/computing/call.js.map +1 -1
- package/api/computing/debugger.d.ts +15 -0
- package/api/computing/debugger.js +35 -0
- package/api/computing/debugger.js.map +1 -0
- package/api/computing/new.d.ts +2 -1
- package/api/computing/new.js +4 -0
- package/api/computing/new.js.map +1 -1
- package/api/computing/rest.d.ts +6 -6
- package/api/computing/rest.js +5 -2
- package/api/computing/rest.js.map +1 -1
- package/api/computing/return.d.ts +6 -1
- package/api/computing/return.js +8 -0
- package/api/computing/return.js.map +1 -1
- package/api/computing/spread.d.ts +2 -1
- package/api/computing/spread.js +5 -2
- package/api/computing/spread.js.map +1 -1
- package/api/computing/throw.d.ts +6 -1
- package/api/computing/throw.js +7 -0
- package/api/computing/throw.js.map +1 -1
- package/api/computing/yield.d.ts +2 -1
- package/api/computing/yield.js +3 -0
- package/api/computing/yield.js.map +1 -1
- package/api/definition/array.d.ts +12 -12
- package/api/definition/array.js +31 -25
- package/api/definition/array.js.map +1 -1
- package/api/definition/bind.d.ts +8 -2
- package/api/definition/bind.js +7 -1
- package/api/definition/bind.js.map +1 -1
- package/api/definition/function.d.ts +40 -51
- package/api/definition/function.js +292 -309
- package/api/definition/function.js.map +1 -1
- package/api/definition/member.d.ts +2 -2
- package/api/definition/member.js +1 -1
- package/api/definition/member.js.map +1 -1
- package/api/definition/object.d.ts +15 -12
- package/api/definition/object.js +43 -13
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.d.ts +2 -2
- package/api/definition/statement.js +7 -3
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +44 -50
- package/api/definition/values.js +87 -149
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +7 -1
- package/api/deserialize/deserialize.js +9 -1
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/deserialize/type-store.d.ts +2 -2
- package/api/deserialize/type-store.js.map +1 -1
- package/api/expression.d.ts +159 -18
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +2 -0
- package/api/index.js +2 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +29 -0
- package/api/module/common.js +71 -0
- package/api/module/common.js.map +1 -0
- package/api/module/export.d.ts +129 -25
- package/api/module/export.js +333 -58
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +114 -25
- package/api/module/import.js +279 -68
- package/api/module/import.js.map +1 -1
- package/api/operators/assignment.d.ts +2 -2
- package/api/operators/assignment.js +1 -1
- package/api/operators/assignment.js.map +1 -1
- package/api/operators/await.d.ts +2 -2
- package/api/operators/await.js +1 -1
- package/api/operators/await.js.map +1 -1
- package/api/operators/binary.d.ts +2 -2
- package/api/operators/binary.js +1 -1
- package/api/operators/binary.js.map +1 -1
- package/api/operators/chaining.d.ts +2 -2
- package/api/operators/chaining.js +1 -1
- package/api/operators/chaining.js.map +1 -1
- package/api/operators/comma.d.ts +2 -2
- package/api/operators/comma.js +2 -2
- package/api/operators/comma.js.map +1 -1
- package/api/operators/grouping.d.ts +9 -2
- package/api/operators/grouping.js +8 -1
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/logical.d.ts +2 -2
- package/api/operators/logical.js +1 -1
- package/api/operators/logical.js.map +1 -1
- package/api/operators/pipeline.d.ts +14 -2
- package/api/operators/pipeline.js +13 -1
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/ternary.d.ts +2 -2
- package/api/operators/ternary.js +1 -1
- package/api/operators/ternary.js.map +1 -1
- package/api/operators/unary.d.ts +3 -3
- package/api/operators/unary.js +7 -3
- package/api/operators/unary.js.map +1 -1
- package/api/operators/update.d.ts +2 -2
- package/api/operators/update.js +1 -1
- package/api/operators/update.js.map +1 -1
- package/api/{app/program.d.ts → program.d.ts} +8 -9
- package/api/program.js +45 -0
- package/api/program.js.map +1 -0
- package/api/statement/control/block.d.ts +8 -5
- package/api/statement/control/block.js +26 -23
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +8 -1
- package/api/statement/control/empty.js +7 -0
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +7 -2
- package/api/statement/control/if.js +6 -1
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +10 -5
- package/api/statement/control/switch.js +22 -9
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +46 -13
- package/api/statement/control/terminate.js +89 -20
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.d.ts +17 -16
- package/api/statement/declarations/declares.js +24 -19
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.d.ts +10 -5
- package/api/statement/iterations/for.js +42 -23
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +9 -3
- package/api/statement/iterations/while.js +27 -13
- package/api/statement/iterations/while.js.map +1 -1
- package/api/utils.d.ts +5 -0
- package/api/utils.js +4 -0
- package/api/utils.js.map +1 -0
- package/package.json +5 -5
- package/scope/finalizer.d.ts +4 -0
- package/scope/finalizer.js +11 -0
- package/scope/finalizer.js.map +1 -0
- package/scope/proxy.d.ts +5 -3
- package/scope/proxy.js +26 -26
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +108 -51
- package/scope/scope.js +72 -134
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +117 -26
- package/scope/stack.js +154 -102
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +204 -0
- package/v8/enums.js +406 -0
- package/v8/enums.js.map +1 -0
- package/v8/index.d.ts +2 -1
- package/v8/index.js +2 -1
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +213 -0
- package/v8/inline.js +2375 -0
- package/v8/inline.js.map +1 -0
- package/v8/nodes.d.ts +8 -7
- package/v8/nodes.js +39 -64
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +49 -151
- package/v8/parser.js +839 -1607
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +39 -3
- package/v8/stream.js +685 -171
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +244 -9
- package/v8/token.js +315 -47
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +3 -0
- package/visit/visitor.js +4 -7
- package/visit/visitor.js.map +1 -1
- package/api/app/class.d.ts +0 -117
- package/api/app/class.js +0 -292
- package/api/app/class.js.map +0 -1
- package/api/app/program.js +0 -39
- package/api/app/program.js.map +0 -1
- package/api/module/module.d.ts +0 -26
- package/api/module/module.js +0 -63
- package/api/module/module.js.map +0 -1
- package/v8/app.d.ts +0 -0
- package/v8/app.js +0 -2
- package/v8/app.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/unary.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIlD,IAAa,eAAe,uBAA5B,MAAa,eAAgB,SAAQ,sBAAsB;IAe1D,YAAoB,QAAuB,EAAU,QAAwB;QAC5E,KAAK,EAAE,CAAC;QADW,aAAQ,GAAR,QAAQ,CAAe;QAAU,aAAQ,GAAR,QAAQ,CAAgB;IAE7E,CAAC;IAhBD,MAAM,CAAC,QAAQ,CAAC,IAAqB,EAAE,YAA8B;QACpE,OAAO,IAAI,iBAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAqB,EAAE,SAAwB
|
|
1
|
+
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/unary.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../expression.js';\nimport type { Scope, ScopeContext } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { MemberExpression } from '../definition/member.js';\nimport { Literal } from '../definition/values.js';\n\nexport type UnaryOperator = '-' | '+' | '~' | '!' | 'void' | 'delete' | 'typeof';\n@Deserializer('UnaryExpression')\nexport class UnaryExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UnaryExpression, deserializer: NodeDeserializer): UnaryExpression {\n\t\treturn new UnaryExpression(node.operator, deserializer(node.argument));\n\t}\n\tstatic visit(node: UnaryExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.argument);\n\t}\n\tstatic Evaluations: { [key: string]: (value: any) => any } = {\n\t\t'+': (value: string) => { return +value; },\n\t\t'-': (value: number) => { return -value; },\n\t\t'~': (value: number) => { return ~value; },\n\t\t'!': (value: any) => { return !value; },\n\t\t'void': (value: any) => { return void value; },\n\t\t'typeof': (value: any) => { return typeof value; },\n\t};\n\tconstructor(private operator: UnaryOperator, private argument: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\treturn this.argument.set(stack, value);\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tswitch (this.operator) {\n\t\t\tcase 'delete': return this.executeDelete(stack, thisContext);\n\t\t\tdefault:\n\t\t\t\tconst value = this.argument.get(stack);\n\t\t\t\treturn UnaryExpression.Evaluations[this.operator](value);\n\t\t}\n\t}\n\tprivate executeDelete(stack: Stack, thisContext?: any): boolean {\n\t\tif (this.argument instanceof MemberExpression) {\n\t\t\tconst scope = this.argument.findScope<ScopeContext>(stack);\n\t\t\tlet propertyKey: PropertyKey;\n\t\t\tconst right = this.argument.getProperty();\n\t\t\tif (right instanceof MemberExpression) {\n\t\t\t\t// [Symbol.asyncIterator]\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t} else if (right instanceof Literal) {\n\t\t\t\t// x[10], x['string'], x.name\n\t\t\t\tpropertyKey = right.getValue();\n\t\t\t} else {\n\t\t\t\t// x[u == 3 ? 'y': 'n']\n\t\t\t\tpropertyKey = this.argument.getProperty().get(stack);\n\t\t\t}\n\t\t\treturn scope.delete(propertyKey);\n\t\t}\n\t\treturn false;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tswitch (this.operator) {\n\t\t\tcase 'void':\n\t\t\tcase 'delete':\n\t\t\tcase 'typeof':\n\t\t\t\treturn `${this.operator} ${this.argument.toString()}`;\n\t\t\tdefault:\n\t\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: true\n\t\t};\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, 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';
|
|
@@ -8,7 +8,7 @@ export declare class UpdateExpression extends AbstractExpressionNode {
|
|
|
8
8
|
private argument;
|
|
9
9
|
private prefix;
|
|
10
10
|
static fromJSON(node: UpdateExpression, deserializer: NodeDeserializer): UpdateExpression;
|
|
11
|
-
static visit(node: UpdateExpression, visitNode: VisitNodeType
|
|
11
|
+
static visit(node: UpdateExpression, visitNode: VisitNodeType): void;
|
|
12
12
|
static PostfixEvaluations: {
|
|
13
13
|
[key: string]: (num: {
|
|
14
14
|
value: number;
|
package/api/operators/update.js
CHANGED
|
@@ -12,7 +12,7 @@ let UpdateExpression = UpdateExpression_1 = class UpdateExpression extends Abstr
|
|
|
12
12
|
static fromJSON(node, deserializer) {
|
|
13
13
|
return new UpdateExpression_1(node.operator, deserializer(node.argument), node.prefix);
|
|
14
14
|
}
|
|
15
|
-
static visit(node, visitNode
|
|
15
|
+
static visit(node, visitNode) {
|
|
16
16
|
visitNode(node.argument);
|
|
17
17
|
}
|
|
18
18
|
getOperator() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/update.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAK7D,IAAa,gBAAgB,wBAA7B,MAAa,gBAAiB,SAAQ,sBAAsB;IAkB3D,YAAoB,QAAwB,EAAU,QAAwB,EAAU,MAAe;QACtG,KAAK,EAAE,CAAC;QADW,aAAQ,GAAR,QAAQ,CAAgB;QAAU,aAAQ,GAAR,QAAQ,CAAgB;QAAU,WAAM,GAAN,MAAM,CAAS;IAEvG,CAAC;IAnBD,MAAM,CAAC,QAAQ,CAAC,IAAsB,EAAE,YAA8B;QACrE,OAAO,IAAI,kBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAsB,EAAE,SAAwB
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/expressions/api/operators/update.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\nexport type UpdateOperator = '++' | '--';\n\n@Deserializer('UpdateExpression')\nexport class UpdateExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: UpdateExpression, deserializer: NodeDeserializer): UpdateExpression {\n\t\treturn new UpdateExpression(node.operator, deserializer(node.argument), node.prefix);\n\t}\n\tstatic visit(node: UpdateExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.argument);\n\t}\n\n\tstatic PostfixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return num.value++; },\n\t\t'--': num => { return num.value--; }\n\t};\n\n\tstatic PrefixEvaluations: { [key: string]: (num: { value: number }) => number } = {\n\t\t'++': num => { return ++num.value; },\n\t\t'--': num => { return --num.value; }\n\t};\n\n\tconstructor(private operator: UpdateOperator, private argument: ExpressionNode, private prefix: boolean) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetArgument() {\n\t\treturn this.argument;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.argument.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthis.argument.set(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tconst num = { value: this.argument.get(stack) as number };\n\t\tconst returnValue = this.prefix\n\t\t\t? UpdateExpression.PrefixEvaluations[this.operator](num)\n\t\t\t: UpdateExpression.PostfixEvaluations[this.operator](num);\n\t\tthis.set(stack, num.value);\n\t\treturn returnValue;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.argument.dependency(computed);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.argument.dependencyPath(computed);\n\t}\n\ttoString() {\n\t\tif (this.prefix) {\n\t\t\treturn `${this.operator}${this.argument.toString()}`;\n\t\t}\n\t\treturn `${this.argument.toString()}${this.operator}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\targument: this.argument.toJSON(),\n\t\t\tprefix: this.prefix\n\t\t};\n\t}\n\n}\n"]}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import type { ExpressionEventPath, ExpressionNode, NodeDeserializer } from '
|
|
2
|
-
import type { Scope } from '
|
|
3
|
-
import type { Stack } from '
|
|
4
|
-
import { AbstractExpressionNode } from '
|
|
1
|
+
import type { ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from './expression.js';
|
|
2
|
+
import type { Scope, ScopeContext } from '../scope/scope.js';
|
|
3
|
+
import type { Stack } from '../scope/stack.js';
|
|
4
|
+
import { AbstractExpressionNode } from './abstract.js';
|
|
5
5
|
export declare type ProgramSourceType = 'script' | 'module';
|
|
6
6
|
export declare class Program extends AbstractExpressionNode {
|
|
7
7
|
private sourceType;
|
|
8
8
|
private body;
|
|
9
9
|
static fromJSON(node: Program, deserializer: NodeDeserializer): Program;
|
|
10
|
+
static visit(node: Program, visitNode: VisitNodeType): void;
|
|
10
11
|
constructor(sourceType: ProgramSourceType, body: ExpressionNode[]);
|
|
11
|
-
shareVariables(scopeList: Scope<
|
|
12
|
+
shareVariables(scopeList: Scope<ScopeContext>[]): void;
|
|
12
13
|
set(stack: Stack, value: any): any;
|
|
13
|
-
get(stack: Stack
|
|
14
|
+
get(stack: Stack): any;
|
|
14
15
|
dependency(computed?: true): ExpressionNode[];
|
|
15
16
|
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
16
17
|
toString(): string;
|
|
17
|
-
toJson():
|
|
18
|
-
[key: string]: any;
|
|
19
|
-
};
|
|
18
|
+
toJson(): object;
|
|
20
19
|
}
|
package/api/program.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var Program_1;
|
|
2
|
+
import { __decorate, __metadata } from "tslib";
|
|
3
|
+
import { AbstractExpressionNode } from './abstract.js';
|
|
4
|
+
import { Deserializer } from './deserialize/deserialize.js';
|
|
5
|
+
let Program = Program_1 = class Program extends AbstractExpressionNode {
|
|
6
|
+
constructor(sourceType, body) {
|
|
7
|
+
super();
|
|
8
|
+
this.sourceType = sourceType;
|
|
9
|
+
this.body = body;
|
|
10
|
+
}
|
|
11
|
+
static fromJSON(node, deserializer) {
|
|
12
|
+
return new Program_1(node.sourceType, node.body.map(deserializer));
|
|
13
|
+
}
|
|
14
|
+
static visit(node, visitNode) {
|
|
15
|
+
node.body.forEach(visitNode);
|
|
16
|
+
}
|
|
17
|
+
shareVariables(scopeList) { }
|
|
18
|
+
set(stack, value) {
|
|
19
|
+
throw new Error(`Program#set() has no implementation.`);
|
|
20
|
+
}
|
|
21
|
+
get(stack) {
|
|
22
|
+
return this.body.map(statement => statement.get(stack)).at(-1);
|
|
23
|
+
}
|
|
24
|
+
dependency(computed) {
|
|
25
|
+
return this.body.flatMap(statement => statement.dependency());
|
|
26
|
+
}
|
|
27
|
+
dependencyPath(computed) {
|
|
28
|
+
return this.body.flatMap(statement => statement.dependencyPath());
|
|
29
|
+
}
|
|
30
|
+
toString() {
|
|
31
|
+
return this.body.map(statement => statement.toString()).join('\n');
|
|
32
|
+
}
|
|
33
|
+
toJson() {
|
|
34
|
+
return {
|
|
35
|
+
sourceType: this.sourceType,
|
|
36
|
+
body: this.body.map(statement => statement.toJSON())
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
Program = Program_1 = __decorate([
|
|
41
|
+
Deserializer('Program'),
|
|
42
|
+
__metadata("design:paramtypes", [String, Array])
|
|
43
|
+
], Program);
|
|
44
|
+
export { Program };
|
|
45
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/expressions/api/program.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAK5D,IAAa,OAAO,eAApB,MAAa,OAAQ,SAAQ,sBAAsB;IAQlD,YAAoB,UAA6B,EAAU,IAAsB;QAChF,KAAK,EAAE,CAAC;QADW,eAAU,GAAV,UAAU,CAAmB;QAAU,SAAI,GAAJ,IAAI,CAAkB;IAEjF,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAa,EAAE,YAA8B;QAC5D,OAAO,IAAI,SAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAa,EAAE,SAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAID,cAAc,CAAC,SAAgC,IAAU,CAAC;IAC1D,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,MAAM;QACL,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;SACpD,CAAC;IACH,CAAC;CAED,CAAA;AAnCY,OAAO;IADnB,YAAY,CAAC,SAAS,CAAC;;GACX,OAAO,CAmCnB;SAnCY,OAAO","sourcesContent":["import type {\n\tExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeType\n} from './expression.js';\nimport type { Scope, ScopeContext } from '../scope/scope.js';\nimport type { Stack } from '../scope/stack.js';\nimport { AbstractExpressionNode } from './abstract.js';\nimport { Deserializer } from './deserialize/deserialize.js';\n\nexport type ProgramSourceType = 'script' | 'module';\n\n@Deserializer('Program')\nexport class Program extends AbstractExpressionNode {\n\n\tstatic fromJSON(node: Program, deserializer: NodeDeserializer): Program {\n\t\treturn new Program(node.sourceType, node.body.map(deserializer));\n\t}\n\tstatic visit(node: Program, visitNode: VisitNodeType): void {\n\t\tnode.body.forEach(visitNode);\n\t}\n\tconstructor(private sourceType: ProgramSourceType, private body: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<ScopeContext>[]): void { }\n\tset(stack: Stack, value: any): any {\n\t\tthrow new Error(`Program#set() has no implementation.`);\n\t}\n\tget(stack: Stack): any {\n\t\treturn this.body.map(statement => statement.get(stack)).at(-1);\n\t}\n\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.flatMap(statement => statement.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.flatMap(statement => statement.dependencyPath());\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(statement => statement.toString()).join('\\n');\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tsourceType: this.sourceType,\n\t\t\tbody: this.body.map(statement => statement.toJSON())\n\t\t};\n\t}\n\n}\n"]}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, 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
|
+
/**
|
|
6
|
+
* A block statement (or compound statement in other languages) is used to group zero or more statements.
|
|
7
|
+
* The block is delimited by a pair of braces ("curly brackets") and may optionally be labelled:
|
|
8
|
+
*/
|
|
5
9
|
export declare class BlockStatement extends AbstractExpressionNode {
|
|
6
|
-
|
|
7
|
-
isStatement: boolean;
|
|
10
|
+
protected body: ExpressionNode[];
|
|
8
11
|
static fromJSON(node: BlockStatement, deserializer: NodeDeserializer): BlockStatement;
|
|
9
|
-
static visit(node: BlockStatement, visitNode: VisitNodeType
|
|
10
|
-
constructor(body: ExpressionNode[]
|
|
12
|
+
static visit(node: BlockStatement, visitNode: VisitNodeType): void;
|
|
13
|
+
constructor(body: ExpressionNode[]);
|
|
11
14
|
getBody(): ExpressionNode[];
|
|
12
15
|
shareVariables(scopeList: Scope<any>[]): void;
|
|
13
16
|
set(stack: Stack, value: any): void;
|
|
@@ -2,18 +2,22 @@ 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';
|
|
7
|
+
/**
|
|
8
|
+
* A block statement (or compound statement in other languages) is used to group zero or more statements.
|
|
9
|
+
* The block is delimited by a pair of braces ("curly brackets") and may optionally be labelled:
|
|
10
|
+
*/
|
|
6
11
|
let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExpressionNode {
|
|
7
|
-
constructor(body
|
|
12
|
+
constructor(body) {
|
|
8
13
|
super();
|
|
9
14
|
this.body = body;
|
|
10
|
-
this.isStatement = isStatement;
|
|
11
15
|
}
|
|
12
16
|
static fromJSON(node, deserializer) {
|
|
13
|
-
return new BlockStatement_1(node.body.map(
|
|
17
|
+
return new BlockStatement_1(node.body.map(deserializer));
|
|
14
18
|
}
|
|
15
|
-
static visit(node, visitNode
|
|
16
|
-
|
|
19
|
+
static visit(node, visitNode) {
|
|
20
|
+
node.body.forEach(visitNode);
|
|
17
21
|
}
|
|
18
22
|
getBody() {
|
|
19
23
|
return this.body;
|
|
@@ -26,25 +30,19 @@ let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExp
|
|
|
26
30
|
}
|
|
27
31
|
get(stack) {
|
|
28
32
|
const blockScope = stack.pushBlockScope();
|
|
33
|
+
let value;
|
|
29
34
|
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
|
-
}
|
|
35
|
+
value = node.get(stack);
|
|
36
|
+
if (value instanceof ReturnValue) {
|
|
37
|
+
stack.clearTo(blockScope);
|
|
38
|
+
return value.value;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
stack.clearTo(blockScope);
|
|
43
|
-
return value.value;
|
|
44
|
-
}
|
|
40
|
+
if (value instanceof TerminateReturnType) {
|
|
41
|
+
return value;
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
44
|
stack.clearTo(blockScope);
|
|
45
|
+
return value;
|
|
48
46
|
}
|
|
49
47
|
dependency(computed) {
|
|
50
48
|
return this.body.flatMap(exp => exp.dependency(computed));
|
|
@@ -53,15 +51,20 @@ let BlockStatement = BlockStatement_1 = class BlockStatement extends AbstractExp
|
|
|
53
51
|
return this.body.flatMap(node => node.dependencyPath(computed));
|
|
54
52
|
}
|
|
55
53
|
toString() {
|
|
56
|
-
return `{
|
|
54
|
+
return `{
|
|
55
|
+
${this.body
|
|
56
|
+
.map(node => ({ insert: !isDeclarationExpression(node), string: node.toString() }))
|
|
57
|
+
.map(ref => `${ref.string}${ref.insert ? ';' : ''}`)
|
|
58
|
+
.join('\n')}
|
|
59
|
+
}`;
|
|
57
60
|
}
|
|
58
61
|
toJson() {
|
|
59
|
-
return { body: this.body.map(node => node.toJSON())
|
|
62
|
+
return { body: this.body.map(node => node.toJSON()) };
|
|
60
63
|
}
|
|
61
64
|
};
|
|
62
65
|
BlockStatement = BlockStatement_1 = __decorate([
|
|
63
66
|
Deserializer('BlockStatement'),
|
|
64
|
-
__metadata("design:paramtypes", [Array
|
|
67
|
+
__metadata("design:paramtypes", [Array])
|
|
65
68
|
], BlockStatement);
|
|
66
69
|
export { BlockStatement };
|
|
67
70
|
//# 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,8 +2,15 @@ import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';
|
|
|
2
2
|
import type { Scope } from '../../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* The empty statement is a semicolon (;) indicating that no statement will be executed,
|
|
7
|
+
* even if JavaScript syntax requires one.
|
|
8
|
+
* The opposite behavior, where you want multiple statements,
|
|
9
|
+
* but JavaScript only allows a single one, is possible using a block statement,
|
|
10
|
+
* which combines several statements into a single one.
|
|
11
|
+
*/
|
|
5
12
|
export declare class EmptyStatement extends AbstractExpressionNode {
|
|
6
|
-
static INSTANCE: EmptyStatement;
|
|
13
|
+
static readonly INSTANCE: EmptyStatement;
|
|
7
14
|
static fromJSON(node: EmptyStatement): EmptyStatement;
|
|
8
15
|
private semicolon;
|
|
9
16
|
constructor();
|
|
@@ -2,6 +2,13 @@ var EmptyStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
/**
|
|
6
|
+
* The empty statement is a semicolon (;) indicating that no statement will be executed,
|
|
7
|
+
* even if JavaScript syntax requires one.
|
|
8
|
+
* The opposite behavior, where you want multiple statements,
|
|
9
|
+
* but JavaScript only allows a single one, is possible using a block statement,
|
|
10
|
+
* which combines several statements into a single one.
|
|
11
|
+
*/
|
|
5
12
|
let EmptyStatement = EmptyStatement_1 = class EmptyStatement extends AbstractExpressionNode {
|
|
6
13
|
constructor() {
|
|
7
14
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/empty.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;;GAMG;AAEH,IAAa,cAAc,sBAA3B,MAAa,cAAe,SAAQ,sBAAsB;IAMzD;QACC,KAAK,EAAE,CAAC;QAFD,cAAS,GAAG,GAAG,CAAC;IAGxB,CAAC;IAND,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,gBAAc,CAAC,QAAQ,CAAC;IAChC,CAAC;IAKD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IACD,MAAM;QACL,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAA;AA3BgB,uBAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAc,EAAE,CAAoB,CAAA;AADrE,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CA4B1B;SA5BY,cAAc","sourcesContent":["import type { ExpressionEventPath, ExpressionNode } from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The empty statement is a semicolon (;) indicating that no statement will be executed,\n * even if JavaScript syntax requires one.\n * The opposite behavior, where you want multiple statements,\n * but JavaScript only allows a single one, is possible using a block statement,\n * which combines several statements into a single one.\n */\n@Deserializer('EmptyStatement')\nexport class EmptyStatement extends AbstractExpressionNode {\n\tstatic readonly INSTANCE = Object.freeze(new EmptyStatement()) as EmptyStatement;\n\tstatic fromJSON(node: EmptyStatement): EmptyStatement {\n\t\treturn EmptyStatement.INSTANCE;\n\t}\n\tprivate semicolon = ';';\n\tconstructor() {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`EmptyStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\ttoString(): string {\n\t\treturn this.semicolon;\n\t}\n\ttoJson(): object {\n\t\treturn {};\n\t}\n}\n"]}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, 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
|
+
/**
|
|
6
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
7
|
+
* If the condition is falsy, another statement can be executed.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
5
10
|
export declare class IfStatement extends AbstractExpressionNode {
|
|
6
11
|
private test;
|
|
7
12
|
private consequent;
|
|
8
13
|
private alternate?;
|
|
9
14
|
static fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement;
|
|
10
|
-
static visit(node: IfStatement, visitNode: VisitNodeType
|
|
15
|
+
static visit(node: IfStatement, visitNode: VisitNodeType): void;
|
|
11
16
|
constructor(test: ExpressionNode, consequent: ExpressionNode, alternate?: ExpressionNode | undefined);
|
|
12
17
|
getTest(): ExpressionNode;
|
|
13
18
|
getConsequent(): ExpressionNode;
|
|
@@ -2,6 +2,11 @@ var IfStatement_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { AbstractExpressionNode } from '../../abstract.js';
|
|
4
4
|
import { Deserializer } from '../../deserialize/deserialize.js';
|
|
5
|
+
/**
|
|
6
|
+
* The if statement executes a statement if a specified condition is truthy.
|
|
7
|
+
* If the condition is falsy, another statement can be executed.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
5
10
|
let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNode {
|
|
6
11
|
constructor(test, consequent, alternate) {
|
|
7
12
|
super();
|
|
@@ -12,7 +17,7 @@ let IfStatement = IfStatement_1 = class IfStatement extends AbstractExpressionNo
|
|
|
12
17
|
static fromJSON(node, deserializer) {
|
|
13
18
|
return new IfStatement_1(deserializer(node.test), deserializer(node.consequent), node.alternate ? deserializer(node.alternate) : void 0);
|
|
14
19
|
}
|
|
15
|
-
static visit(node, visitNode
|
|
20
|
+
static visit(node, visitNode) {
|
|
16
21
|
visitNode(node.test);
|
|
17
22
|
visitNode(node.consequent);
|
|
18
23
|
node.alternate && visitNode(node.alternate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"if.js","sourceRoot":"","sources":["../../../../../src/expressions/api/statement/control/if.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tExpressionEventPath, VisitNodeType\n} from '../../expression.js';\nimport type { Scope } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\n/**\n * The if statement executes a statement if a specified condition is truthy.\n * If the condition is falsy, another statement can be executed.\n * \n */\n@Deserializer('IfStatement')\nexport class IfStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: IfStatement, deserializer: NodeDeserializer): IfStatement {\n\t\treturn new IfStatement(\n\t\t\tdeserializer(node.test),\n\t\t\tdeserializer(node.consequent),\n\t\t\tnode.alternate ? deserializer(node.alternate) : void 0\n\t\t);\n\t}\n\tstatic visit(node: IfStatement, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.test);\n\t\tvisitNode(node.consequent);\n\t\tnode.alternate && visitNode(node.alternate);\n\t}\n\tconstructor(private test: ExpressionNode, private consequent: ExpressionNode, private alternate?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetTest() {\n\t\treturn this.test;\n\t}\n\tgetConsequent() {\n\t\treturn this.consequent;\n\t}\n\tgetAlternate() {\n\t\treturn this.alternate;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.test.shareVariables(scopeList);\n\t\tthis.consequent.shareVariables(scopeList);\n\t\tthis.alternate?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`IfStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst condition = this.test.get(stack);\n\t\tif (condition) {\n\t\t\tconst ifBlock = stack.pushBlockScope();\n\t\t\tconst value = this.consequent.get(stack);\n\t\t\tstack.clearTo(ifBlock);\n\t\t\treturn value;\n\t\t} else if (this.alternate) {\n\t\t\tconst elseBlock = stack.pushBlockScope();\n\t\t\tconst value = this.alternate.get(stack);\n\t\t\tstack.clearTo(elseBlock);\n\t\t\treturn value;\n\t\t}\n\t\treturn void 0;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.test.dependency(computed)\n\t\t\t.concat(\n\t\t\t\tthis.consequent.dependency(computed),\n\t\t\t\tthis.alternate?.dependency(computed) || []\n\t\t\t);\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.test.dependencyPath(computed).concat(\n\t\t\tthis.consequent.dependencyPath(computed),\n\t\t\tthis.alternate?.dependencyPath(computed) || []\n\t\t);\n\t}\n\ttoString(): string {\n\t\treturn `if (${this.test.toString()}) ${this.consequent.toString()}${this.alternate ? ' else ' : ''}${this.alternate ? this.alternate.toString() : ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\ttest: this.test.toJSON(),\n\t\t\tconsequent: this.consequent.toJSON(),\n\t\t\talternate: this.alternate?.toJSON()\n\t\t};\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType
|
|
1
|
+
import type { NodeDeserializer, ExpressionNode, 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';
|
|
@@ -7,7 +7,7 @@ export declare class SwitchCase extends AbstractExpressionNode {
|
|
|
7
7
|
protected test: ExpressionNode;
|
|
8
8
|
protected consequent: ExpressionNode;
|
|
9
9
|
static fromJSON(node: SwitchCase, deserializer: NodeDeserializer): SwitchCase;
|
|
10
|
-
static visit(node: SwitchCase, visitNode: VisitNodeType
|
|
10
|
+
static visit(node: SwitchCase, visitNode: VisitNodeType): void;
|
|
11
11
|
constructor(test: ExpressionNode, consequent: ExpressionNode);
|
|
12
12
|
getTest(): ExpressionNode;
|
|
13
13
|
getConsequent(): ExpressionNode;
|
|
@@ -20,21 +20,26 @@ export declare class SwitchCase extends AbstractExpressionNode {
|
|
|
20
20
|
toJson(): object;
|
|
21
21
|
}
|
|
22
22
|
export declare class DefaultExpression extends SwitchCase {
|
|
23
|
-
static DEFAULT_KEYWORD: string;
|
|
24
23
|
static DefaultNode: Identifier;
|
|
25
24
|
static fromJSON(node: DefaultExpression, deserializer: NodeDeserializer): DefaultExpression;
|
|
26
|
-
static visit(node: DefaultExpression, visitNode: VisitNodeType
|
|
25
|
+
static visit(node: DefaultExpression, visitNode: VisitNodeType): void;
|
|
27
26
|
constructor(block: ExpressionNode);
|
|
28
27
|
dependency(computed?: true): ExpressionNode[];
|
|
29
28
|
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
30
29
|
toString(): string;
|
|
31
30
|
toJson(): object;
|
|
32
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The switch statement evaluates an expression, matching the expression's value to a case clause,
|
|
34
|
+
* and executes statements associated with that case,
|
|
35
|
+
* as well as statements in cases that follow the matching case.
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
33
38
|
export declare class SwitchStatement extends AbstractExpressionNode {
|
|
34
39
|
private discriminant;
|
|
35
40
|
private cases;
|
|
36
41
|
static fromJSON(node: SwitchStatement, deserializer: NodeDeserializer): SwitchStatement;
|
|
37
|
-
static visit(node: SwitchStatement, visitNode: VisitNodeType
|
|
42
|
+
static visit(node: SwitchStatement, visitNode: VisitNodeType): void;
|
|
38
43
|
constructor(discriminant: ExpressionNode, cases: SwitchCase[]);
|
|
39
44
|
getDiscriminant(): ExpressionNode;
|
|
40
45
|
getCases(): SwitchCase[];
|
|
@@ -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) {
|
|
@@ -13,7 +13,7 @@ let SwitchCase = SwitchCase_1 = class SwitchCase extends AbstractExpressionNode
|
|
|
13
13
|
static fromJSON(node, deserializer) {
|
|
14
14
|
return new SwitchCase_1(deserializer(node.test), deserializer(node.consequent));
|
|
15
15
|
}
|
|
16
|
-
static visit(node, visitNode
|
|
16
|
+
static visit(node, visitNode) {
|
|
17
17
|
visitNode(node.test);
|
|
18
18
|
visitNode(node.consequent);
|
|
19
19
|
}
|
|
@@ -61,7 +61,7 @@ let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends Sw
|
|
|
61
61
|
static fromJSON(node, deserializer) {
|
|
62
62
|
return new DefaultExpression_1(deserializer(node.consequent));
|
|
63
63
|
}
|
|
64
|
-
static visit(node, visitNode
|
|
64
|
+
static visit(node, visitNode) {
|
|
65
65
|
visitNode(node.consequent);
|
|
66
66
|
}
|
|
67
67
|
dependency(computed) {
|
|
@@ -79,13 +79,18 @@ let DefaultExpression = DefaultExpression_1 = class DefaultExpression extends Sw
|
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
DefaultExpression.
|
|
83
|
-
DefaultExpression.DefaultNode = Object.freeze(new Identifier(DefaultExpression_1.DEFAULT_KEYWORD));
|
|
82
|
+
DefaultExpression.DefaultNode = Object.freeze(new Identifier('default'));
|
|
84
83
|
DefaultExpression = DefaultExpression_1 = __decorate([
|
|
85
84
|
Deserializer('default'),
|
|
86
85
|
__metadata("design:paramtypes", [Object])
|
|
87
86
|
], DefaultExpression);
|
|
88
87
|
export { DefaultExpression };
|
|
88
|
+
/**
|
|
89
|
+
* The switch statement evaluates an expression, matching the expression's value to a case clause,
|
|
90
|
+
* and executes statements associated with that case,
|
|
91
|
+
* as well as statements in cases that follow the matching case.
|
|
92
|
+
*
|
|
93
|
+
*/
|
|
89
94
|
let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends AbstractExpressionNode {
|
|
90
95
|
constructor(discriminant, cases) {
|
|
91
96
|
super();
|
|
@@ -95,9 +100,9 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
95
100
|
static fromJSON(node, deserializer) {
|
|
96
101
|
return new SwitchStatement_1(deserializer(node.discriminant), node.cases.map(deserializer));
|
|
97
102
|
}
|
|
98
|
-
static visit(node, visitNode
|
|
103
|
+
static visit(node, visitNode) {
|
|
99
104
|
visitNode(node.discriminant);
|
|
100
|
-
|
|
105
|
+
node.cases.forEach(visitNode);
|
|
101
106
|
}
|
|
102
107
|
getDiscriminant() {
|
|
103
108
|
return this.discriminant;
|
|
@@ -113,10 +118,13 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
113
118
|
throw new Error(`SwitchStatement#set() has no implementation.`);
|
|
114
119
|
}
|
|
115
120
|
get(stack) {
|
|
121
|
+
// need to fix statements execution and support default case
|
|
122
|
+
// stack = stack.newStack();
|
|
116
123
|
const result = this.discriminant.get(stack);
|
|
117
124
|
const values = this.cases.map(item => item.getTest().get(stack));
|
|
118
125
|
let startIndex = values.findIndex(item => result === item);
|
|
119
126
|
if (startIndex === -1) {
|
|
127
|
+
// search for default statement
|
|
120
128
|
startIndex = this.cases.findIndex(item => item instanceof DefaultExpression);
|
|
121
129
|
if (startIndex === -1) {
|
|
122
130
|
return;
|
|
@@ -125,8 +133,13 @@ let SwitchStatement = SwitchStatement_1 = class SwitchStatement extends Abstract
|
|
|
125
133
|
const caseBlock = stack.pushBlockScope();
|
|
126
134
|
for (let index = startIndex; index < this.cases.length; index++) {
|
|
127
135
|
const returnValue = this.cases[index].get(stack);
|
|
128
|
-
if (
|
|
129
|
-
|
|
136
|
+
if (result instanceof TerminateReturnType) {
|
|
137
|
+
if (result.type === 'continue') {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
130
143
|
}
|
|
131
144
|
}
|
|
132
145
|
stack.clearTo(caseBlock);
|