@ibyar/expressions 0.5.6 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/api/abstract.js +5 -0
  2. package/api/abstract.js.map +1 -1
  3. package/api/class/class.d.ts +28 -13
  4. package/api/class/class.js +46 -41
  5. package/api/class/class.js.map +1 -1
  6. package/api/computing/return.d.ts +4 -0
  7. package/api/computing/return.js +5 -0
  8. package/api/computing/return.js.map +1 -1
  9. package/api/computing/throw.d.ts +4 -0
  10. package/api/computing/throw.js +4 -0
  11. package/api/computing/throw.js.map +1 -1
  12. package/api/definition/bind.d.ts +6 -0
  13. package/api/definition/bind.js +6 -0
  14. package/api/definition/bind.js.map +1 -1
  15. package/api/definition/function.js +6 -5
  16. package/api/definition/function.js.map +1 -1
  17. package/api/definition/member.js.map +1 -1
  18. package/api/definition/object.js +1 -1
  19. package/api/definition/object.js.map +1 -1
  20. package/api/definition/values.d.ts +12 -3
  21. package/api/definition/values.js +25 -4
  22. package/api/definition/values.js.map +1 -1
  23. package/api/deserialize/deserialize.d.ts +5 -0
  24. package/api/deserialize/deserialize.js +5 -0
  25. package/api/deserialize/deserialize.js.map +1 -1
  26. package/api/expression.d.ts +151 -5
  27. package/api/expression.js.map +1 -1
  28. package/api/module/export.d.ts +63 -0
  29. package/api/module/export.js +64 -1
  30. package/api/module/export.js.map +1 -1
  31. package/api/module/import.d.ts +53 -0
  32. package/api/module/import.js +53 -0
  33. package/api/module/import.js.map +1 -1
  34. package/api/operators/grouping.d.ts +7 -0
  35. package/api/operators/grouping.js +7 -0
  36. package/api/operators/grouping.js.map +1 -1
  37. package/api/operators/pipeline.d.ts +12 -0
  38. package/api/operators/pipeline.js +12 -0
  39. package/api/operators/pipeline.js.map +1 -1
  40. package/api/operators/unary.js +3 -0
  41. package/api/operators/unary.js.map +1 -1
  42. package/api/program.d.ts +2 -2
  43. package/api/program.js.map +1 -1
  44. package/api/statement/control/block.d.ts +4 -0
  45. package/api/statement/control/block.js +4 -0
  46. package/api/statement/control/block.js.map +1 -1
  47. package/api/statement/control/empty.d.ts +7 -0
  48. package/api/statement/control/empty.js +7 -0
  49. package/api/statement/control/empty.js.map +1 -1
  50. package/api/statement/control/if.d.ts +5 -0
  51. package/api/statement/control/if.js +5 -0
  52. package/api/statement/control/if.js.map +1 -1
  53. package/api/statement/control/switch.d.ts +6 -0
  54. package/api/statement/control/switch.js +9 -0
  55. package/api/statement/control/switch.js.map +1 -1
  56. package/api/statement/control/terminate.d.ts +8 -0
  57. package/api/statement/control/terminate.js +8 -0
  58. package/api/statement/control/terminate.js.map +1 -1
  59. package/api/statement/iterations/for.d.ts +5 -0
  60. package/api/statement/iterations/for.js +13 -0
  61. package/api/statement/iterations/for.js.map +1 -1
  62. package/api/statement/iterations/while.d.ts +6 -0
  63. package/api/statement/iterations/while.js +10 -0
  64. package/api/statement/iterations/while.js.map +1 -1
  65. package/package.json +5 -3
  66. package/scope/event.d.ts +3 -3
  67. package/scope/event.js +2 -2
  68. package/scope/event.js.map +1 -1
  69. package/scope/pool.d.ts +7 -0
  70. package/scope/pool.js +29 -0
  71. package/scope/pool.js.map +1 -0
  72. package/scope/proxy.d.ts +6 -9
  73. package/scope/proxy.js +22 -31
  74. package/scope/proxy.js.map +1 -1
  75. package/scope/scope.d.ts +161 -38
  76. package/scope/scope.js +260 -106
  77. package/scope/scope.js.map +1 -1
  78. package/scope/stack.d.ts +95 -19
  79. package/scope/stack.js +13 -0
  80. package/scope/stack.js.map +1 -1
  81. package/v8/enums.js +31 -0
  82. package/v8/enums.js.map +1 -1
  83. package/v8/inline.d.ts +36 -0
  84. package/v8/inline.js +407 -5
  85. package/v8/inline.js.map +1 -1
  86. package/v8/nodes.js +2 -1
  87. package/v8/nodes.js.map +1 -1
  88. package/v8/parser.d.ts +8 -0
  89. package/v8/parser.js +304 -1
  90. package/v8/parser.js.map +1 -1
  91. package/v8/stream.d.ts +4 -0
  92. package/v8/stream.js +79 -17
  93. package/v8/stream.js.map +1 -1
  94. package/v8/token.d.ts +229 -0
  95. package/v8/token.js +236 -1
  96. package/v8/token.js.map +1 -1
  97. package/visit/visitor.d.ts +3 -0
package/api/abstract.js CHANGED
@@ -1,5 +1,6 @@
1
1
  function initPathExpressionEventMap(rootEventMap, path) {
2
2
  let lastMap = rootEventMap;
3
+ // let index = 0;
3
4
  for (const node of path) {
4
5
  const scopeName = node.path;
5
6
  let eventMap = lastMap[scopeName];
@@ -7,6 +8,10 @@ function initPathExpressionEventMap(rootEventMap, path) {
7
8
  lastMap = eventMap;
8
9
  continue;
9
10
  }
11
+ // if ((index++) === path.length - 1) {
12
+ // lastMap[scopeName] = undefined;
13
+ // continue;
14
+ // }
10
15
  lastMap = lastMap[scopeName] = {};
11
16
  if (node.computed) {
12
17
  node.computedPath.forEach(path => initPathExpressionEventMap(rootEventMap, path));
@@ -1 +1 @@
1
- {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/expressions/api/abstract.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode, ExpressionNodConstructor,\n\tNodeJsonType, DeclarationExpression, ExpressionEventMap,\n\tExpressionEventPath, VisitNodeType\n} from './expression.js';\n\nfunction initPathExpressionEventMap(rootEventMap: ExpressionEventMap, path: ExpressionEventPath[]): void {\n\tlet lastMap = rootEventMap;\n\t// let index = 0;\n\tfor (const node of path) {\n\t\tconst scopeName = node.path;\n\t\tlet eventMap = lastMap[scopeName];\n\t\tif (eventMap) {\n\t\t\tlastMap = eventMap;\n\t\t\tcontinue;\n\t\t}\n\t\t// if ((index++) === path.length - 1) {\n\t\t// \tlastMap[scopeName] = undefined;\n\t\t// \tcontinue;\n\t\t// }\n\t\tlastMap = lastMap[scopeName] = {};\n\t\tif (node.computed) {\n\t\t\tnode.computedPath.forEach(path => initPathExpressionEventMap(rootEventMap, path));\n\t\t}\n\t}\n}\nexport abstract class AbstractExpressionNode implements ExpressionNode {\n\tstatic fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode {\n\t\treturn deserializer(node as any);\n\t}\n\tgetClass(): ExpressionNodConstructor<ExpressionNode> {\n\t\treturn this.constructor as ExpressionNodConstructor<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst type = this.getClass().type;\n\t\tconst json = this.toJson(key);\n\t\treturn { type, ...json };\n\t}\n\tevents(): ExpressionEventMap {\n\t\tconst dependencyNodes = this.dependency();\n\t\tconst eventMap: ExpressionEventMap = {};\n\t\tfor (const node of dependencyNodes) {\n\t\t\tconst dependencyPath = node.dependencyPath();\n\t\t\tinitPathExpressionEventMap(eventMap, dependencyPath);\n\t\t}\n\t\treturn eventMap;\n\t}\n\tabstract shareVariables(scopeList: Scope<any>[]): void;\n\tabstract set(stack: Stack, value: any): any;\n\tabstract get(stack: Stack, thisContext?: any): any;\n\tabstract dependency(computed?: true): ExpressionNode[];\n\tabstract dependencyPath(computed?: true): ExpressionEventPath[];\n\tabstract toString(): string;\n\tabstract toJson(key?: string): { [key: string]: any };\n}\nexport abstract class InfixExpressionNode<T> extends AbstractExpressionNode {\n\tstatic visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.getLeft());\n\t\tvisitNode(node.getRight())\n\t}\n\tconstructor(protected operator: T, protected left: ExpressionNode, protected right: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.left.shareVariables(scopeList);\n\t\tthis.right.shareVariables(scopeList);\n\t}\n\tset(context: object, value: any) {\n\t\tthrow new Error(`${this.constructor.name}#set() of operator: '${this.operator}' has no implementation.`);\n\t}\n\tabstract get(stack: Stack): any;\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.left.dependency(computed).concat(this.right.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.left.dependencyPath(computed).concat(this.right.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n\t}\n\ttoJson(key: string): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON()\n\t\t};\n\t}\n}\n\nexport class ReturnValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldDelegateValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class AwaitPromise implements AwaitPromiseInfo {\n\tnode: DeclarationExpression;\n\tdeclareVariable: boolean;\n\tconstructor(public promise: Promise<any>) { }\n}\n"]}
1
+ {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../src/expressions/api/abstract.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode, ExpressionNodConstructor,\n\tNodeJsonType, DeclarationExpression, ExpressionEventMap,\n\tExpressionEventPath, VisitNodeType\n} from './expression.js';\n\nfunction initPathExpressionEventMap(rootEventMap: ExpressionEventMap, path: ExpressionEventPath[]): void {\n\tlet lastMap = rootEventMap;\n\t// let index = 0;\n\tfor (const node of path) {\n\t\tconst scopeName = node.path;\n\t\tlet eventMap = lastMap[scopeName];\n\t\tif (eventMap) {\n\t\t\tlastMap = eventMap;\n\t\t\tcontinue;\n\t\t}\n\t\t// if ((index++) === path.length - 1) {\n\t\t// \tlastMap[scopeName] = undefined;\n\t\t// \tcontinue;\n\t\t// }\n\t\tlastMap = lastMap[scopeName] = {};\n\t\tif (node.computed) {\n\t\t\tnode.computedPath.forEach(path => initPathExpressionEventMap(rootEventMap, path));\n\t\t}\n\t}\n}\nexport abstract class AbstractExpressionNode implements ExpressionNode {\n\tstatic fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode {\n\t\treturn deserializer(node as any);\n\t}\n\tgetClass(): ExpressionNodConstructor<ExpressionNode> {\n\t\treturn this.constructor as ExpressionNodConstructor<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst type = this.getClass().type;\n\t\tconst json = this.toJson(key);\n\t\treturn { type, ...json };\n\t}\n\tevents(): ExpressionEventMap {\n\t\tconst dependencyNodes = this.dependency();\n\t\tconst eventMap: ExpressionEventMap = {};\n\t\tfor (const node of dependencyNodes) {\n\t\t\tconst dependencyPath = node.dependencyPath();\n\t\t\tinitPathExpressionEventMap(eventMap, dependencyPath);\n\t\t}\n\t\treturn eventMap;\n\t}\n\tabstract shareVariables(scopeList: Scope<any>[]): void;\n\tabstract set(stack: Stack, value: any): any;\n\tabstract get(stack: Stack, thisContext?: any): any;\n\tabstract dependency(computed?: true): ExpressionNode[];\n\tabstract dependencyPath(computed?: true): ExpressionEventPath[];\n\tabstract toString(): string;\n\tabstract toJson(key?: string): { [key: string]: any };\n}\nexport abstract class InfixExpressionNode<T> extends AbstractExpressionNode {\n\tstatic visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.getLeft());\n\t\tvisitNode(node.getRight())\n\t}\n\tconstructor(protected operator: T, protected left: ExpressionNode, protected right: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetOperator() {\n\t\treturn this.operator;\n\t}\n\tgetLeft() {\n\t\treturn this.left;\n\t}\n\tgetRight() {\n\t\treturn this.right;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.left.shareVariables(scopeList);\n\t\tthis.right.shareVariables(scopeList);\n\t}\n\tset(context: object, value: any) {\n\t\tthrow new Error(`${this.constructor.name}#set() of operator: '${this.operator}' has no implementation.`);\n\t}\n\tabstract get(stack: Stack): any;\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.left.dependency(computed).concat(this.right.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.left.dependencyPath(computed).concat(this.right.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n\t}\n\ttoJson(key: string): object {\n\t\treturn {\n\t\t\toperator: this.operator,\n\t\t\tleft: this.left.toJSON(),\n\t\t\tright: this.right.toJSON()\n\t\t};\n\t}\n}\n\nexport class ReturnValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class YieldDelegateValue {\n\tconstructor(public value: any) { }\n\tgetValue() {\n\t\treturn this.value;\n\t}\n}\n\nexport class AwaitPromise implements AwaitPromiseInfo {\n\tnode: DeclarationExpression;\n\tdeclareVariable: boolean;\n\tconstructor(public promise: Promise<any>) { }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { DeclarationExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeType } from '../expression.js';
2
- import type { Scope } from '../../scope/scope.js';
2
+ import { Scope } from '../../scope/scope.js';
3
3
  import { Stack } from '../../scope/stack.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
5
5
  import { Identifier } from '../definition/values.js';
@@ -14,6 +14,9 @@ declare const PRIVATE_SYMBOL: unique symbol;
14
14
  declare const INSTANCE_PRIVATE_SYMBOL: unique symbol;
15
15
  declare const STATIC_INITIALIZATION_BLOCK: unique symbol;
16
16
  interface ClassConstructor {
17
+ /**
18
+ * A reference to the prototype.
19
+ */
17
20
  readonly prototype: ClassInstance;
18
21
  [GET_PARAMETERS](args: any[]): any[];
19
22
  [STATIC_INITIALIZATION_BLOCK]: Function[];
@@ -34,6 +37,9 @@ interface ClassInstance {
34
37
  [STACK]: Stack;
35
38
  [key: string]: any;
36
39
  }
40
+ /**
41
+ * A `super` pseudo-expression.
42
+ */
37
43
  export declare class Super extends AbstractExpressionNode {
38
44
  static INSTANCE: Super;
39
45
  static fromJSON(node: Super): Super;
@@ -48,6 +54,13 @@ export declare class Super extends AbstractExpressionNode {
48
54
  [key: string]: any;
49
55
  };
50
56
  }
57
+ /**
58
+ * MetaProperty node represents
59
+ * - `new.target` meta property in ES2015.
60
+ * - `import.meta` meta property in ES2030.
61
+ *
62
+ * In the future, it will represent other meta properties as well.
63
+ */
51
64
  export declare class MetaProperty extends MemberExpression {
52
65
  private meta;
53
66
  static NewTarget: MetaProperty;
@@ -64,21 +77,17 @@ export declare class MetaProperty extends MemberExpression {
64
77
  [key: string]: any;
65
78
  };
66
79
  }
67
- export declare class PrivateIdentifier extends AbstractExpressionNode {
68
- private name;
80
+ /**
81
+ * A private identifier refers to private class elements. For a private name `#a`, its name is `a`.
82
+ */
83
+ export declare class PrivateIdentifier extends Identifier {
69
84
  static fromJSON(node: PrivateIdentifier): PrivateIdentifier;
70
- constructor(name: string);
71
- getName(): string;
72
- set(stack: Stack, value: any): void;
73
- get(stack: Stack, thisContext?: ClassInstance | ClassConstructor): any;
74
- dependency(computed?: true): ExpressionNode[];
75
- dependencyPath(computed?: true): ExpressionEventPath[];
76
- shareVariables(scopeList: Scope<any>[]): void;
85
+ get(stack: Stack): any;
77
86
  toString(): string;
78
- toJson(): {
79
- [key: string]: any;
80
- };
81
87
  }
88
+ /**
89
+ * A static block static { } is a block statement serving as an additional static initializer.
90
+ */
82
91
  export declare class StaticBlock extends BlockStatement {
83
92
  static fromJSON(node: StaticBlock, deserializer: NodeDeserializer<any>): StaticBlock;
84
93
  constructor(body: ExpressionNode[]);
@@ -115,6 +124,9 @@ export declare abstract class AbstractDefinition extends AbstractExpressionNode
115
124
  };
116
125
  }
117
126
  export declare type MethodDefinitionKind = 'constructor' | 'method' | 'set' | 'get';
127
+ /**
128
+ * - When key is a PrivateIdentifier, computed must be false and kind can not be "constructor".
129
+ */
118
130
  export declare class MethodDefinition extends AbstractDefinition {
119
131
  private kind;
120
132
  static fromJSON(node: MethodDefinition, deserializer: NodeDeserializer<any>): MethodDefinition;
@@ -130,6 +142,9 @@ export declare class MethodDefinition extends AbstractDefinition {
130
142
  [key: string]: any;
131
143
  };
132
144
  }
145
+ /**
146
+ * - When key is a PrivateIdentifier, computed must be false.
147
+ */
133
148
  export declare class PropertyDefinition extends AbstractDefinition {
134
149
  static fromJSON(node: PropertyDefinition, deserializer: NodeDeserializer<any>): PropertyDefinition;
135
150
  static visit(node: PropertyDefinition, visitNode: VisitNodeType): void;
@@ -1,5 +1,6 @@
1
1
  var Super_1, MetaProperty_1, PrivateIdentifier_1, StaticBlock_1, MethodDefinition_1, PropertyDefinition_1, AccessorProperty_1, ClassBody_1, ClassDeclaration_1, ClassExpression_1;
2
2
  import { __decorate as __decorate_1, __metadata } from "tslib";
3
+ import { ClassScope } from '../../scope/scope.js';
3
4
  import { __decorate } from 'tslib';
4
5
  import { AbstractExpressionNode } from '../abstract.js';
5
6
  import { Deserializer } from '../deserialize/deserialize.js';
@@ -20,6 +21,9 @@ const CONSTRUCTOR = Symbol('Constructor');
20
21
  const PRIVATE_SYMBOL = Symbol('Private');
21
22
  const INSTANCE_PRIVATE_SYMBOL = Symbol('InstancePrivate');
22
23
  const STATIC_INITIALIZATION_BLOCK = Symbol('StaticBlock');
24
+ /**
25
+ * A `super` pseudo-expression.
26
+ */
23
27
  let Super = Super_1 = class Super extends AbstractExpressionNode {
24
28
  constructor() {
25
29
  super();
@@ -53,6 +57,13 @@ Super = Super_1 = __decorate_1([
53
57
  __metadata("design:paramtypes", [])
54
58
  ], Super);
55
59
  export { Super };
60
+ /**
61
+ * MetaProperty node represents
62
+ * - `new.target` meta property in ES2015.
63
+ * - `import.meta` meta property in ES2030.
64
+ *
65
+ * In the future, it will represent other meta properties as well.
66
+ */
56
67
  let MetaProperty = MetaProperty_1 = class MetaProperty extends MemberExpression {
57
68
  constructor(meta, property) {
58
69
  super(meta, property, false);
@@ -105,53 +116,27 @@ MetaProperty = MetaProperty_1 = __decorate_1([
105
116
  __metadata("design:paramtypes", [Identifier, Identifier])
106
117
  ], MetaProperty);
107
118
  export { MetaProperty };
108
- let PrivateIdentifier = PrivateIdentifier_1 = class PrivateIdentifier extends AbstractExpressionNode {
109
- constructor(name) {
110
- super();
111
- this.name = name;
112
- }
119
+ /**
120
+ * A private identifier refers to private class elements. For a private name `#a`, its name is `a`.
121
+ */
122
+ let PrivateIdentifier = PrivateIdentifier_1 = class PrivateIdentifier extends Identifier {
113
123
  static fromJSON(node) {
114
124
  return new PrivateIdentifier_1(node.name);
115
125
  }
116
- getName() {
117
- return this.name;
118
- }
119
- set(stack, value) {
120
- const privateScope = stack.findScope(PRIVATE_SYMBOL);
121
- privateScope.getScope(PRIVATE_SYMBOL)?.set(this.name, value);
122
- }
123
- get(stack, thisContext) {
124
- if (thisContext) {
125
- return thisContext[PRIVATE_SYMBOL][this.name];
126
- }
127
- let privateObj = stack.get('this');
128
- if (privateObj) {
129
- return privateObj[PRIVATE_SYMBOL][this.name];
130
- }
131
- privateObj = stack.get(PRIVATE_SYMBOL);
132
- return privateObj[this.name];
133
- }
134
- dependency(computed) {
135
- return [];
136
- }
137
- dependencyPath(computed) {
138
- return [];
126
+ get(stack) {
127
+ return stack.get(this.toString());
139
128
  }
140
- shareVariables(scopeList) { }
141
129
  toString() {
142
130
  return `#${this.name}`;
143
131
  }
144
- toJson() {
145
- return {
146
- name: this.name
147
- };
148
- }
149
132
  };
150
133
  PrivateIdentifier = PrivateIdentifier_1 = __decorate_1([
151
- Deserializer('PrivateIdentifier'),
152
- __metadata("design:paramtypes", [String])
134
+ Deserializer('PrivateIdentifier')
153
135
  ], PrivateIdentifier);
154
136
  export { PrivateIdentifier };
137
+ /**
138
+ * A static block static { } is a block statement serving as an additional static initializer.
139
+ */
155
140
  let StaticBlock = StaticBlock_1 = class StaticBlock extends BlockStatement {
156
141
  static fromJSON(node, deserializer) {
157
142
  return new StaticBlock_1(deserializer(node.body));
@@ -161,7 +146,16 @@ let StaticBlock = StaticBlock_1 = class StaticBlock extends BlockStatement {
161
146
  }
162
147
  get(stack, classConstructor) {
163
148
  const constructor = classConstructor;
164
- constructor[STATIC_INITIALIZATION_BLOCK].push(() => super.get(stack));
149
+ constructor[STATIC_INITIALIZATION_BLOCK].push(() => {
150
+ const scope = new ClassScope(constructor);
151
+ stack.pushScope(scope);
152
+ try {
153
+ super.get(stack);
154
+ }
155
+ finally {
156
+ stack.clearTo(scope);
157
+ }
158
+ });
165
159
  }
166
160
  toString() {
167
161
  return `static ${super.toString()}`;
@@ -218,13 +212,18 @@ export class AbstractDefinition extends AbstractExpressionNode {
218
212
  }
219
213
  getKeyName(stack) {
220
214
  switch (true) {
221
- case this.computed: return this.key.get(stack);
215
+ case this.computed:
216
+ return this.key.get(stack);
222
217
  case this.key instanceof Identifier:
223
- case this.key instanceof PrivateIdentifier: return this.key.getName();
218
+ case this.key instanceof PrivateIdentifier:
219
+ return this.key.getName();
224
220
  default: return this.key.toString();
225
221
  }
226
222
  }
227
223
  }
224
+ /**
225
+ * - When key is a PrivateIdentifier, computed must be false and kind can not be "constructor".
226
+ */
228
227
  let MethodDefinition = MethodDefinition_1 = class MethodDefinition extends AbstractDefinition {
229
228
  constructor(kind, key, value, decorators, computed, isStatic) {
230
229
  super(key, decorators, computed, isStatic, value);
@@ -355,6 +354,9 @@ MethodDefinition = MethodDefinition_1 = __decorate_1([
355
354
  __metadata("design:paramtypes", [String, Object, FunctionExpression, Array, Boolean, Boolean])
356
355
  ], MethodDefinition);
357
356
  export { MethodDefinition };
357
+ /**
358
+ * - When key is a PrivateIdentifier, computed must be false.
359
+ */
358
360
  let PropertyDefinition = PropertyDefinition_1 = class PropertyDefinition extends AbstractDefinition {
359
361
  static fromJSON(node, deserializer) {
360
362
  return new PropertyDefinition_1(deserializer(node.key), node.decorators.map(deserializer), node.computed, node.static, node.value && deserializer(node.value));
@@ -521,9 +523,12 @@ export class Class extends AbstractExpressionNode {
521
523
  const parentClass = this.superClass?.get(stack) ?? class {
522
524
  };
523
525
  let classConstructor = this.createClass(stack, parentClass, className);
526
+ // build class body
524
527
  this.body.get(stack, classConstructor);
528
+ // apply class decorators
525
529
  const decorators = this.decorators.map(decorator => decorator.get(stack));
526
530
  classConstructor = __decorate(decorators, classConstructor);
531
+ // run static initialization block
527
532
  classConstructor[STATIC_INITIALIZATION_BLOCK].forEach(block => block());
528
533
  Reflect.deleteProperty(classConstructor, STATIC_INITIALIZATION_BLOCK);
529
534
  return classConstructor;
@@ -539,13 +544,13 @@ export class Class extends AbstractExpressionNode {
539
544
  this[PRIVATE_SYMBOL] = Object.assign(this[PRIVATE_SYMBOL], TEMP[className][INSTANCE_PRIVATE_SYMBOL]);
540
545
  this[STACK] = stack.copyStack();
541
546
  const instanceStack = this[STACK];
542
- instanceStack.pushBlockScope();
543
- instanceStack.declareVariable('this', this);
547
+ instanceStack.pushScope(ClassScope.readOnlyScopeForThis(this));
544
548
  instanceStack.declareVariable(NEW_TARGET, new.target);
545
549
  instanceStack.declareVariable(PRIVATE_SYMBOL, this[PRIVATE_SYMBOL]);
546
550
  instanceStack.declareVariable(CALL_SUPER_Method, (name) => super[name]());
547
551
  instanceStack.declareVariable(GET_SUPER_PROPERTY, (name) => super[name]);
548
552
  instanceStack.pushReactiveScope();
553
+ // init fields and methods values
549
554
  TEMP[className][CONSTRUCTOR]();
550
555
  }
551
556
  static [GET_PARAMETERS](args) {
@@ -1 +1 @@
1
- {"version":3,"file":"class.js","sourceRoot":"","sources":["../../../../src/expressions/api/class/class.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath,\n\tExpressionNode, NodeDeserializer, VisitNodeType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport { __decorate } from 'tslib';\nimport { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from '../definition/values.js';\nimport { MemberExpression } from '../definition/member.js';\nimport { FunctionExpression } from '../definition/function.js';\nimport { BlockStatement } from '../statement/control/block.js';\nimport { TypeOf } from '../utils.js';\nimport { Decorator } from './decorator.js';\nimport { CallExpression } from '../computing/call.js';\n\nconst TEMP_CLASS_NAME: unique symbol = Symbol('TempClassName');\nconst SUPER: unique symbol = Symbol('Super');\nconst NEW_TARGET: unique symbol = Symbol('NewTarget');\nconst IMPORT_META: unique symbol = Symbol('ImportMeta');\nconst STACK: unique symbol = Symbol('Stack');\n\nconst GET_PARAMETERS: unique symbol = Symbol('GetParameters');\nconst GET_SUPER_PROPERTY: unique symbol = Symbol('GetSuperProperty');\nconst CALL_SUPER_Method: unique symbol = Symbol('CallSuperMethod');\n\nconst CONSTRUCTOR: unique symbol = Symbol('Constructor');\nconst PRIVATE_SYMBOL: unique symbol = Symbol('Private');\nconst INSTANCE_PRIVATE_SYMBOL: unique symbol = Symbol('InstancePrivate');\nconst STATIC_INITIALIZATION_BLOCK: unique symbol = Symbol('StaticBlock');\n\ninterface ClassConstructor {\n\t/**\n\t * A reference to the prototype.\n\t */\n\treadonly prototype: ClassInstance;\n\n\t[GET_PARAMETERS](args: any[]): any[];\n\t[STATIC_INITIALIZATION_BLOCK]: Function[];\n\t[PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[INSTANCE_PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[CONSTRUCTOR]: Function;\n\t[key: string]: any;\n}\n\ndeclare var ClassInstance: ClassConstructor;\ninterface ClassInstance {\n\t[PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[STACK]: Stack;\n\t[key: string]: any;\n}\n\n\n/**\n * A `super` pseudo-expression.\n */\n@Deserializer('Super')\nexport class Super extends AbstractExpressionNode {\n\tstatic INSTANCE = new Super();\n\tstatic fromJSON(node: Super): Super {\n\t\treturn Super.INSTANCE;\n\t}\n\tconstructor() {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('Super.#set() Method not implemented.');\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tthrow new Error('Super.#get() Method not implemented.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Super.#dependency() Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Super.#dependencyPath() Method not implemented.');\n\t}\n\n\ttoString(): string {\n\t\treturn `super`;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {};\n\t}\n}\n\n/**\n * MetaProperty node represents\n * - `new.target` meta property in ES2015.\n * - `import.meta` meta property in ES2030.\n * \n * In the future, it will represent other meta properties as well.\n */\n@Deserializer('MetaProperty')\nexport class MetaProperty extends MemberExpression {\n\n\tpublic static NewTarget = new MetaProperty(new Identifier('new'), new Identifier('target'));\n\n\tpublic static ImportMeta = new MetaProperty(new Identifier('import'), new Identifier('meta'));\n\n\tprivate static getJsonName(identifier: ExpressionNode): string {\n\t\treturn Reflect.get(identifier, 'name');\n\t}\n\n\tstatic fromJSON(node: MetaProperty, deserializer: NodeDeserializer<any>): MetaProperty {\n\t\tif (MetaProperty.getJsonName(node.meta) === 'new' && MetaProperty.getJsonName(node.property) === 'target') {\n\t\t\treturn MetaProperty.NewTarget;\n\t\t}\n\t\telse if (MetaProperty.getJsonName(node.meta) === 'import' && MetaProperty.getJsonName(node.property) === 'meta') {\n\t\t\treturn MetaProperty.ImportMeta;\n\t\t}\n\t\treturn new MetaProperty(\n\t\t\tdeserializer(node.meta),\n\t\t\tdeserializer(node.property)\n\t\t);\n\t}\n\tstatic visit(node: MetaProperty, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.meta);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(private meta: Identifier, property: Identifier) {\n\t\tsuper(meta, property, false);\n\t}\n\tgetMeta() {\n\t\treturn this.meta;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tget(stack: Stack, thisContext?: any) {\n\t\tif (MetaProperty.getJsonName(this.meta) === 'new' && MetaProperty.getJsonName(this.property) === 'target') {\n\t\t\treturn stack.get(NEW_TARGET);\n\t\t}\n\t\telse if (MetaProperty.getJsonName(this.meta) === 'import' && MetaProperty.getJsonName(this.property) === 'meta') {\n\t\t\tconst importObject = stack.getModule()?.get('import');\n\t\t\treturn importObject['meta'];\n\t\t}\n\t\treturn super.get(stack, thisContext);\n\t}\n\ttoString(): string {\n\t\treturn `${this.meta.toString()}.${this.property.toString()}`;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tmeta: this.meta.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t};\n\t}\n}\n\n/**\n * A private identifier refers to private class elements. For a private name `#a`, its name is `a`.\n */\n@Deserializer('PrivateIdentifier')\nexport class PrivateIdentifier extends AbstractExpressionNode {\n\tstatic fromJSON(node: PrivateIdentifier): PrivateIdentifier {\n\t\treturn new PrivateIdentifier(\n\t\t\tnode.name as string\n\t\t);\n\t}\n\tconstructor(private name: string) {\n\t\tsuper();\n\t}\n\tgetName() {\n\t\treturn this.name;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tconst privateScope = stack.findScope(PRIVATE_SYMBOL);\n\t\tprivateScope.getScope(PRIVATE_SYMBOL)?.set(this.name, value);\n\t}\n\tget(stack: Stack, thisContext?: ClassInstance | ClassConstructor) {\n\t\tif (thisContext) {\n\t\t\treturn thisContext[PRIVATE_SYMBOL][this.name];\n\t\t}\n\t\t// return stack.get(this.name);\n\t\tlet privateObj = stack.get('this');\n\t\tif (privateObj) {\n\t\t\treturn privateObj[PRIVATE_SYMBOL][this.name];\n\t\t}\n\t\tprivateObj = stack.get(PRIVATE_SYMBOL);\n\t\treturn privateObj[this.name];\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\ttoString(): string {\n\t\treturn `#${this.name}`;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tname: this.name\n\t\t};\n\t}\n}\n\n/**\n * A static block static { } is a block statement serving as an additional static initializer.\n */\n@Deserializer('StaticBlock')\nexport class StaticBlock extends BlockStatement {\n\tstatic fromJSON(node: StaticBlock, deserializer: NodeDeserializer<any>): StaticBlock {\n\t\treturn new StaticBlock(deserializer(node.body));\n\t}\n\tconstructor(body: ExpressionNode[]) {\n\t\tsuper(body);\n\t}\n\tget(stack: Stack, classConstructor?: ClassConstructor): void {\n\t\tconst constructor = classConstructor!;\n\t\tconstructor[STATIC_INITIALIZATION_BLOCK].push(() => super.get(stack));\n\t}\n\ttoString(): string {\n\t\treturn `static ${super.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.map(node => node.toJSON())\n\t\t};\n\t}\n}\n\nexport abstract class AbstractDefinition extends AbstractExpressionNode {\n\tprotected 'static': boolean;\n\tconstructor(\n\t\tprotected key: ExpressionNode | PrivateIdentifier,\n\t\tprotected decorators: Decorator[],\n\t\tprotected computed: boolean,\n\t\tisStatic: boolean,\n\t\tprotected value?: ExpressionNode,) {\n\t\tsuper();\n\t\tthis.static = isStatic;\n\t}\n\tgetKey() {\n\t\treturn this.key;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tisComputed() {\n\t\treturn this.computed;\n\t}\n\tisStatic() {\n\t\treturn this.static;\n\t}\n\tgetDecorators() {\n\t\treturn this.decorators;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('AbstractDefinition.#set() Method not implemented.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\tgetTarget(classConstructor: ClassConstructor) {\n\t\treturn this.static\n\t\t\t? (this.key instanceof PrivateIdentifier ? classConstructor[PRIVATE_SYMBOL] : classConstructor)\n\t\t\t: (this.key instanceof PrivateIdentifier ? classConstructor[INSTANCE_PRIVATE_SYMBOL] : classConstructor.prototype);\n\t}\n\tgetKeyName(stack: Stack) {\n\t\tswitch (true) {\n\t\t\tcase this.computed: return this.key.get(stack);\n\t\t\tcase this.key instanceof Identifier:\n\t\t\tcase this.key instanceof PrivateIdentifier: return (this.key as Identifier | PrivateIdentifier).getName() as string;\n\t\t\tdefault: return this.key.toString();\n\t\t}\n\t}\n\tabstract get(stack: Stack, classConstructor: ClassConstructor): void;\n\tabstract toString(): string;\n\tabstract toJson(): { [key: string]: any; };\n}\n\nexport type MethodDefinitionKind = 'constructor' | 'method' | 'set' | 'get';\n\n/**\n * - When key is a PrivateIdentifier, computed must be false and kind can not be \"constructor\".\n */\n@Deserializer('MethodDefinition')\nexport class MethodDefinition extends AbstractDefinition {\n\tstatic fromJSON(node: MethodDefinition, deserializer: NodeDeserializer<any>): MethodDefinition {\n\t\treturn new MethodDefinition(\n\t\t\tnode.kind,\n\t\t\tdeserializer(node.key),\n\t\t\tdeserializer(node.value),\n\t\t\tnode.decorators.map(deserializer),\n\t\t\tnode.computed,\n\t\t\tnode.static\n\t\t);\n\t}\n\tstatic visit(node: MethodDefinition, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tvisitNode(node.value);\n\t\tnode.decorators.forEach(visitNode);\n\t}\n\tdeclare protected value: FunctionExpression;\n\tconstructor(\n\t\tprivate kind: MethodDefinitionKind,\n\t\tkey: ExpressionNode | PrivateIdentifier,\n\t\tvalue: FunctionExpression,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tif (this.kind === 'constructor') {\n\t\t\tthis.initConstructor(stack, classConstructor);\n\t\t\treturn;\n\t\t}\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name: string = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\tswitch (this.kind) {\n\t\t\tcase 'method':\n\t\t\t\ttarget[name] = value;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tObject.defineProperty(target, name, {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tset: value as (v: any) => void,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'get':\n\t\t\t\tObject.defineProperty(target, name, {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tget: value as () => any,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, target, name, null);\n\t}\n\tprivate initConstructor(stack: Stack, classConstructor: ClassConstructor) {\n\t\tconst body = (this.value.getBody() as BlockStatement).getBody();\n\t\tlet superIndex = body\n\t\t\t.findIndex(call => call instanceof CallExpression && Super.INSTANCE === call.getCallee());\n\t\tif (superIndex === -1) {\n\t\t\tsuperIndex = body.length;\n\t\t}\n\t\tconst superCall = body[superIndex] as CallExpression | undefined;\n\n\t\tconst blockBeforeSuper = new BlockStatement(body.slice(0, superIndex));\n\t\tconst blockAfterSuper = new BlockStatement(body.slice(superIndex + 1));\n\n\t\tif (superCall) {\n\t\t\tclassConstructor[GET_PARAMETERS] = function (this: ClassConstructor, params: any[]) {\n\t\t\t\tconst scope = stack.pushBlockScope();\n\t\t\t\tthis.value.setParameter(stack, params);\n\t\t\t\tblockBeforeSuper.get(stack);\n\t\t\t\tconst parameters = superCall.getCallParameters(stack);\n\t\t\t\tstack.clearTo(scope);\n\t\t\t\treturn parameters;\n\t\t\t};\n\t\t}\n\n\t\tclassConstructor[CONSTRUCTOR] = function (this: ClassInstance, params: any[]) {\n\t\t\tconst scope = this[STACK].pushBlockScope();\n\t\t\tblockAfterSuper.get(this[STACK]);\n\t\t\tstack.clearTo(scope);\n\t\t};\n\t}\n\ttoString(): string {\n\t\tlet str = this.decorators.map(decorator => decorator.toString()).join(' ');\n\t\tif (str.length) {\n\t\t\tstr += ' ';\n\t\t}\n\t\tif (this.static) {\n\t\t\tstr += 'static ';\n\t\t}\n\t\tconst methodName = this.key.toString();\n\t\tswitch (this.kind) {\n\t\t\tcase 'get':\n\t\t\t\tstr += 'get ' + methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tstr += 'set ' + methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'method':\n\t\t\t\tif (this.value.getAsync() && this.value.getGenerator()) {\n\t\t\t\t\tstr += 'async *';\n\t\t\t\t}\n\t\t\t\telse if (this.value.getAsync()) {\n\t\t\t\t\tstr += 'async ';\n\t\t\t\t} else if (this.value.getGenerator()) {\n\t\t\t\t\tstr += '*';\n\t\t\t\t}\n\t\t\t\tstr += methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'constructor':\n\t\t\t\tstr += 'constructor';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tstr += this.value.paramsAndBodyToString();\n\t\treturn str;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t};\n\t}\n}\n\n\n\n/**\n * - When key is a PrivateIdentifier, computed must be false.\n */\n@Deserializer('PropertyDefinition')\nexport class PropertyDefinition extends AbstractDefinition {\n\tstatic fromJSON(node: PropertyDefinition, deserializer: NodeDeserializer<any>): PropertyDefinition {\n\t\treturn new PropertyDefinition(\n\t\t\tdeserializer(node.key),\n\t\t\tnode.decorators.map(deserializer),\n\t\t\tnode.computed,\n\t\t\tnode.static,\n\t\t\tnode.value && deserializer(node.value)\n\t\t);\n\t}\n\tstatic visit(node: PropertyDefinition, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tnode.value && visitNode(node.value);\n\t}\n\tconstructor(\n\t\tkey: ExpressionNode | PrivateIdentifier,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean,\n\t\tvalue?: ExpressionNode) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name: string = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\ttarget[name as string] = value;\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, target, name, null);\n\t}\n\ttoString(): string {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tconst name = this.computed ? `[${this.key.toString()}]` : this.key.toString();\n\t\treturn `${decorators.length ? decorators + ' ' : ''}${this.static ? 'static ' : ''}${name}${this.value ? ` = ${this.value.toString()}` : ''};`\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value?.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t};\n\t}\n}\n\n\n\n@Deserializer('AccessorProperty')\nexport class AccessorProperty extends AbstractDefinition {\n\tstatic fromJSON(node: AccessorProperty, deserializer: NodeDeserializer): AccessorProperty {\n\t\treturn new AccessorProperty(\n\t\t\tdeserializer(node.key),\n\t\t\tnode.decorators.map(deserializer) as Decorator[],\n\t\t\tnode.computed,\n\t\t\tnode.static,\n\t\t\tnode.value ? deserializer(node.value) : void 0\n\t\t);\n\t}\n\tstatic visit(node: AccessorProperty, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tnode.value && visitNode(node.value);\n\t\tnode.decorators.forEach(visitNode);\n\t}\n\tconstructor(\n\t\tkey: ExpressionNode,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean,\n\t\tvalue?: ExpressionNode) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\ttarget[name] = value;\n\t\tconst ref = this.static ? classConstructor : classConstructor.prototype;\n\t\tObject.defineProperty(ref, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tset: function (this: ClassInstance, setValue: any) {\n\t\t\t\tthis[PRIVATE_SYMBOL][name] = setValue;\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(ref, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: function (this: ClassInstance) {\n\t\t\t\treturn this[PRIVATE_SYMBOL][name];\n\t\t\t},\n\t\t});\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, ref, name, null);\n\t}\n\ttoString(): string {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tconst name = this.computed ? `[${this.key.toString()}]` : this.key.toString();\n\t\treturn `${decorators.length ? decorators.concat(' ') : ''}${this.static ? 'static ' : ''}accessor ${name}${this.value ? ` = ${this.value.toString()}` : ''};`\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t\tvalue: this.value?.toJSON(),\n\t\t};\n\t}\n}\n\n\n@Deserializer('ClassBody')\nexport class ClassBody extends AbstractExpressionNode {\n\tstatic fromJSON(node: ClassBody, deserializer: NodeDeserializer<any>): ClassBody {\n\t\treturn new ClassBody(\n\t\t\tnode.body.map(deserializer)\n\t\t);\n\t}\n\tstatic visit(node: ClassBody, visitNode: VisitNodeType): void {\n\t\tnode.body.forEach(visitNode);\n\t}\n\tconstructor(private body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[]) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor) {\n\t\tthis.body.forEach(definition => definition.get(stack, classConstructor));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(definition => `\\t${definition.toString()}`).join('\\n');\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tbody: this.body.map(method => method.toJSON())\n\t\t};\n\t}\n}\n\nexport class Class extends AbstractExpressionNode {\n\tprivate sharedVariables?: Scope<any>[];\n\tconstructor(\n\t\tprotected body: ClassBody,\n\t\tprotected decorators: Decorator[],\n\t\tprotected id?: Identifier,\n\t\tprotected superClass?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetDecorators() {\n\t\treturn this.decorators;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetSuperClass() {\n\t\treturn this.superClass;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(`Class.#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst className = this.id?.get(stack) as string | undefined;\n\t\tconst parentClass = this.superClass?.get(stack) as TypeOf<any> | undefined ?? class { };\n\t\tlet classConstructor: ClassConstructor = this.createClass(stack, parentClass, className);\n\t\t// build class body\n\t\tthis.body.get(stack, classConstructor);\n\n\t\t// apply class decorators\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tclassConstructor = __decorate(decorators, classConstructor);\n\n\t\t// run static initialization block\n\t\tclassConstructor[STATIC_INITIALIZATION_BLOCK].forEach(block => block());\n\t\tReflect.deleteProperty(classConstructor, STATIC_INITIALIZATION_BLOCK);\n\n\t\treturn classConstructor;\n\t}\n\n\tprivate createClass(stack: Stack, parentClass: TypeOf<any>, className: string | symbol = TEMP_CLASS_NAME) {\n\t\tconst TEMP: { [key: typeof className]: ClassConstructor } = {\n\t\t\t[className]: class extends parentClass {\n\t\t\t\tstatic [GET_PARAMETERS](args: any[]): any[] {\n\t\t\t\t\treturn args;\n\t\t\t\t}\n\t\t\t\tstatic [STATIC_INITIALIZATION_BLOCK]: Function[] = [];\n\t\t\t\tstatic [PRIVATE_SYMBOL]: { [key: string | number | symbol]: any } = {};\n\t\t\t\tstatic [INSTANCE_PRIVATE_SYMBOL] = {};\n\t\t\t\tstatic [CONSTRUCTOR](): void { }\n\n\t\t\t\t[PRIVATE_SYMBOL]: { [key: string | number | symbol]: any } = {};\n\n\t\t\t\t[STACK]: Stack;\n\t\t\t\tconstructor(...params: any[]) {\n\t\t\t\t\tconst parameters = TEMP[className][GET_PARAMETERS](params);\n\t\t\t\t\tsuper(...parameters);\n\t\t\t\t\tthis[PRIVATE_SYMBOL] = Object.assign(this[PRIVATE_SYMBOL], TEMP[className][INSTANCE_PRIVATE_SYMBOL]);\n\t\t\t\t\tthis[STACK] = stack.copyStack();\n\t\t\t\t\tconst instanceStack = this[STACK];\n\t\t\t\t\tinstanceStack.pushBlockScope();\n\t\t\t\t\tinstanceStack.declareVariable('this', this);\n\t\t\t\t\tinstanceStack.declareVariable(NEW_TARGET, new.target);\n\t\t\t\t\tinstanceStack.declareVariable(PRIVATE_SYMBOL, this[PRIVATE_SYMBOL]);\n\t\t\t\t\tinstanceStack.declareVariable(CALL_SUPER_Method, (name: string) => super[name]());\n\t\t\t\t\tinstanceStack.declareVariable(GET_SUPER_PROPERTY, (name: string) => super[name]);\n\t\t\t\t\tinstanceStack.pushReactiveScope();\n\t\t\t\t\t// init fields and methods values\n\t\t\t\t\tTEMP[className][CONSTRUCTOR]();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn TEMP[className as string];\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\ttoString() {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tlet classDeclaration = 'class ';\n\t\tif (this.id) {\n\t\t\tclassDeclaration += this.id.toString();\n\t\t}\n\t\tif (this.superClass) {\n\t\t\tclassDeclaration += ' extends ' + this.superClass.toString();\n\t\t}\n\t\treturn `${decorators}${classDeclaration} {\\n${this.body.toString()}\\n}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tid: this.id?.toJSON(),\n\t\t\tsuperClass: this.superClass?.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ClassDeclaration')\nexport class ClassDeclaration extends Class implements DeclarationExpression {\n\tstatic fromJSON(node: ClassDeclaration, deserializer: NodeDeserializer<any>): ClassDeclaration {\n\t\treturn new ClassDeclaration(\n\t\t\tdeserializer(node.body),\n\t\t\tdeserializer(node.id),\n\t\t\tnode.superClass && deserializer(node.superClass)\n\t\t);\n\t}\n\tstatic visit(node: ClassDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.decorators.forEach(visitNode);\n\t\tvisitNode(node.id);\n\t\tnode.superClass && visitNode(node.superClass);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(body: ClassBody, decorators: Decorator[], id: Identifier, superClass?: ExpressionNode) {\n\t\tsuper(body, decorators, id, superClass);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue?: any) {\n\t\tstack.declareVariable(this.id.getName(), propertyValue);\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.id.getDeclarationName()!;\n\t}\n\n\toverride get(stack: Stack) {\n\t\tconst classConstructor = super.get(stack);\n\t\tthis.id.declareVariable(stack, classConstructor);\n\t\treturn classConstructor;\n\t}\n}\n\n@Deserializer('ClassExpression')\nexport class ClassExpression extends Class {\n\tstatic fromJSON(node: ClassExpression, deserializer: NodeDeserializer<any>): ClassExpression {\n\t\treturn new ClassExpression(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.superClass && deserializer(node.superClass)\n\t\t);\n\t}\n\tstatic visit(node: ClassExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.decorators.forEach(visitNode);\n\t\tnode.id && visitNode(node.id);\n\t\tnode.superClass && visitNode(node.superClass);\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"class.js","sourceRoot":"","sources":["../../../../src/expressions/api/class/class.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath,\n\tExpressionNode, NodeDeserializer, VisitNodeType\n} from '../expression.js';\nimport { ClassScope, Scope } from '../../scope/scope.js';\nimport { __decorate } from 'tslib';\nimport { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from '../definition/values.js';\nimport { MemberExpression } from '../definition/member.js';\nimport { FunctionExpression } from '../definition/function.js';\nimport { BlockStatement } from '../statement/control/block.js';\nimport { TypeOf } from '../utils.js';\nimport { Decorator } from './decorator.js';\nimport { CallExpression } from '../computing/call.js';\n\nconst TEMP_CLASS_NAME: unique symbol = Symbol('TempClassName');\nconst SUPER: unique symbol = Symbol('Super');\nconst NEW_TARGET: unique symbol = Symbol('NewTarget');\nconst IMPORT_META: unique symbol = Symbol('ImportMeta');\nconst STACK: unique symbol = Symbol('Stack');\n\nconst GET_PARAMETERS: unique symbol = Symbol('GetParameters');\nconst GET_SUPER_PROPERTY: unique symbol = Symbol('GetSuperProperty');\nconst CALL_SUPER_Method: unique symbol = Symbol('CallSuperMethod');\n\nconst CONSTRUCTOR: unique symbol = Symbol('Constructor');\nconst PRIVATE_SYMBOL: unique symbol = Symbol('Private');\nconst INSTANCE_PRIVATE_SYMBOL: unique symbol = Symbol('InstancePrivate');\nconst STATIC_INITIALIZATION_BLOCK: unique symbol = Symbol('StaticBlock');\n\ninterface ClassConstructor {\n\t/**\n\t * A reference to the prototype.\n\t */\n\treadonly prototype: ClassInstance;\n\n\t[GET_PARAMETERS](args: any[]): any[];\n\t[STATIC_INITIALIZATION_BLOCK]: Function[];\n\t[PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[INSTANCE_PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[CONSTRUCTOR]: Function;\n\t[key: string]: any;\n}\n\ndeclare var ClassInstance: ClassConstructor;\ninterface ClassInstance {\n\t[PRIVATE_SYMBOL]: { [key: PropertyKey]: any };\n\t[STACK]: Stack;\n\t[key: string]: any;\n}\n\n\n/**\n * A `super` pseudo-expression.\n */\n@Deserializer('Super')\nexport class Super extends AbstractExpressionNode {\n\tstatic INSTANCE = new Super();\n\tstatic fromJSON(node: Super): Super {\n\t\treturn Super.INSTANCE;\n\t}\n\tconstructor() {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('Super.#set() Method not implemented.');\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tthrow new Error('Super.#get() Method not implemented.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Super.#dependency() Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Super.#dependencyPath() Method not implemented.');\n\t}\n\n\ttoString(): string {\n\t\treturn `super`;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {};\n\t}\n}\n\n/**\n * MetaProperty node represents\n * - `new.target` meta property in ES2015.\n * - `import.meta` meta property in ES2030.\n * \n * In the future, it will represent other meta properties as well.\n */\n@Deserializer('MetaProperty')\nexport class MetaProperty extends MemberExpression {\n\n\tpublic static NewTarget = new MetaProperty(new Identifier('new'), new Identifier('target'));\n\n\tpublic static ImportMeta = new MetaProperty(new Identifier('import'), new Identifier('meta'));\n\n\tprivate static getJsonName(identifier: ExpressionNode): string {\n\t\treturn Reflect.get(identifier, 'name');\n\t}\n\n\tstatic fromJSON(node: MetaProperty, deserializer: NodeDeserializer<any>): MetaProperty {\n\t\tif (MetaProperty.getJsonName(node.meta) === 'new' && MetaProperty.getJsonName(node.property) === 'target') {\n\t\t\treturn MetaProperty.NewTarget;\n\t\t}\n\t\telse if (MetaProperty.getJsonName(node.meta) === 'import' && MetaProperty.getJsonName(node.property) === 'meta') {\n\t\t\treturn MetaProperty.ImportMeta;\n\t\t}\n\t\treturn new MetaProperty(\n\t\t\tdeserializer(node.meta),\n\t\t\tdeserializer(node.property)\n\t\t);\n\t}\n\tstatic visit(node: MetaProperty, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.meta);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(private meta: Identifier, property: Identifier) {\n\t\tsuper(meta, property, false);\n\t}\n\tgetMeta() {\n\t\treturn this.meta;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tget(stack: Stack, thisContext?: any) {\n\t\tif (MetaProperty.getJsonName(this.meta) === 'new' && MetaProperty.getJsonName(this.property) === 'target') {\n\t\t\treturn stack.get(NEW_TARGET);\n\t\t}\n\t\telse if (MetaProperty.getJsonName(this.meta) === 'import' && MetaProperty.getJsonName(this.property) === 'meta') {\n\t\t\tconst importObject = stack.getModule()?.get('import');\n\t\t\treturn importObject['meta'];\n\t\t}\n\t\treturn super.get(stack, thisContext);\n\t}\n\ttoString(): string {\n\t\treturn `${this.meta.toString()}.${this.property.toString()}`;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tmeta: this.meta.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t};\n\t}\n}\n\n/**\n * A private identifier refers to private class elements. For a private name `#a`, its name is `a`.\n */\n@Deserializer('PrivateIdentifier')\nexport class PrivateIdentifier extends Identifier {\n\tstatic fromJSON(node: PrivateIdentifier): PrivateIdentifier {\n\t\treturn new PrivateIdentifier(\n\t\t\tnode.name as string\n\t\t);\n\t}\n\tget(stack: Stack) {\n\t\treturn stack.get(this.toString());\n\t}\n\ttoString(): string {\n\t\treturn `#${this.name}`;\n\t}\n}\n\n/**\n * A static block static { } is a block statement serving as an additional static initializer.\n */\n@Deserializer('StaticBlock')\nexport class StaticBlock extends BlockStatement {\n\tstatic fromJSON(node: StaticBlock, deserializer: NodeDeserializer<any>): StaticBlock {\n\t\treturn new StaticBlock(deserializer(node.body));\n\t}\n\tconstructor(body: ExpressionNode[]) {\n\t\tsuper(body);\n\t}\n\tget(stack: Stack, classConstructor?: ClassConstructor): void {\n\t\tconst constructor = classConstructor!;\n\t\tconstructor[STATIC_INITIALIZATION_BLOCK].push(\n\t\t\t() => {\n\t\t\t\tconst scope = new ClassScope(constructor);\n\t\t\t\tstack.pushScope(scope);\n\t\t\t\ttry {\n\t\t\t\t\tsuper.get(stack)\n\t\t\t\t} finally {\n\t\t\t\t\tstack.clearTo(scope);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\ttoString(): string {\n\t\treturn `static ${super.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.map(node => node.toJSON())\n\t\t};\n\t}\n}\n\nexport abstract class AbstractDefinition extends AbstractExpressionNode {\n\tprotected 'static': boolean;\n\tconstructor(\n\t\tprotected key: ExpressionNode | PrivateIdentifier,\n\t\tprotected decorators: Decorator[],\n\t\tprotected computed: boolean,\n\t\tisStatic: boolean,\n\t\tprotected value?: ExpressionNode,) {\n\t\tsuper();\n\t\tthis.static = isStatic;\n\t}\n\tgetKey() {\n\t\treturn this.key;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tisComputed() {\n\t\treturn this.computed;\n\t}\n\tisStatic() {\n\t\treturn this.static;\n\t}\n\tgetDecorators() {\n\t\treturn this.decorators;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('AbstractDefinition.#set() Method not implemented.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn [];\n\t}\n\tgetTarget(classConstructor: ClassConstructor) {\n\t\treturn this.static\n\t\t\t? (this.key instanceof PrivateIdentifier ? classConstructor[PRIVATE_SYMBOL] : classConstructor)\n\t\t\t: (this.key instanceof PrivateIdentifier ? classConstructor[INSTANCE_PRIVATE_SYMBOL] : classConstructor.prototype);\n\t}\n\tgetKeyName(stack: Stack) {\n\t\tswitch (true) {\n\t\t\tcase this.computed:\n\t\t\t\treturn this.key.get(stack);\n\t\t\tcase this.key instanceof Identifier:\n\t\t\tcase this.key instanceof PrivateIdentifier:\n\t\t\t\treturn (this.key as Identifier | PrivateIdentifier).getName() as string;\n\t\t\tdefault: return this.key.toString();\n\t\t}\n\t}\n\tabstract get(stack: Stack, classConstructor: ClassConstructor): void;\n\tabstract toString(): string;\n\tabstract toJson(): { [key: string]: any; };\n}\n\nexport type MethodDefinitionKind = 'constructor' | 'method' | 'set' | 'get';\n\n/**\n * - When key is a PrivateIdentifier, computed must be false and kind can not be \"constructor\".\n */\n@Deserializer('MethodDefinition')\nexport class MethodDefinition extends AbstractDefinition {\n\tstatic fromJSON(node: MethodDefinition, deserializer: NodeDeserializer<any>): MethodDefinition {\n\t\treturn new MethodDefinition(\n\t\t\tnode.kind,\n\t\t\tdeserializer(node.key),\n\t\t\tdeserializer(node.value),\n\t\t\tnode.decorators.map(deserializer),\n\t\t\tnode.computed,\n\t\t\tnode.static\n\t\t);\n\t}\n\tstatic visit(node: MethodDefinition, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tvisitNode(node.value);\n\t\tnode.decorators.forEach(visitNode);\n\t}\n\tdeclare protected value: FunctionExpression;\n\tconstructor(\n\t\tprivate kind: MethodDefinitionKind,\n\t\tkey: ExpressionNode | PrivateIdentifier,\n\t\tvalue: FunctionExpression,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tif (this.kind === 'constructor') {\n\t\t\tthis.initConstructor(stack, classConstructor);\n\t\t\treturn;\n\t\t}\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name: string = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\tswitch (this.kind) {\n\t\t\tcase 'method':\n\t\t\t\ttarget[name] = value;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tObject.defineProperty(target, name, {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tset: value as (v: any) => void,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'get':\n\t\t\t\tObject.defineProperty(target, name, {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tget: value as () => any,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, target, name, null);\n\t}\n\tprivate initConstructor(stack: Stack, classConstructor: ClassConstructor) {\n\t\tconst body = (this.value.getBody() as BlockStatement).getBody();\n\t\tlet superIndex = body\n\t\t\t.findIndex(call => call instanceof CallExpression && Super.INSTANCE === call.getCallee());\n\t\tif (superIndex === -1) {\n\t\t\tsuperIndex = body.length;\n\t\t}\n\t\tconst superCall = body[superIndex] as CallExpression | undefined;\n\n\t\tconst blockBeforeSuper = new BlockStatement(body.slice(0, superIndex));\n\t\tconst blockAfterSuper = new BlockStatement(body.slice(superIndex + 1));\n\n\t\tif (superCall) {\n\t\t\tclassConstructor[GET_PARAMETERS] = function (this: ClassConstructor, params: any[]) {\n\t\t\t\tconst scope = stack.pushBlockScope();\n\t\t\t\tthis.value.setParameter(stack, params);\n\t\t\t\tblockBeforeSuper.get(stack);\n\t\t\t\tconst parameters = superCall.getCallParameters(stack);\n\t\t\t\tstack.clearTo(scope);\n\t\t\t\treturn parameters;\n\t\t\t};\n\t\t}\n\n\t\tclassConstructor[CONSTRUCTOR] = function (this: ClassInstance, params: any[]) {\n\t\t\tconst scope = this[STACK].pushBlockScope();\n\t\t\tblockAfterSuper.get(this[STACK]);\n\t\t\tstack.clearTo(scope);\n\t\t};\n\t}\n\ttoString(): string {\n\t\tlet str = this.decorators.map(decorator => decorator.toString()).join(' ');\n\t\tif (str.length) {\n\t\t\tstr += ' ';\n\t\t}\n\t\tif (this.static) {\n\t\t\tstr += 'static ';\n\t\t}\n\t\tconst methodName = this.key.toString();\n\t\tswitch (this.kind) {\n\t\t\tcase 'get':\n\t\t\t\tstr += 'get ' + methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tstr += 'set ' + methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'method':\n\t\t\t\tif (this.value.getAsync() && this.value.getGenerator()) {\n\t\t\t\t\tstr += 'async *';\n\t\t\t\t}\n\t\t\t\telse if (this.value.getAsync()) {\n\t\t\t\t\tstr += 'async ';\n\t\t\t\t} else if (this.value.getGenerator()) {\n\t\t\t\t\tstr += '*';\n\t\t\t\t}\n\t\t\t\tstr += methodName;\n\t\t\t\tbreak;\n\t\t\tcase 'constructor':\n\t\t\t\tstr += 'constructor';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tstr += this.value.paramsAndBodyToString();\n\t\treturn str;\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkind: this.kind,\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t};\n\t}\n}\n\n\n\n/**\n * - When key is a PrivateIdentifier, computed must be false.\n */\n@Deserializer('PropertyDefinition')\nexport class PropertyDefinition extends AbstractDefinition {\n\tstatic fromJSON(node: PropertyDefinition, deserializer: NodeDeserializer<any>): PropertyDefinition {\n\t\treturn new PropertyDefinition(\n\t\t\tdeserializer(node.key),\n\t\t\tnode.decorators.map(deserializer),\n\t\t\tnode.computed,\n\t\t\tnode.static,\n\t\t\tnode.value && deserializer(node.value)\n\t\t);\n\t}\n\tstatic visit(node: PropertyDefinition, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tnode.value && visitNode(node.value);\n\t}\n\tconstructor(\n\t\tkey: ExpressionNode | PrivateIdentifier,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean,\n\t\tvalue?: ExpressionNode) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name: string = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\ttarget[name as string] = value;\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, target, name, null);\n\t}\n\ttoString(): string {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tconst name = this.computed ? `[${this.key.toString()}]` : this.key.toString();\n\t\treturn `${decorators.length ? decorators + ' ' : ''}${this.static ? 'static ' : ''}${name}${this.value ? ` = ${this.value.toString()}` : ''};`\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value?.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t};\n\t}\n}\n\n\n\n@Deserializer('AccessorProperty')\nexport class AccessorProperty extends AbstractDefinition {\n\tstatic fromJSON(node: AccessorProperty, deserializer: NodeDeserializer): AccessorProperty {\n\t\treturn new AccessorProperty(\n\t\t\tdeserializer(node.key),\n\t\t\tnode.decorators.map(deserializer) as Decorator[],\n\t\t\tnode.computed,\n\t\t\tnode.static,\n\t\t\tnode.value ? deserializer(node.value) : void 0\n\t\t);\n\t}\n\tstatic visit(node: AccessorProperty, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.key);\n\t\tnode.value && visitNode(node.value);\n\t\tnode.decorators.forEach(visitNode);\n\t}\n\tconstructor(\n\t\tkey: ExpressionNode,\n\t\tdecorators: Decorator[],\n\t\tcomputed: boolean,\n\t\tisStatic: boolean,\n\t\tvalue?: ExpressionNode) {\n\t\tsuper(key, decorators, computed, isStatic, value);\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor): void {\n\t\tconst target = this.getTarget(classConstructor);\n\t\tconst name = this.getKeyName(stack);\n\t\tconst value = this.value?.get(stack);\n\t\ttarget[name] = value;\n\t\tconst ref = this.static ? classConstructor : classConstructor.prototype;\n\t\tObject.defineProperty(ref, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tset: function (this: ClassInstance, setValue: any) {\n\t\t\t\tthis[PRIVATE_SYMBOL][name] = setValue;\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(ref, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: function (this: ClassInstance) {\n\t\t\t\treturn this[PRIVATE_SYMBOL][name];\n\t\t\t},\n\t\t});\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tdecorators.length && __decorate(decorators, ref, name, null);\n\t}\n\ttoString(): string {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tconst name = this.computed ? `[${this.key.toString()}]` : this.key.toString();\n\t\treturn `${decorators.length ? decorators.concat(' ') : ''}${this.static ? 'static ' : ''}accessor ${name}${this.value ? ` = ${this.value.toString()}` : ''};`\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tcomputed: this.computed,\n\t\t\tstatic: this.static,\n\t\t\tvalue: this.value?.toJSON(),\n\t\t};\n\t}\n}\n\n\n@Deserializer('ClassBody')\nexport class ClassBody extends AbstractExpressionNode {\n\tstatic fromJSON(node: ClassBody, deserializer: NodeDeserializer<any>): ClassBody {\n\t\treturn new ClassBody(\n\t\t\tnode.body.map(deserializer)\n\t\t);\n\t}\n\tstatic visit(node: ClassBody, visitNode: VisitNodeType): void {\n\t\tnode.body.forEach(visitNode);\n\t}\n\tconstructor(private body: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[]) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tget(stack: Stack, classConstructor: ClassConstructor) {\n\t\tthis.body.forEach(definition => definition.get(stack, classConstructor));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(definition => `\\t${definition.toString()}`).join('\\n');\n\t}\n\ttoJson(): { [key: string]: any; } {\n\t\treturn {\n\t\t\tbody: this.body.map(method => method.toJSON())\n\t\t};\n\t}\n}\n\nexport class Class extends AbstractExpressionNode {\n\tprivate sharedVariables?: Scope<any>[];\n\tconstructor(\n\t\tprotected body: ClassBody,\n\t\tprotected decorators: Decorator[],\n\t\tprotected id?: Identifier,\n\t\tprotected superClass?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetDecorators() {\n\t\treturn this.decorators;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetSuperClass() {\n\t\treturn this.superClass;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(`Class.#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst className = this.id?.get(stack) as string | undefined;\n\t\tconst parentClass = this.superClass?.get(stack) as TypeOf<any> | undefined ?? class { };\n\t\tlet classConstructor: ClassConstructor = this.createClass(stack, parentClass, className);\n\t\t// build class body\n\t\tthis.body.get(stack, classConstructor);\n\n\t\t// apply class decorators\n\t\tconst decorators = this.decorators.map(decorator => decorator.get(stack));\n\t\tclassConstructor = __decorate(decorators, classConstructor);\n\n\t\t// run static initialization block\n\t\tclassConstructor[STATIC_INITIALIZATION_BLOCK].forEach(block => block());\n\t\tReflect.deleteProperty(classConstructor, STATIC_INITIALIZATION_BLOCK);\n\n\t\treturn classConstructor;\n\t}\n\n\tprivate createClass(stack: Stack, parentClass: TypeOf<any>, className: string | symbol = TEMP_CLASS_NAME) {\n\t\tconst TEMP: { [key: typeof className]: ClassConstructor } = {\n\t\t\t[className]: class extends parentClass {\n\t\t\t\tstatic [GET_PARAMETERS](args: any[]): any[] {\n\t\t\t\t\treturn args;\n\t\t\t\t}\n\t\t\t\tstatic [STATIC_INITIALIZATION_BLOCK]: Function[] = [];\n\t\t\t\tstatic [PRIVATE_SYMBOL]: { [key: string | number | symbol]: any } = {};\n\t\t\t\tstatic [INSTANCE_PRIVATE_SYMBOL] = {};\n\t\t\t\tstatic [CONSTRUCTOR](): void { }\n\n\t\t\t\t[PRIVATE_SYMBOL]: { [key: string | number | symbol]: any } = {};\n\n\t\t\t\t[STACK]: Stack;\n\t\t\t\tconstructor(...params: any[]) {\n\t\t\t\t\tconst parameters = TEMP[className][GET_PARAMETERS](params);\n\t\t\t\t\tsuper(...parameters);\n\t\t\t\t\tthis[PRIVATE_SYMBOL] = Object.assign(this[PRIVATE_SYMBOL], TEMP[className][INSTANCE_PRIVATE_SYMBOL]);\n\t\t\t\t\tthis[STACK] = stack.copyStack();\n\t\t\t\t\tconst instanceStack = this[STACK];\n\t\t\t\t\tinstanceStack.pushScope(ClassScope.readOnlyScopeForThis(this));\n\t\t\t\t\tinstanceStack.declareVariable(NEW_TARGET, new.target);\n\t\t\t\t\tinstanceStack.declareVariable(PRIVATE_SYMBOL, this[PRIVATE_SYMBOL]);\n\t\t\t\t\tinstanceStack.declareVariable(CALL_SUPER_Method, (name: string) => super[name]());\n\t\t\t\t\tinstanceStack.declareVariable(GET_SUPER_PROPERTY, (name: string) => super[name]);\n\t\t\t\t\tinstanceStack.pushReactiveScope();\n\t\t\t\t\t// init fields and methods values\n\t\t\t\t\tTEMP[className][CONSTRUCTOR]();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn TEMP[className as string];\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\ttoString() {\n\t\tconst decorators = this.decorators.map(decorator => decorator.toString()).join('\\n');\n\t\tlet classDeclaration = 'class ';\n\t\tif (this.id) {\n\t\t\tclassDeclaration += this.id.toString();\n\t\t}\n\t\tif (this.superClass) {\n\t\t\tclassDeclaration += ' extends ' + this.superClass.toString();\n\t\t}\n\t\treturn `${decorators}${classDeclaration} {\\n${this.body.toString()}\\n}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tbody: this.body.toJSON(),\n\t\t\tdecorators: this.decorators.map(decorator => decorator.toJSON()),\n\t\t\tid: this.id?.toJSON(),\n\t\t\tsuperClass: this.superClass?.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('ClassDeclaration')\nexport class ClassDeclaration extends Class implements DeclarationExpression {\n\tstatic fromJSON(node: ClassDeclaration, deserializer: NodeDeserializer<any>): ClassDeclaration {\n\t\treturn new ClassDeclaration(\n\t\t\tdeserializer(node.body),\n\t\t\tdeserializer(node.id),\n\t\t\tnode.superClass && deserializer(node.superClass)\n\t\t);\n\t}\n\tstatic visit(node: ClassDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.decorators.forEach(visitNode);\n\t\tvisitNode(node.id);\n\t\tnode.superClass && visitNode(node.superClass);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(body: ClassBody, decorators: Decorator[], id: Identifier, superClass?: ExpressionNode) {\n\t\tsuper(body, decorators, id, superClass);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue?: any) {\n\t\tstack.declareVariable(this.id.getName(), propertyValue);\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.id.getDeclarationName()!;\n\t}\n\n\toverride get(stack: Stack) {\n\t\tconst classConstructor = super.get(stack);\n\t\tthis.id.declareVariable(stack, classConstructor);\n\t\treturn classConstructor;\n\t}\n}\n\n@Deserializer('ClassExpression')\nexport class ClassExpression extends Class {\n\tstatic fromJSON(node: ClassExpression, deserializer: NodeDeserializer<any>): ClassExpression {\n\t\treturn new ClassExpression(\n\t\t\tdeserializer(node.body),\n\t\t\tnode.superClass && deserializer(node.superClass)\n\t\t);\n\t}\n\tstatic visit(node: ClassExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.body);\n\t\tnode.decorators.forEach(visitNode);\n\t\tnode.id && visitNode(node.id);\n\t\tnode.superClass && visitNode(node.superClass);\n\t}\n\n}\n"]}
@@ -2,6 +2,10 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
2
2
  import type { Scope } from '../../scope/scope.js';
3
3
  import type { Stack } from '../../scope/stack.js';
4
4
  import { AbstractExpressionNode, ReturnValue } from '../abstract.js';
5
+ /**
6
+ * The expression whose value is to be returned.
7
+ * If omitted, undefined is returned instead.
8
+ */
5
9
  export declare class ReturnStatement extends AbstractExpressionNode {
6
10
  private argument?;
7
11
  static fromJSON(node: ReturnStatement, deserializer: NodeDeserializer): ReturnStatement;
@@ -2,6 +2,10 @@ var ReturnStatement_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
+ /**
6
+ * The expression whose value is to be returned.
7
+ * If omitted, undefined is returned instead.
8
+ */
5
9
  let ReturnStatement = ReturnStatement_1 = class ReturnStatement extends AbstractExpressionNode {
6
10
  constructor(argument) {
7
11
  super();
@@ -24,6 +28,7 @@ let ReturnStatement = ReturnStatement_1 = class ReturnStatement extends Abstract
24
28
  }
25
29
  get(stack) {
26
30
  return new ReturnValue(this.argument?.get(stack));
31
+ // nothing should be written after this operation in a function body.
27
32
  }
28
33
  dependency(computed) {
29
34
  return this.argument?.dependency(computed) || [];
@@ -1 +1 @@
1
- {"version":3,"file":"return.js","sourceRoot":"","sources":["../../../../src/expressions/api/computing/return.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAO7D,IAAa,eAAe,uBAA5B,MAAa,eAAgB,SAAQ,sBAAsB;IAO1D,YAAoB,QAAyB;QAC5C,KAAK,EAAE,CAAC;QADW,aAAQ,GAAR,QAAQ,CAAiB;IAE7C,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAqB,EAAE,YAA8B;QACpE,OAAO,IAAI,iBAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAqB,EAAE,SAAwB;QAC3D,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAID,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnD,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ;QACP,OAAO,UAAU,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,MAAM;QACL,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IAC9C,CAAC;CACD,CAAA;AAnCY,eAAe;IAD3B,YAAY,CAAC,iBAAiB,CAAC;;GACnB,eAAe,CAmC3B;SAnCY,eAAe","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } 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';\n\n/**\n * The expression whose value is to be returned. \n * If omitted, undefined is returned instead.\n */\n@Deserializer('ReturnStatement')\nexport class ReturnStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: ReturnStatement, deserializer: NodeDeserializer): ReturnStatement {\n\t\treturn new ReturnStatement(node.argument ? deserializer(node.argument) : void 0);\n\t}\n\tstatic visit(node: ReturnStatement, visitNode: VisitNodeType): void {\n\t\tnode.argument && visitNode(node.argument);\n\t}\n\tconstructor(private argument?: ExpressionNode) {\n\t\tsuper();\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\tthrow new Error(`ReturnStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn new ReturnValue(this.argument?.get(stack));\n\t\t// nothing should be written after this operation in a function body.\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(): string {\n\t\treturn `return ${this.argument?.toString() || ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn { argument: this.argument?.toJSON() };\n\t}\n}\n"]}
1
+ {"version":3,"file":"return.js","sourceRoot":"","sources":["../../../../src/expressions/api/computing/return.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;;GAGG;AAEH,IAAa,eAAe,uBAA5B,MAAa,eAAgB,SAAQ,sBAAsB;IAO1D,YAAoB,QAAyB;QAC5C,KAAK,EAAE,CAAC;QADW,aAAQ,GAAR,QAAQ,CAAiB;IAE7C,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAqB,EAAE,YAA8B;QACpE,OAAO,IAAI,iBAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAqB,EAAE,SAAwB;QAC3D,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAID,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,qEAAqE;IACtE,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ;QACP,OAAO,UAAU,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,MAAM;QACL,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IAC9C,CAAC;CACD,CAAA;AAnCY,eAAe;IAD3B,YAAY,CAAC,iBAAiB,CAAC;;GACnB,eAAe,CAmC3B;SAnCY,eAAe","sourcesContent":["import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeType } 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';\n\n/**\n * The expression whose value is to be returned. \n * If omitted, undefined is returned instead.\n */\n@Deserializer('ReturnStatement')\nexport class ReturnStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: ReturnStatement, deserializer: NodeDeserializer): ReturnStatement {\n\t\treturn new ReturnStatement(node.argument ? deserializer(node.argument) : void 0);\n\t}\n\tstatic visit(node: ReturnStatement, visitNode: VisitNodeType): void {\n\t\tnode.argument && visitNode(node.argument);\n\t}\n\tconstructor(private argument?: ExpressionNode) {\n\t\tsuper();\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\tthrow new Error(`ReturnStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\treturn new ReturnValue(this.argument?.get(stack));\n\t\t// nothing should be written after this operation in a function body.\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(): string {\n\t\treturn `return ${this.argument?.toString() || ''}`;\n\t}\n\ttoJson(): object {\n\t\treturn { argument: this.argument?.toJSON() };\n\t}\n}\n"]}
@@ -2,6 +2,10 @@ import type { NodeDeserializer, ExpressionNode, ExpressionEventPath, VisitNodeTy
2
2
  import type { Scope } from '../../scope/scope.js';
3
3
  import type { Stack } from '../../scope/stack.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
5
+ /**
6
+ * The expression whose value is to be returned.
7
+ * If omitted, undefined is returned instead.
8
+ */
5
9
  export declare class ThrowStatement extends AbstractExpressionNode {
6
10
  private argument;
7
11
  static fromJSON(node: ThrowStatement, deserializer: NodeDeserializer): ThrowStatement;
@@ -2,6 +2,10 @@ var ThrowStatement_1, CatchClauseNode_1, TryCatchNode_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 expression whose value is to be returned.
7
+ * If omitted, undefined is returned instead.
8
+ */
5
9
  let ThrowStatement = ThrowStatement_1 = class ThrowStatement extends AbstractExpressionNode {
6
10
  constructor(argument) {
7
11
  super();