@ibyar/expressions 0.4.2 → 0.5.0

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 (126) hide show
  1. package/api/abstract.d.ts +2 -1
  2. package/api/abstract.js +4 -0
  3. package/api/abstract.js.map +1 -1
  4. package/api/definition/array.d.ts +3 -1
  5. package/api/definition/array.js +6 -0
  6. package/api/definition/array.js.map +1 -1
  7. package/api/definition/bind.d.ts +2 -1
  8. package/api/definition/bind.js +4 -0
  9. package/api/definition/bind.js.map +1 -1
  10. package/api/definition/function.d.ts +6 -1
  11. package/api/definition/function.js +22 -2
  12. package/api/definition/function.js.map +1 -1
  13. package/api/definition/member.d.ts +2 -1
  14. package/api/definition/member.js +4 -0
  15. package/api/definition/member.js.map +1 -1
  16. package/api/definition/object.d.ts +4 -1
  17. package/api/definition/object.js +10 -0
  18. package/api/definition/object.js.map +1 -1
  19. package/api/definition/statement.d.ts +2 -1
  20. package/api/definition/statement.js +3 -0
  21. package/api/definition/statement.js.map +1 -1
  22. package/api/definition/values.d.ts +11 -4
  23. package/api/definition/values.js +16 -0
  24. package/api/definition/values.js.map +1 -1
  25. package/api/deserialize/deserialize.js +3 -3
  26. package/api/deserialize/deserialize.js.map +1 -1
  27. package/api/deserialize/type-store.d.ts +2 -0
  28. package/api/deserialize/type-store.js +2 -0
  29. package/api/deserialize/type-store.js.map +1 -0
  30. package/api/expression.d.ts +9 -3
  31. package/api/expression.js.map +1 -1
  32. package/api/module/export.d.ts +3 -1
  33. package/api/module/export.js +10 -0
  34. package/api/module/export.js.map +1 -1
  35. package/api/module/import.d.ts +3 -1
  36. package/api/module/import.js +10 -0
  37. package/api/module/import.js.map +1 -1
  38. package/api/module/module.d.ts +2 -1
  39. package/api/module/module.js +5 -0
  40. package/api/module/module.js.map +1 -1
  41. package/api/operators/assignment.d.ts +2 -1
  42. package/api/operators/assignment.js +4 -0
  43. package/api/operators/assignment.js.map +1 -1
  44. package/api/operators/await.d.ts +2 -1
  45. package/api/operators/await.js +3 -0
  46. package/api/operators/await.js.map +1 -1
  47. package/api/operators/binary.d.ts +2 -1
  48. package/api/operators/binary.js +4 -0
  49. package/api/operators/binary.js.map +1 -1
  50. package/api/operators/chaining.d.ts +2 -1
  51. package/api/operators/chaining.js +3 -0
  52. package/api/operators/chaining.js.map +1 -1
  53. package/api/operators/comma.d.ts +2 -1
  54. package/api/operators/comma.js +3 -0
  55. package/api/operators/comma.js.map +1 -1
  56. package/api/operators/grouping.d.ts +2 -1
  57. package/api/operators/grouping.js +3 -0
  58. package/api/operators/grouping.js.map +1 -1
  59. package/api/operators/logical.d.ts +2 -1
  60. package/api/operators/logical.js +4 -0
  61. package/api/operators/logical.js.map +1 -1
  62. package/api/operators/pipeline.d.ts +2 -1
  63. package/api/operators/pipeline.js +5 -0
  64. package/api/operators/pipeline.js.map +1 -1
  65. package/api/operators/ternary.d.ts +2 -1
  66. package/api/operators/ternary.js +5 -0
  67. package/api/operators/ternary.js.map +1 -1
  68. package/api/operators/unary.d.ts +2 -1
  69. package/api/operators/unary.js +3 -0
  70. package/api/operators/unary.js.map +1 -1
  71. package/api/operators/update.d.ts +2 -1
  72. package/api/operators/update.js +3 -0
  73. package/api/operators/update.js.map +1 -1
  74. package/api/statement/control/block.d.ts +2 -1
  75. package/api/statement/control/block.js +3 -0
  76. package/api/statement/control/block.js.map +1 -1
  77. package/api/statement/control/if.d.ts +2 -1
  78. package/api/statement/control/if.js +5 -0
  79. package/api/statement/control/if.js.map +1 -1
  80. package/api/statement/control/switch.d.ts +4 -1
  81. package/api/statement/control/switch.js +11 -0
  82. package/api/statement/control/switch.js.map +1 -1
  83. package/api/statement/control/terminate.d.ts +5 -3
  84. package/api/statement/control/terminate.js +6 -0
  85. package/api/statement/control/terminate.js.map +1 -1
  86. package/api/statement/declarations/declares.d.ts +3 -1
  87. package/api/statement/declarations/declares.js +8 -1
  88. package/api/statement/declarations/declares.js.map +1 -1
  89. package/api/statement/iterations/for.d.ts +5 -1
  90. package/api/statement/iterations/for.js +21 -0
  91. package/api/statement/iterations/for.js.map +1 -1
  92. package/api/statement/iterations/while.d.ts +3 -1
  93. package/api/statement/iterations/while.js +8 -0
  94. package/api/statement/iterations/while.js.map +1 -1
  95. package/index.d.ts +1 -0
  96. package/index.js +1 -0
  97. package/index.js.map +1 -1
  98. package/package.json +3 -3
  99. package/scope/event.d.ts +5 -0
  100. package/scope/event.js +41 -0
  101. package/scope/event.js.map +1 -0
  102. package/scope/index.d.ts +1 -0
  103. package/scope/index.js +1 -0
  104. package/scope/index.js.map +1 -1
  105. package/scope/proxy.d.ts +1 -1
  106. package/scope/proxy.js +3 -3
  107. package/scope/proxy.js.map +1 -1
  108. package/scope/scope.d.ts +56 -48
  109. package/scope/scope.js +84 -29
  110. package/scope/scope.js.map +1 -1
  111. package/scope/stack.d.ts +28 -28
  112. package/scope/stack.js.map +1 -1
  113. package/v8/parser.d.ts +1 -1
  114. package/v8/parser.js +4 -2
  115. package/v8/parser.js.map +1 -1
  116. package/v8/stream.d.ts +4 -2
  117. package/v8/stream.js +34 -17
  118. package/v8/stream.js.map +1 -1
  119. package/v8/token.d.ts +1 -1
  120. package/v8/token.js.map +1 -1
  121. package/visit/index.d.ts +1 -0
  122. package/visit/index.js +2 -0
  123. package/visit/index.js.map +1 -0
  124. package/visit/visitor.d.ts +11 -0
  125. package/visit/visitor.js +42 -0
  126. package/visit/visitor.js.map +1 -0
package/api/abstract.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Scope, ScopeType } from '../scope/scope.js';
2
2
  import type { AwaitPromiseInfo, Stack } from '../scope/stack.js';
3
- import type { NodeDeserializer, ExpressionNode, NodeExpressionClass, NodeJsonType, CanDeclareExpression, ExpressionEventMap, ExpressionEventPath } from './expression.js';
3
+ import type { NodeDeserializer, ExpressionNode, NodeExpressionClass, NodeJsonType, CanDeclareExpression, ExpressionEventMap, ExpressionEventPath, VisitNodeType, VisitNodeListType } from './expression.js';
4
4
  export declare abstract class AbstractExpressionNode implements ExpressionNode {
5
5
  static fromJSON(node: ExpressionNode, deserializer: NodeDeserializer): ExpressionNode;
6
6
  getClass(): NodeExpressionClass<ExpressionNode>;
@@ -20,6 +20,7 @@ export declare abstract class InfixExpressionNode<T> extends AbstractExpressionN
20
20
  protected operator: T;
21
21
  protected left: ExpressionNode;
22
22
  protected right: ExpressionNode;
23
+ static visit(node: InfixExpressionNode<any>, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
23
24
  constructor(operator: T, left: ExpressionNode, right: ExpressionNode);
24
25
  getOperator(): T;
25
26
  getLeft(): ExpressionNode;
package/api/abstract.js CHANGED
@@ -42,6 +42,10 @@ export class InfixExpressionNode extends AbstractExpressionNode {
42
42
  this.left = left;
43
43
  this.right = right;
44
44
  }
45
+ static visit(node, visitNode, visitNodeList) {
46
+ visitNode(node.getLeft());
47
+ visitNode(node.getRight());
48
+ }
45
49
  getOperator() {
46
50
  return this.operator;
47
51
  }
@@ -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, ScopeType } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode,\n\tNodeExpressionClass, NodeJsonType, CanDeclareExpression, ExpressionEventMap, ExpressionEventPath\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(): NodeExpressionClass<ExpressionNode> {\n\t\treturn this.constructor as NodeExpressionClass<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst json = this.toJson(key) as NodeJsonType;\n\t\tjson.type = Reflect.get(this.constructor, 'type');\n\t\treturn 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\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: CanDeclareExpression;\n\tdeclareVariable: boolean;\n\tscopeType: ScopeType;\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, ScopeType } from '../scope/scope.js';\nimport type { AwaitPromiseInfo, Stack } from '../scope/stack.js';\nimport type {\n\tNodeDeserializer, ExpressionNode, NodeExpressionClass,\n\tNodeJsonType, CanDeclareExpression, ExpressionEventMap,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\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(): NodeExpressionClass<ExpressionNode> {\n\t\treturn this.constructor as NodeExpressionClass<ExpressionNode>;\n\t}\n\ttoJSON(key?: string): NodeJsonType {\n\t\tconst json = this.toJson(key) as NodeJsonType;\n\t\tjson.type = Reflect.get(this.constructor, 'type');\n\t\treturn 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, visitNodeList: VisitNodeListType): 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: CanDeclareExpression;\n\tdeclareVariable: boolean;\n\tscopeType: ScopeType;\n\tconstructor(public promise: Promise<any>) { }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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';
@@ -6,6 +6,7 @@ import { ScopeType } from '../../scope/scope.js';
6
6
  export declare class ArrayExpression extends AbstractExpressionNode {
7
7
  private elements;
8
8
  static fromJSON(node: ArrayExpression, deserializer: NodeDeserializer): ArrayExpression;
9
+ static visit(node: ArrayExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
9
10
  constructor(elements: ExpressionNode[]);
10
11
  getElements(): ExpressionNode[];
11
12
  shareVariables(scopeList: Scope<any>[]): void;
@@ -19,6 +20,7 @@ export declare class ArrayExpression extends AbstractExpressionNode {
19
20
  export declare class ArrayPattern extends AbstractExpressionNode implements CanDeclareExpression {
20
21
  private elements;
21
22
  static fromJSON(node: ArrayPattern, deserializer: NodeDeserializer): ArrayPattern;
23
+ static visit(node: ArrayPattern, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
22
24
  constructor(elements: CanDeclareExpression[]);
23
25
  getElements(): CanDeclareExpression[];
24
26
  shareVariables(scopeList: Scope<any>[]): void;
@@ -11,6 +11,9 @@ let ArrayExpression = ArrayExpression_1 = class ArrayExpression extends Abstract
11
11
  static fromJSON(node, deserializer) {
12
12
  return new ArrayExpression_1(node.elements.map(expression => deserializer(expression)));
13
13
  }
14
+ static visit(node, visitNode, visitNodeList) {
15
+ visitNodeList(node.elements);
16
+ }
14
17
  getElements() {
15
18
  return this.elements;
16
19
  }
@@ -51,6 +54,9 @@ let ArrayPattern = ArrayPattern_1 = class ArrayPattern extends AbstractExpressio
51
54
  static fromJSON(node, deserializer) {
52
55
  return new ArrayPattern_1(node.elements.map(expression => deserializer(expression)));
53
56
  }
57
+ static visit(node, visitNode, visitNodeList) {
58
+ visitNodeList(node.elements);
59
+ }
54
60
  getElements() {
55
61
  return this.elements;
56
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/array.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { RestElement } from '../computing/rest.js';\nimport { ScopeType } from '../../scope/scope.js';\n\n@Deserializer('ArrayExpression')\nexport class ArrayExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ArrayExpression, deserializer: NodeDeserializer): ArrayExpression {\n\t\treturn new ArrayExpression(node.elements.map(expression => deserializer(expression)));\n\t}\n\tconstructor(private elements: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.elements.forEach(item => item.shareVariables(scopeList));\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(\"ArrayExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack) {\n\t\treturn this.elements.map(item => item.get(stack));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n\n@Deserializer('ArrayPattern')\nexport class ArrayPattern extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: ArrayPattern, deserializer: NodeDeserializer): ArrayPattern {\n\t\treturn new ArrayPattern(node.elements.map(expression => deserializer(expression)) as CanDeclareExpression[]);\n\t}\n\tconstructor(private elements: CanDeclareExpression[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, values: any) {\n\t\tthrow new Error('ArrayPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack) {\n\t\tthrow new Error('ArrayPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, values: any) {\n\t\tif (Array.isArray(values)) {\n\t\t\tthis.declareVariableFromArray(stack, scopeType, values);\n\t\t} else if (Reflect.has(values, Symbol.iterator)) {\n\t\t\tthis.declareVariableFromIterator(stack, scopeType, values);\n\t\t}\n\t}\n\tdeclareVariableFromArray(stack: Stack, scopeType: ScopeType, values: any[]) {\n\t\tfor (let index = 0; index < this.elements.length; index++) {\n\t\t\tconst elem = this.elements[index];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = values.slice(index);\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', values[index]);\n\t\t}\n\t}\n\tdeclareVariableFromIterator(stack: Stack, scopeType: ScopeType, iterator: Iterator<any>) {\n\t\tlet index = 0;\n\t\twhile (true) {\n\t\t\tlet iteratorResult = iterator.next();\n\t\t\tif (iteratorResult.done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst elem = this.elements[index++];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = [iteratorResult.value];\n\t\t\t\twhile (!iteratorResult.done) {\n\t\t\t\t\titeratorResult = iterator.next();\n\t\t\t\t\trest.push(iteratorResult.value);\n\t\t\t\t}\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', iteratorResult.value);\n\t\t\tif (index >= this.elements.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/array.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, CanDeclareExpression,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { RestElement } from '../computing/rest.js';\nimport { ScopeType } from '../../scope/scope.js';\n\n@Deserializer('ArrayExpression')\nexport class ArrayExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ArrayExpression, deserializer: NodeDeserializer): ArrayExpression {\n\t\treturn new ArrayExpression(node.elements.map(expression => deserializer(expression)));\n\t}\n\tstatic visit(node: ArrayExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.elements);\n\t}\n\tconstructor(private elements: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.elements.forEach(item => item.shareVariables(scopeList));\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error(\"ArrayExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack) {\n\t\treturn this.elements.map(item => item.get(stack));\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n\n@Deserializer('ArrayPattern')\nexport class ArrayPattern extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: ArrayPattern, deserializer: NodeDeserializer): ArrayPattern {\n\t\treturn new ArrayPattern(node.elements.map(expression => deserializer(expression)) as CanDeclareExpression[]);\n\t}\n\tstatic visit(node: ArrayPattern, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.elements);\n\t}\n\tconstructor(private elements: CanDeclareExpression[]) {\n\t\tsuper();\n\t}\n\tgetElements() {\n\t\treturn this.elements;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, values: any) {\n\t\tthrow new Error('ArrayPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack) {\n\t\tthrow new Error('ArrayPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, values: any) {\n\t\tif (Array.isArray(values)) {\n\t\t\tthis.declareVariableFromArray(stack, scopeType, values);\n\t\t} else if (Reflect.has(values, Symbol.iterator)) {\n\t\t\tthis.declareVariableFromIterator(stack, scopeType, values);\n\t\t}\n\t}\n\tdeclareVariableFromArray(stack: Stack, scopeType: ScopeType, values: any[]) {\n\t\tfor (let index = 0; index < this.elements.length; index++) {\n\t\t\tconst elem = this.elements[index];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = values.slice(index);\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', values[index]);\n\t\t}\n\t}\n\tdeclareVariableFromIterator(stack: Stack, scopeType: ScopeType, iterator: Iterator<any>) {\n\t\tlet index = 0;\n\t\twhile (true) {\n\t\t\tlet iteratorResult = iterator.next();\n\t\t\tif (iteratorResult.done) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst elem = this.elements[index++];\n\t\t\tif (elem instanceof RestElement) {\n\t\t\t\tconst rest = [iteratorResult.value];\n\t\t\t\twhile (!iteratorResult.done) {\n\t\t\t\t\titeratorResult = iterator.next();\n\t\t\t\t\trest.push(iteratorResult.value);\n\t\t\t\t}\n\t\t\t\telem.declareVariable(stack, 'block', rest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telem.declareVariable(stack, 'block', iteratorResult.value);\n\t\t\tif (index >= this.elements.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.elements.flatMap(item => item.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.elements.flatMap(item => item.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\treturn this.elements.map(item => item.toString()).toString();\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\telements: this.elements.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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,6 +8,7 @@ export declare class BindExpression extends AbstractExpressionNode implements Ca
8
8
  private computed;
9
9
  private optional;
10
10
  static fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression;
11
+ static visit(node: BindExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
12
  constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean);
12
13
  getObject(): ExpressionNode;
13
14
  getProperty(): ExpressionNode;
@@ -13,6 +13,10 @@ let BindExpression = BindExpression_1 = class BindExpression extends AbstractExp
13
13
  static fromJSON(node, deserializer) {
14
14
  return new BindExpression_1(deserializer(node.object), deserializer(node.property), node.computed, node.optional);
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.object);
18
+ visitNode(node.property);
19
+ }
16
20
  getObject() {
17
21
  return this.object;
18
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * ```js\n * const x = {method: function(){...}};\n * const z = x::method;\n * ```\n */\n@Deserializer('BindExpression')\nexport class BindExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression {\n\t\treturn new BindExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack) {\n\t\tthrow new Error(\"BindExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (typeof objectRef === 'undefined') {\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of undefined`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\tif (this.optional && (value === undefined || value === null)) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof value !== 'function') {\n\t\t\tthrow new Error(`can't bind to non-function type ${value}`);\n\t\t}\n\t\treturn (<Function>value).bind(objectRef);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.object.dependency(computed).concat(this.property.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * ```js\n * const x = {method: function(){...}};\n * const z = x::method;\n * ```\n */\n@Deserializer('BindExpression')\nexport class BindExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression {\n\t\treturn new BindExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tstatic visit(node: BindExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.object);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack) {\n\t\tthrow new Error(\"BindExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (typeof objectRef === 'undefined') {\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of undefined`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\tif (this.optional && (value === undefined || value === null)) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof value !== 'function') {\n\t\t\tthrow new Error(`can't bind to non-function type ${value}`);\n\t\t}\n\t\treturn (<Function>value).bind(objectRef);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.object.dependency(computed).concat(this.property.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CanDeclareExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer } from '../expression.js';
1
+ import type { CanDeclareExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer, VisitNodeListType, VisitNodeType } from '../expression.js';
2
2
  import type { Stack } from '../../scope/stack.js';
3
3
  import { Scope } from '../../scope/scope.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
@@ -26,6 +26,7 @@ export declare class Param extends AbstractExpressionNode {
26
26
  private identifier;
27
27
  private defaultValue?;
28
28
  static fromJSON(node: Param, deserializer: NodeDeserializer): Param;
29
+ static visit(node: Param, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
29
30
  constructor(identifier: CanDeclareExpression, defaultValue?: ExpressionNode | undefined);
30
31
  getIdentifier(): CanDeclareExpression;
31
32
  getDefaultValue(): ExpressionNode | undefined;
@@ -51,6 +52,7 @@ export declare class FunctionExpression extends FunctionBaseExpression {
51
52
  protected rest?: boolean | undefined;
52
53
  protected generator?: boolean | undefined;
53
54
  static fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression;
55
+ static visit(node: FunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
54
56
  constructor(params: ExpressionNode[], body: ExpressionNode[], kind: FunctionKind, id?: CanDeclareExpression | undefined, rest?: boolean | undefined, generator?: boolean | undefined);
55
57
  getParams(): ExpressionNode[];
56
58
  getBody(): ExpressionNode[];
@@ -67,6 +69,8 @@ export declare class FunctionExpression extends FunctionBaseExpression {
67
69
  }
68
70
  export declare class FunctionDeclaration extends FunctionExpression {
69
71
  static fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration;
72
+ static visit(node: FunctionDeclaration, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
73
+ protected id: CanDeclareExpression;
70
74
  constructor(params: ExpressionNode[], body: ExpressionNode[], kind: FunctionKind, id: CanDeclareExpression, rest?: boolean, generator?: boolean);
71
75
  }
72
76
  export declare class ArrowFunctionExpression extends FunctionBaseExpression {
@@ -76,6 +80,7 @@ export declare class ArrowFunctionExpression extends FunctionBaseExpression {
76
80
  private rest?;
77
81
  private generator?;
78
82
  static fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression;
83
+ static visit(node: ArrowFunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
79
84
  constructor(params: ExpressionNode[], body: ExpressionNode | ExpressionNode[], kind: ArrowFunctionType, rest?: boolean | undefined, generator?: boolean | undefined);
80
85
  getParams(): ExpressionNode[];
81
86
  getBody(): ExpressionNode | ExpressionNode[];
@@ -35,6 +35,10 @@ let Param = Param_1 = class Param extends AbstractExpressionNode {
35
35
  static fromJSON(node, deserializer) {
36
36
  return new Param_1(deserializer(node.identifier), node.defaultValue ? deserializer(node.defaultValue) : void 0);
37
37
  }
38
+ static visit(node, visitNode, visitNodeList) {
39
+ visitNode(node.identifier);
40
+ node.defaultValue && visitNode(node.defaultValue);
41
+ }
38
42
  getIdentifier() {
39
43
  return this.identifier;
40
44
  }
@@ -100,6 +104,11 @@ let FunctionExpression = FunctionExpression_1 = class FunctionExpression extends
100
104
  static fromJSON(node, deserializer) {
101
105
  return new FunctionExpression_1(node.params.map(deserializer), node.body.map(deserializer), FunctionKind[node.kind], node.id ? deserializer(node.id) : void 0, node.rest, node.generator);
102
106
  }
107
+ static visit(node, visitNode, visitNodeList) {
108
+ node.id && visitNode(node.id);
109
+ visitNodeList(node.params);
110
+ visitNodeList(node.body);
111
+ }
103
112
  getParams() {
104
113
  return this.params;
105
114
  }
@@ -332,11 +341,16 @@ FunctionExpression = FunctionExpression_1 = __decorate([
332
341
  ], FunctionExpression);
333
342
  export { FunctionExpression };
334
343
  let FunctionDeclaration = FunctionDeclaration_1 = class FunctionDeclaration extends FunctionExpression {
344
+ constructor(params, body, kind, id, rest, generator) {
345
+ super(params, body, kind, id, rest, generator);
346
+ }
335
347
  static fromJSON(node, deserializer) {
336
348
  return new FunctionDeclaration_1(node.params.map(deserializer), node.body.map(deserializer), FunctionKind[node.kind], deserializer(node.id), node.rest, node.generator);
337
349
  }
338
- constructor(params, body, kind, id, rest, generator) {
339
- super(params, body, kind, id, rest, generator);
350
+ static visit(node, visitNode, visitNodeList) {
351
+ visitNode(node.id);
352
+ visitNodeList(node.params);
353
+ visitNodeList(node.body);
340
354
  }
341
355
  };
342
356
  FunctionDeclaration = FunctionDeclaration_1 = __decorate([
@@ -358,6 +372,12 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
358
372
  ? node.body.map(deserializer)
359
373
  : deserializer(node.body), ArrowFunctionType[node.kind], node.rest, node.generator);
360
374
  }
375
+ static visit(node, visitNode, visitNodeList) {
376
+ visitNodeList(node.params);
377
+ Array.isArray(node.body)
378
+ ? visitNodeList(node.body)
379
+ : visitNode(node.body);
380
+ }
361
381
  getParams() {
362
382
  return this.params;
363
383
  }
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CanDeclareExpression, ExpressionEventPath, ExpressionNode, NodeDeserializer } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Scope } from '../../scope/scope.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { BreakStatement, ContinueStatement } from '../statement/control/terminate.js';\n\nexport enum FunctionKind {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC',\n\tGENERATOR = 'GENERATOR',\n\tASYNC_GENERATOR = 'ASYNC_GENERATOR',\n\n\tCONCISE = 'CONCISE',\n\tASYNC_CONCISE = 'ASYNC_CONCISE',\n\tCONCISE_GENERATOR = 'CONCISE_GENERATOR',\n\tASYNC_CONCISE_GENERATOR = 'ASYNC_CONCISE_GENERATOR',\n\n\tSTATIC_CONCISE = 'STATIC_CONCISE',\n\tSTATIC_ASYNC_CONCISE = 'STATIC_ASYNC_CONCISE',\n\tSTATIC_CONCISE_GENERATOR = 'STATIC_CONCISE_GENERATOR',\n\tSTATIC_ASYNC_CONCISE_GENERATOR = 'STATIC_ASYNC_CONCISE_GENERATOR',\n\n\tDERIVED_CONSTRUCTOR = 'DERIVED_CONSTRUCTOR',\n\tBASE_CONSTRUCTOR = 'BASE_CONSTRUCTOR',\n\n}\n\nexport enum ArrowFunctionType {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC'\n}\n\n@Deserializer('Param')\nexport class Param extends AbstractExpressionNode {\n\tstatic fromJSON(node: Param, deserializer: NodeDeserializer): Param {\n\t\treturn new Param(\n\t\t\tdeserializer(node.identifier) as CanDeclareExpression,\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tconstructor(private identifier: CanDeclareExpression, private defaultValue?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetIdentifier() {\n\t\treturn this.identifier;\n\t}\n\tgetDefaultValue() {\n\t\treturn this.defaultValue;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.defaultValue?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.declareVariable?.(stack, 'function', value);\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.defaultValue ? [this.defaultValue] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.defaultValue?.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\tlet init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';\n\t\treturn this.identifier.toString() + init;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tidentifier: this.identifier.toJSON(),\n\t\t\tdefaultValue: this.defaultValue?.toJSON()\n\t\t};\n\t}\n}\n\nexport abstract class FunctionBaseExpression extends AbstractExpressionNode {\n\tprivate sharedVariables: Scope<any>[];\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tinitFunctionScope(stack: Stack) {\n\t\tconst scope = Scope.functionScope<object>();\n\t\tconst innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];\n\t\tinnerScopes.push(scope);\n\t\tinnerScopes.forEach(variableScope => stack.pushScope(variableScope));\n\t\treturn innerScopes;\n\t}\n\tclearFunctionScope(stack: Stack, innerScopes: Scope<any>[]) {\n\t\tstack.clearTo(innerScopes[0]);\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends FunctionBaseExpression {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode[],\n\t\tprotected kind: FunctionKind, protected id?: CanDeclareExpression,\n\t\tprotected rest?: boolean, protected generator?: boolean) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tconst self = this;\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tfunc = async function (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tfunc = function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tfunc = async function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tfunc = function (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.id?.declareVariable(stack, 'block', func);\n\t\treturn func;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tdeclare = 'async function'; break;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tdeclare = 'function*'; break;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tdeclare = 'async function*'; break;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tdeclare = 'function'; break;\n\t\t}\n\t\treturn `${declare} ${this.id?.toString() || ''}(${this.params.map((param, index, array) => {\n\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\treturn '...' + param.toString();\n\t\t\t} else {\n\t\t\t\treturn param.toString();\n\t\t\t}\n\t\t}).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.map(statement => statement.toJSON()),\n\t\t\tkind: this.kind,\n\t\t\tid: this.id?.toJSON(),\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tdeserializer(node.id!) as CanDeclareExpression,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(\n\t\tparams: ExpressionNode[], body: ExpressionNode[],\n\t\tkind: FunctionKind, id: CanDeclareExpression,\n\t\trest?: boolean, generator?: boolean) {\n\t\tsuper(params, body, kind, id, rest, generator);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends FunctionBaseExpression {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tArrowFunctionType[node.kind],\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tconstructor(private params: ExpressionNode[], private body: ExpressionNode | ExpressionNode[],\n\t\tprivate kind: ArrowFunctionType, private rest?: boolean, private generator?: boolean) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase ArrowFunctionType.ASYNC:\n\t\t\t\tfunc = async (...args: any[]) => {\n\t\t\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\t\t\tfor (const state of statements) {\n\t\t\t\t\t\tstate.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\tif (!Array.isArray(this.body)) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase ArrowFunctionType.NORMAL:\n\t\t\t\tfunc = (...args: any[]) => {\n\t\t\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\t\t\tfor (const statement of statements) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\tif (!Array.isArray(this.body)) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\treturn func;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.kind === ArrowFunctionType.ASYNC ? 'async ' : '';\n\t\tif (this.params.length === 0) {\n\t\t\tstr += '()';\n\t\t} else if (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += '(';\n\t\t\tstr += this.params.map((param, index, array) => {\n\t\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\t\treturn '...' + param.toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn param.toString();\n\t\t\t\t}\n\t\t\t}).join(', ');\n\t\t\tstr += ')';\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tkind: this.kind,\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tCanDeclareExpression, ExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeListType, VisitNodeType\n} from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Scope } from '../../scope/scope.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { BreakStatement, ContinueStatement } from '../statement/control/terminate.js';\n\nexport enum FunctionKind {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC',\n\tGENERATOR = 'GENERATOR',\n\tASYNC_GENERATOR = 'ASYNC_GENERATOR',\n\n\tCONCISE = 'CONCISE',\n\tASYNC_CONCISE = 'ASYNC_CONCISE',\n\tCONCISE_GENERATOR = 'CONCISE_GENERATOR',\n\tASYNC_CONCISE_GENERATOR = 'ASYNC_CONCISE_GENERATOR',\n\n\tSTATIC_CONCISE = 'STATIC_CONCISE',\n\tSTATIC_ASYNC_CONCISE = 'STATIC_ASYNC_CONCISE',\n\tSTATIC_CONCISE_GENERATOR = 'STATIC_CONCISE_GENERATOR',\n\tSTATIC_ASYNC_CONCISE_GENERATOR = 'STATIC_ASYNC_CONCISE_GENERATOR',\n\n\tDERIVED_CONSTRUCTOR = 'DERIVED_CONSTRUCTOR',\n\tBASE_CONSTRUCTOR = 'BASE_CONSTRUCTOR',\n\n}\n\nexport enum ArrowFunctionType {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC'\n}\n\n@Deserializer('Param')\nexport class Param extends AbstractExpressionNode {\n\tstatic fromJSON(node: Param, deserializer: NodeDeserializer): Param {\n\t\treturn new Param(\n\t\t\tdeserializer(node.identifier) as CanDeclareExpression,\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tstatic visit(node: Param, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.identifier);\n\t\tnode.defaultValue && visitNode(node.defaultValue);\n\t}\n\tconstructor(private identifier: CanDeclareExpression, private defaultValue?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetIdentifier() {\n\t\treturn this.identifier;\n\t}\n\tgetDefaultValue() {\n\t\treturn this.defaultValue;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.defaultValue?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.declareVariable?.(stack, 'function', value);\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.defaultValue ? [this.defaultValue] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.defaultValue?.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\tlet init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';\n\t\treturn this.identifier.toString() + init;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tidentifier: this.identifier.toJSON(),\n\t\t\tdefaultValue: this.defaultValue?.toJSON()\n\t\t};\n\t}\n}\n\nexport abstract class FunctionBaseExpression extends AbstractExpressionNode {\n\tprivate sharedVariables: Scope<any>[];\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tinitFunctionScope(stack: Stack) {\n\t\tconst scope = Scope.functionScope<object>();\n\t\tconst innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];\n\t\tinnerScopes.push(scope);\n\t\tinnerScopes.forEach(variableScope => stack.pushScope(variableScope));\n\t\treturn innerScopes;\n\t}\n\tclearFunctionScope(stack: Stack, innerScopes: Scope<any>[]) {\n\t\tstack.clearTo(innerScopes[0]);\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends FunctionBaseExpression {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tstatic visit(node: FunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tnode.id && visitNode(node.id);\n\t\tvisitNodeList(node.params);\n\t\tvisitNodeList(node.body);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode[],\n\t\tprotected kind: FunctionKind, protected id?: CanDeclareExpression,\n\t\tprotected rest?: boolean, protected generator?: boolean) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetKind() {\n\t\treturn this.kind;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tconst self = this;\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tfunc = async function (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tfunc = function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tfunc = async function* (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tfunc = function (this: any, ...args: any[]) {\n\t\t\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const statement of self.body) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.id?.declareVariable(stack, 'block', func);\n\t\treturn func;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string;\n\t\tswitch (this.kind) {\n\t\t\tcase FunctionKind.ASYNC:\n\t\t\t\tdeclare = 'async function'; break;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tdeclare = 'function*'; break;\n\t\t\tcase FunctionKind.ASYNC_GENERATOR:\n\t\t\t\tdeclare = 'async function*'; break;\n\t\t\tdefault:\n\t\t\tcase FunctionKind.NORMAL:\n\t\t\t\tdeclare = 'function'; break;\n\t\t}\n\t\treturn `${declare} ${this.id?.toString() || ''}(${this.params.map((param, index, array) => {\n\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\treturn '...' + param.toString();\n\t\t\t} else {\n\t\t\t\treturn param.toString();\n\t\t\t}\n\t\t}).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.map(statement => statement.toJSON()),\n\t\t\tkind: this.kind,\n\t\t\tid: this.id?.toJSON(),\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\n\t\t\tFunctionKind[node.kind],\n\t\t\tdeserializer(node.id!) as CanDeclareExpression,\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tstatic visit(node: FunctionDeclaration, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.id);\n\t\tvisitNodeList(node.params);\n\t\tvisitNodeList(node.body);\n\t}\n\tprotected id: CanDeclareExpression;\n\tconstructor(\n\t\tparams: ExpressionNode[], body: ExpressionNode[],\n\t\tkind: FunctionKind, id: CanDeclareExpression,\n\t\trest?: boolean, generator?: boolean) {\n\t\tsuper(params, body, kind, id, rest, generator);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends FunctionBaseExpression {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tArrowFunctionType[node.kind],\n\t\t\tnode.rest,\n\t\t\tnode.generator\n\t\t);\n\t}\n\tstatic visit(node: ArrowFunctionExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNodeList(node.params);\n\t\tArray.isArray(node.body)\n\t\t\t? visitNodeList(node.body)\n\t\t\t: visitNode(node.body);\n\t}\n\tconstructor(private params: ExpressionNode[], private body: ExpressionNode | ExpressionNode[],\n\t\tprivate kind: ArrowFunctionType, private rest?: boolean, private generator?: boolean) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetRest() {\n\t\treturn this.rest;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst limit = this.rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (this.rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tlet func: Function;\n\t\tswitch (this.kind) {\n\t\t\tcase ArrowFunctionType.ASYNC:\n\t\t\t\tfunc = async (...args: any[]) => {\n\t\t\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\t\t\tfor (const state of statements) {\n\t\t\t\t\t\tstate.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitRef.scopeType, awaitValue);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\t\t\tif (ContinueStatement.ContinueSymbol === result) {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (BreakStatement.BreakSymbol === result) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\tif (!Array.isArray(this.body)) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase ArrowFunctionType.NORMAL:\n\t\t\t\tfunc = (...args: any[]) => {\n\t\t\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\t\t\tfor (const statement of statements) {\n\t\t\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturn returnValue.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\tif (!Array.isArray(this.body)) {\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\treturn func;\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.kind === ArrowFunctionType.ASYNC ? 'async ' : '';\n\t\tif (this.params.length === 0) {\n\t\t\tstr += '()';\n\t\t} else if (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += '(';\n\t\t\tstr += this.params.map((param, index, array) => {\n\t\t\t\tif (index === array.length - 1 && this.rest) {\n\t\t\t\t\treturn '...' + param.toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn param.toString();\n\t\t\t\t}\n\t\t\t}).join(', ');\n\t\t\tstr += ')';\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tkind: this.kind,\n\t\t\trest: this.rest,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanFindScope, ExpressionEventPath, VisitNodeType, VisitNodeListType } 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,6 +8,7 @@ export declare class MemberExpression extends AbstractExpressionNode implements
8
8
  private computed;
9
9
  private optional;
10
10
  static fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression;
11
+ static visit(node: MemberExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
12
  constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean);
12
13
  getObject(): ExpressionNode;
13
14
  getProperty(): ExpressionNode;
@@ -13,6 +13,10 @@ let MemberExpression = MemberExpression_1 = class MemberExpression extends Abstr
13
13
  static fromJSON(node, deserializer) {
14
14
  return new MemberExpression_1(deserializer(node.object), deserializer(node.property), node.computed, node.optional);
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.object);
18
+ visitNode(node.property);
19
+ }
16
20
  getObject() {
17
21
  return this.object;
18
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"member.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/member.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode,\n\tCanFindScope, ExpressionEventPath\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';\n\n@Deserializer('MemberExpression')\nexport class MemberExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression {\n\t\treturn new MemberExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tconst objectScope = (this.object as ExpressionNode & CanFindScope).findScope<ScopeContext>(stack);\n\t\tlet propertyKey: PropertyKey;\n\t\tif (this.computed) {\n\t\t\tpropertyKey = this.property.get(stack);\n\t\t\tobjectScope.set(propertyKey, value);\n\t\t} else {\n\t\t\tstack.pushScope(objectScope);\n\t\t\tthis.property.set(stack, value);\n\t\t\tstack.clearTo(objectScope);\n\t\t}\n\t\treturn value;\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (objectRef === undefined || objectRef === null) {\n\t\t\tif (this.optional) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of ${objectRef}`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\treturn value;\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [this];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tif (this.computed) {\n\t\t\tconst objPath = this.object.dependencyPath(computed);\n\t\t\tconst propertyDependency = this.property.dependency(true);\n\t\t\tconst propertyDependencyPath = propertyDependency.map(exp => exp.dependencyPath(true));\n\n\t\t\tconst computedPath: ExpressionEventPath = {\n\t\t\t\tcomputed: true,\n\t\t\t\tpath: ':' + propertyDependencyPath.flatMap(paths => paths).map(prop => prop.path).join(':'),\n\t\t\t\tcomputedPath: propertyDependencyPath.flatMap(paths => paths.flatMap(prop => prop.computed ? prop.computedPath : [])),\n\t\t\t};\n\t\t\treturn objPath.concat(computedPath);\n\t\t}\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?.' : ''}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?.' : '.'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"member.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/member.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, CanFindScope,\n\tExpressionEventPath, VisitNodeType, VisitNodeListType\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';\n\n@Deserializer('MemberExpression')\nexport class MemberExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression {\n\t\treturn new MemberExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tstatic visit(node: MemberExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void {\n\t\tvisitNode(node.object);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\tconst objectScope = (this.object as ExpressionNode & CanFindScope).findScope<ScopeContext>(stack);\n\t\tlet propertyKey: PropertyKey;\n\t\tif (this.computed) {\n\t\t\tpropertyKey = this.property.get(stack);\n\t\t\tobjectScope.set(propertyKey, value);\n\t\t} else {\n\t\t\tstack.pushScope(objectScope);\n\t\t\tthis.property.set(stack, value);\n\t\t\tstack.clearTo(objectScope);\n\t\t}\n\t\treturn value;\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (objectRef === undefined || objectRef === null) {\n\t\t\tif (this.optional) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of ${objectRef}`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\treturn value;\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [this];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tif (this.computed) {\n\t\t\tconst objPath = this.object.dependencyPath(computed);\n\t\t\tconst propertyDependency = this.property.dependency(true);\n\t\t\tconst propertyDependencyPath = propertyDependency.map(exp => exp.dependencyPath(true));\n\n\t\t\tconst computedPath: ExpressionEventPath = {\n\t\t\t\tcomputed: true,\n\t\t\t\tpath: ':' + propertyDependencyPath.flatMap(paths => paths).map(prop => prop.path).join(':'),\n\t\t\t\tcomputedPath: propertyDependencyPath.flatMap(paths => paths.flatMap(prop => prop.computed ? prop.computedPath : [])),\n\t\t\t};\n\t\t\treturn objPath.concat(computedPath);\n\t\t}\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?.' : ''}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?.' : '.'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanDeclareExpression, ExpressionEventPath, VisitNodeType, VisitNodeListType } from '../expression.js';
2
2
  import type { Scope, ScopeType } from '../../scope/scope.js';
3
3
  import type { Stack } from '../../scope/stack.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
@@ -8,6 +8,7 @@ export declare class Property extends AbstractExpressionNode implements CanDecla
8
8
  protected value: CanDeclareExpression | ExpressionNode;
9
9
  protected kind: 'init' | 'get' | 'set';
10
10
  static fromJSON(node: Property, deserializer: NodeDeserializer): Property;
11
+ static visit(node: Property, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
11
12
  constructor(key: ExpressionNode, value: CanDeclareExpression | ExpressionNode, kind: 'init' | 'get' | 'set');
12
13
  getKey(): ExpressionNode;
13
14
  getValue(): ExpressionNode | CanDeclareExpression;
@@ -23,6 +24,7 @@ export declare class Property extends AbstractExpressionNode implements CanDecla
23
24
  export declare class ObjectExpression extends AbstractExpressionNode {
24
25
  private properties;
25
26
  static fromJSON(node: ObjectExpression, deserializer: NodeDeserializer): ObjectExpression;
27
+ static visit(node: ObjectExpression, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
26
28
  constructor(properties: Property[]);
27
29
  getProperties(): Property[];
28
30
  set(stack: Stack): void;
@@ -36,6 +38,7 @@ export declare class ObjectExpression extends AbstractExpressionNode {
36
38
  export declare class ObjectPattern extends AbstractExpressionNode implements CanDeclareExpression {
37
39
  private properties;
38
40
  static fromJSON(node: ObjectPattern, deserializer: NodeDeserializer): ObjectPattern;
41
+ static visit(node: ObjectPattern, visitNode: VisitNodeType, visitNodeList: VisitNodeListType): void;
39
42
  constructor(properties: (Property | RestElement)[]);
40
43
  getProperties(): (RestElement | Property)[];
41
44
  shareVariables(scopeList: Scope<any>[]): void;
@@ -13,6 +13,10 @@ let Property = Property_1 = class Property extends AbstractExpressionNode {
13
13
  static fromJSON(node, deserializer) {
14
14
  return new Property_1(deserializer(node.key), deserializer(node.value), node.kind);
15
15
  }
16
+ static visit(node, visitNode, visitNodeList) {
17
+ visitNode(node.key);
18
+ visitNode(node.value);
19
+ }
16
20
  getKey() {
17
21
  return this.key;
18
22
  }
@@ -82,6 +86,9 @@ let ObjectExpression = ObjectExpression_1 = class ObjectExpression extends Abstr
82
86
  static fromJSON(node, deserializer) {
83
87
  return new ObjectExpression_1(node.properties.map(deserializer));
84
88
  }
89
+ static visit(node, visitNode, visitNodeList) {
90
+ visitNodeList(node.properties);
91
+ }
85
92
  getProperties() {
86
93
  return this.properties;
87
94
  }
@@ -126,6 +133,9 @@ let ObjectPattern = ObjectPattern_1 = class ObjectPattern extends AbstractExpres
126
133
  static fromJSON(node, deserializer) {
127
134
  return new ObjectPattern_1(node.properties.map(deserializer));
128
135
  }
136
+ static visit(node, visitNode, visitNodeList) {
137
+ visitNodeList(node.properties);
138
+ }
129
139
  getProperties() {
130
140
  return this.properties;
131
141
  }