@ibyar/expressions 0.3.0 → 0.3.8

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 (147) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +79 -6
  3. package/api/abstract.d.ts +5 -7
  4. package/api/abstract.js +2 -5
  5. package/api/abstract.js.map +1 -1
  6. package/api/app/class.d.ts +99 -8
  7. package/api/app/class.js +250 -29
  8. package/api/app/class.js.map +1 -1
  9. package/api/app/program.d.ts +1 -2
  10. package/api/app/program.js +1 -4
  11. package/api/app/program.js.map +1 -1
  12. package/api/computing/call.d.ts +4 -4
  13. package/api/computing/call.js +20 -22
  14. package/api/computing/call.js.map +1 -1
  15. package/api/computing/new.d.ts +1 -2
  16. package/api/computing/new.js +4 -7
  17. package/api/computing/new.js.map +1 -1
  18. package/api/computing/rest.d.ts +16 -0
  19. package/api/computing/rest.js +40 -0
  20. package/api/computing/rest.js.map +1 -0
  21. package/api/computing/return.d.ts +1 -2
  22. package/api/computing/return.js +2 -5
  23. package/api/computing/return.js.map +1 -1
  24. package/api/computing/spread.d.ts +1 -2
  25. package/api/computing/spread.js +3 -9
  26. package/api/computing/spread.js.map +1 -1
  27. package/api/computing/throw.d.ts +3 -6
  28. package/api/computing/throw.js +5 -14
  29. package/api/computing/throw.js.map +1 -1
  30. package/api/definition/array.d.ts +12 -10
  31. package/api/definition/array.js +44 -16
  32. package/api/definition/array.js.map +1 -1
  33. package/api/definition/bind.d.ts +21 -0
  34. package/api/definition/bind.js +81 -0
  35. package/api/definition/bind.js.map +1 -0
  36. package/api/definition/comment.d.ts +1 -2
  37. package/api/definition/comment.js +1 -4
  38. package/api/definition/comment.js.map +1 -1
  39. package/api/definition/function.d.ts +12 -15
  40. package/api/definition/function.js +49 -58
  41. package/api/definition/function.js.map +1 -1
  42. package/api/definition/member.d.ts +8 -5
  43. package/api/definition/member.js +40 -31
  44. package/api/definition/member.js.map +1 -1
  45. package/api/definition/object.d.ts +16 -17
  46. package/api/definition/object.js +24 -16
  47. package/api/definition/object.js.map +1 -1
  48. package/api/definition/statement.d.ts +1 -2
  49. package/api/definition/statement.js +2 -5
  50. package/api/definition/statement.js.map +1 -1
  51. package/api/definition/values.d.ts +12 -11
  52. package/api/definition/values.js +17 -12
  53. package/api/definition/values.js.map +1 -1
  54. package/api/expression.d.ts +8 -4
  55. package/api/expression.js.map +1 -1
  56. package/api/index.d.ts +7 -6
  57. package/api/index.js +7 -6
  58. package/api/index.js.map +1 -1
  59. package/api/module/export.d.ts +1 -2
  60. package/api/module/export.js +1 -4
  61. package/api/module/export.js.map +1 -1
  62. package/api/module/import.d.ts +1 -2
  63. package/api/module/import.js +1 -4
  64. package/api/module/import.js.map +1 -1
  65. package/api/module/module.d.ts +1 -2
  66. package/api/module/module.js +2 -5
  67. package/api/module/module.js.map +1 -1
  68. package/api/operators/assignment.js +2 -2
  69. package/api/operators/assignment.js.map +1 -1
  70. package/api/operators/await.d.ts +1 -2
  71. package/api/operators/await.js +2 -5
  72. package/api/operators/await.js.map +1 -1
  73. package/api/operators/binary.js +4 -4
  74. package/api/operators/binary.js.map +1 -1
  75. package/api/operators/chaining.d.ts +9 -13
  76. package/api/operators/chaining.js +14 -48
  77. package/api/operators/chaining.js.map +1 -1
  78. package/api/operators/comma.d.ts +1 -2
  79. package/api/operators/comma.js +2 -5
  80. package/api/operators/comma.js.map +1 -1
  81. package/api/operators/grouping.d.ts +1 -2
  82. package/api/operators/grouping.js +2 -5
  83. package/api/operators/grouping.js.map +1 -1
  84. package/api/operators/logical.js.map +1 -1
  85. package/api/operators/pipeline.d.ts +4 -5
  86. package/api/operators/pipeline.js +23 -25
  87. package/api/operators/pipeline.js.map +1 -1
  88. package/api/operators/ternary.d.ts +1 -2
  89. package/api/operators/ternary.js +1 -4
  90. package/api/operators/ternary.js.map +1 -1
  91. package/api/operators/unary.d.ts +1 -2
  92. package/api/operators/unary.js +2 -5
  93. package/api/operators/unary.js.map +1 -1
  94. package/api/operators/update.d.ts +1 -2
  95. package/api/operators/update.js +2 -5
  96. package/api/operators/update.js.map +1 -1
  97. package/api/statement/{controlflow → control}/block.d.ts +1 -2
  98. package/api/statement/{controlflow → control}/block.js +2 -5
  99. package/api/statement/control/block.js.map +1 -0
  100. package/api/statement/{controlflow → control}/empty.d.ts +1 -2
  101. package/api/statement/{controlflow → control}/empty.js +1 -4
  102. package/api/statement/control/empty.js.map +1 -0
  103. package/api/statement/{controlflow → control}/if.d.ts +1 -2
  104. package/api/statement/{controlflow → control}/if.js +2 -5
  105. package/api/statement/control/if.js.map +1 -0
  106. package/api/statement/{controlflow → control}/switch.d.ts +2 -4
  107. package/api/statement/{controlflow → control}/switch.js +5 -11
  108. package/api/statement/control/switch.js.map +1 -0
  109. package/api/statement/{controlflow → control}/terminate.d.ts +1 -2
  110. package/api/statement/{controlflow → control}/terminate.js +1 -4
  111. package/api/statement/control/terminate.js.map +1 -0
  112. package/api/statement/declarations/declares.d.ts +13 -14
  113. package/api/statement/declarations/declares.js +10 -9
  114. package/api/statement/declarations/declares.js.map +1 -1
  115. package/api/statement/iterations/for.d.ts +14 -14
  116. package/api/statement/iterations/for.js +12 -24
  117. package/api/statement/iterations/for.js.map +1 -1
  118. package/api/statement/iterations/while.d.ts +2 -4
  119. package/api/statement/iterations/while.js +4 -10
  120. package/api/statement/iterations/while.js.map +1 -1
  121. package/package.json +18 -4
  122. package/scope/scope.d.ts +23 -3
  123. package/scope/scope.js +67 -1
  124. package/scope/scope.js.map +1 -1
  125. package/scope/stack.d.ts +14 -3
  126. package/scope/stack.js +61 -1
  127. package/scope/stack.js.map +1 -1
  128. package/v8/app.js.map +1 -1
  129. package/v8/nodes.d.ts +1 -2
  130. package/v8/nodes.js +2 -11
  131. package/v8/nodes.js.map +1 -1
  132. package/v8/parser.d.ts +5 -4
  133. package/v8/parser.js +165 -69
  134. package/v8/parser.js.map +1 -1
  135. package/v8/stream.js +20 -6
  136. package/v8/stream.js.map +1 -1
  137. package/v8/token.d.ts +3 -0
  138. package/v8/token.js +9 -0
  139. package/v8/token.js.map +1 -1
  140. package/api/operators/destruct.d.ts +0 -19
  141. package/api/operators/destruct.js +0 -95
  142. package/api/operators/destruct.js.map +0 -1
  143. package/api/statement/controlflow/block.js.map +0 -1
  144. package/api/statement/controlflow/empty.js.map +0 -1
  145. package/api/statement/controlflow/if.js.map +0 -1
  146. package/api/statement/controlflow/switch.js.map +0 -1
  147. package/api/statement/controlflow/terminate.js.map +0 -1
@@ -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 { ExpressionNode, NodeDeserializer } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise, ReturnValue } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { BreakStatement, ContinueStatement } from '../statement/controlflow/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}\nexport enum ArrowFunctionType {\n\tNORMAL = 'NORMAL',\n\tASYNC = 'ASYNC'\n}\n\n@Deserializer('Paramter')\nexport class Paramter extends AbstractExpressionNode {\n\tstatic fromJSON(node: Paramter, deserializer: NodeDeserializer): Paramter {\n\t\treturn new Paramter(\n\t\t\tdeserializer(node.identifier),\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tconstructor(private identifier: ExpressionNode, 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\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.set(stack, value || this.defaultValue?.get(stack));\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Paramter#get() has no implementation.');\n\t}\n\tentry(): string[] {\n\t\treturn this.identifier.entry().concat(this.defaultValue?.entry() || []);\n\t}\n\tevent(): string[] {\n\t\treturn this.identifier.event().concat(this.defaultValue?.event() || []);\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\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends AbstractExpressionNode {\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?: ExpressionNode,\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('FunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParamter(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: ThisType<any>, ...args: any[]) {\n\t\t\t\t\tstack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\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\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tstack.popScope();\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\tstack.popScope();\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase FunctionKind.GENERATOR:\n\t\t\t\tfunc = function* (this: ThisType<any>, ...args: any[]) {\n\t\t\t\t\tstack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.popScope();\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\tstack.popScope();\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: ThisType<any>, ...args: any[]) {\n\t\t\t\t\tstack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\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\tstack.popScope();\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\tstack.popScope();\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\tstack.popScope();\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: ThisType<any>, ...args: any[]) {\n\t\t\t\t\tstack.pushFunctionScope();\n\t\t\t\t\tstack.declareVariable('function', 'this', this);\n\t\t\t\t\tself.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.popScope();\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\tstack.popScope();\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tif (this.id) {\n\t\t\tthis.id.set(stack, func);\n\t\t}\n\t\treturn func;\n\t}\n\tentry(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.entry()),\n\t\t\t/** remove for now, should return only object not defined in this function scope */\n\t\t\t// ...this.statements.flatMap(statement => statement.entry())\n\t\t];\n\t}\n\tevent(): string[] {\n\t\t// return this.statements.flatMap(item => item.event());\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.event()),\n\t\t\t/** remove for now, should return only object not defined in this function scope */\n\t\t\t// ...this.statements.flatMap(statement => statement.entry())\n\t\t];\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!),\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: ExpressionNode,\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 AbstractExpressionNode {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\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[],\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 setParamter(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\tstack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\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\tstack.popScope();\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\tstack.popScope();\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\tstack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParamter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.popScope();\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\tstack.popScope();\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\treturn func;\n\t}\n\tentry(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.entry()),\n\t\t\t/** remove for now, should return only object not defined in this function scope */\n\t\t\t// ...this.statements.flatMap(statement => statement.entry())\n\t\t];\n\t}\n\tevent(): string[] {\n\t\t// return this.statements.flatMap(statement => statement.event());\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.event()),\n\t\t\t/** remove for now, should return only object not defined in this function scope */\n\t\t\t// ...this.statements.flatMap(statement => statement.entry())\n\t\t];\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: this.body.map(item => item.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":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtF,MAAM,CAAN,IAAY,YAmBX;AAnBD,WAAY,YAAY;IACvB,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,uCAAuB,CAAA;IACvB,mDAAmC,CAAA;IAEnC,mCAAmB,CAAA;IACnB,+CAA+B,CAAA;IAC/B,uDAAuC,CAAA;IACvC,mEAAmD,CAAA;IAEnD,iDAAiC,CAAA;IACjC,6DAA6C,CAAA;IAC7C,qEAAqD,CAAA;IACrD,iFAAiE,CAAA;IAEjE,2DAA2C,CAAA;IAC3C,qDAAqC,CAAA;AAEtC,CAAC,EAnBW,YAAY,KAAZ,YAAY,QAmBvB;AACD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC5B,sCAAiB,CAAA;IACjB,oCAAe,CAAA;AAChB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAGD,IAAa,KAAK,aAAlB,MAAa,KAAM,SAAQ,sBAAsB;IAOhD,YAAoB,UAA0B,EAAU,YAA6B;QACpF,KAAK,EAAE,CAAC;QADW,eAAU,GAAV,UAAU,CAAgB;QAAU,iBAAY,GAAZ,YAAY,CAAiB;IAErF,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAW,EAAE,YAA8B;QAC1D,OAAO,IAAI,OAAK,CACf,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAC1E,CAAC;IACH,CAAC;IAID,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IACD,eAAe;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,QAAQ;QACP,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1C,CAAC;IACD,MAAM;QACL,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;SACzC,CAAC;IACH,CAAC;CACD,CAAA;AAnCY,KAAK;IADjB,YAAY,CAAC,OAAO,CAAC;;GACT,KAAK,CAmCjB;SAnCY,KAAK;AAsClB,IAAa,kBAAkB,0BAA/B,MAAa,kBAAmB,SAAQ,sBAAsB;IAW7D,YACW,MAAwB,EAAY,IAAsB,EAC1D,IAAkB,EAAY,EAAyB,EACvD,IAAc,EAAY,SAAmB;QACvD,KAAK,EAAE,CAAC;QAHE,WAAM,GAAN,MAAM,CAAkB;QAAY,SAAI,GAAJ,IAAI,CAAkB;QAC1D,SAAI,GAAJ,IAAI,CAAc;QAAY,OAAE,GAAF,EAAE,CAAuB;QACvD,SAAI,GAAJ,IAAI,CAAU;QAAY,cAAS,GAAT,SAAS,CAAU;IAExD,CAAC;IAfD,MAAM,CAAC,QAAQ,CAAC,IAAwB,EAAE,YAA8B;QACvE,OAAO,IAAI,oBAAkB,CAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAe,CAAC,CAAC,CAAC,KAAK,CAAC,EACtD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IAOD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,KAAK;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpE,CAAC;IACO,YAAY,CAAC,KAAY,EAAE,IAAW;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,IAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,YAAY,CAAC,KAAK;gBACtB,IAAI,GAAG,KAAK,WAAsB,GAAG,IAAW;oBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,WAAW,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,WAAW,CAAC;6BACnB;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,KAAK,YAAY,CAAC,SAAS;gBAC1B,IAAI,GAAG,QAAQ,CAAC,EAAa,GAAG,IAAW;oBAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,KAAK,YAAY,CAAC,eAAe;gBAChC,IAAI,GAAG,KAAK,SAAS,CAAC,EAAa,GAAG,IAAW;oBAChD,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC;6BACjC;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;YACP,QAAQ;YACR,KAAK,YAAY,CAAC,MAAM;gBACvB,IAAI,GAAG,UAAqB,GAAG,IAAW;oBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM;SACP;QACD,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM;QACL,OAAO;YACN,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC;IACD,QAAQ;QACP,IAAI,OAAe,CAAC;QACpB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,YAAY,CAAC,KAAK;gBACtB,OAAO,GAAG,gBAAgB,CAAC;gBAAC,MAAM;YACnC,KAAK,YAAY,CAAC,SAAS;gBAC1B,OAAO,GAAG,WAAW,CAAC;gBAAC,MAAM;YAC9B,KAAK,YAAY,CAAC,eAAe;gBAChC,OAAO,GAAG,iBAAiB,CAAC;gBAAC,MAAM;YACpC,QAAQ;YACR,KAAK,YAAY,CAAC,MAAM;gBACvB,OAAO,GAAG,UAAU,CAAC;gBAAC,MAAM;SAC7B;QACD,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACzF,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC5C,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;aAChC;iBAAM;gBACN,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;aACxB;QACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACH,CAAC;CACD,CAAA;AAvNY,kBAAkB;IAD9B,YAAY,CAAC,oBAAoB,CAAC;;GACtB,kBAAkB,CAuN9B;SAvNY,kBAAkB;AA0N/B,IAAa,mBAAmB,2BAAhC,MAAa,mBAAoB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,IAAyB,EAAE,YAA8B;QACxE,OAAO,IAAI,qBAAmB,CAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACvB,YAAY,CAAC,IAAI,CAAC,EAAG,CAAyB,EAC9C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IACD,YACC,MAAwB,EAAE,IAAsB,EAChD,IAAkB,EAAE,EAAwB,EAC5C,IAAc,EAAE,SAAmB;QACnC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;CACD,CAAA;AAjBY,mBAAmB;IAD/B,YAAY,CAAC,qBAAqB,CAAC;;GACvB,mBAAmB,CAiB/B;SAjBY,mBAAmB;AAqBhC,IAAa,uBAAuB,+BAApC,MAAa,uBAAwB,SAAQ,sBAAsB;IAUlE,YAAoB,MAAwB,EAAU,IAAsB,EACnE,IAAuB,EAAU,IAAc,EAAU,SAAmB;QACpF,KAAK,EAAE,CAAC;QAFW,WAAM,GAAN,MAAM,CAAkB;QAAU,SAAI,GAAJ,IAAI,CAAkB;QACnE,SAAI,GAAJ,IAAI,CAAmB;QAAU,SAAI,GAAJ,IAAI,CAAU;QAAU,cAAS,GAAT,SAAS,CAAU;IAErF,CAAC;IAZD,MAAM,CAAC,QAAQ,CAAC,IAA6B,EAAE,YAA8B;QAC5E,OAAO,IAAI,yBAAuB,CACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CACd,CAAC;IACH,CAAC;IAKD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAe;QAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACzE,CAAC;IACO,YAAY,CAAC,KAAY,EAAE,IAAW;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IACD,GAAG,CAAC,KAAY;QACf,IAAI,IAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,iBAAiB,CAAC,KAAK;gBAC3B,IAAI,GAAG,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;oBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAGxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;gCAC1C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gCAC1C,IAAI,QAAQ,CAAC,eAAe,EAAE;oCAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iCACrE;qCAAM;oCACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iCACrC;6BACD;4BACD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBAC7B;6BACI,IAAI,KAAK,CAAC,qBAAqB,EAAE;4BACrC,IAAI,KAAK,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,EAAE;gCAChE,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCAClE,IAAI,iBAAiB,CAAC,cAAc,KAAK,MAAM,EAAE;oCAChD,SAAS;iCACT;qCACI,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM,EAAE;oCAC/C,MAAM;iCACN;qCACI,IAAI,MAAM,YAAY,WAAW,EAAE;oCACvC,WAAW,GAAG,MAAM,CAAC;oCACrB,MAAM;iCACN;6BACD;4BACD,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;yBACxC;wBACD,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,IAAI,WAAW,YAAY,YAAY,EAAE;gCACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gCACrB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC;6BACjC;yBACD;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC3B,OAAO,WAAW,CAAC;qBACnB;gBACF,CAAC,CAAC;gBACF,MAAM;YACP,QAAQ;YACR,KAAK,iBAAiB,CAAC,MAAM;gBAC5B,IAAI,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;oBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAGxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,IAAI,WAAgB,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC9B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,WAAW,YAAY,WAAW,EAAE;4BACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO,WAAW,CAAC,KAAK,CAAC;yBACzB;qBACD;oBACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC3B,OAAO,WAAW,CAAC;qBACnB;gBACF,CAAC,CAAC;gBACF,MAAM;SACP;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM;QACL,OAAO;YACN,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC/C,CAAC;IACH,CAAC;IACD,QAAQ;QACP,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,GAAG,IAAI,IAAI,CAAC;SACZ;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACjC;aAAM;YACN,GAAG,IAAI,GAAG,CAAC;YACX,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9C,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC5C,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;iBAChC;qBAAM;oBACN,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;iBACxB;YACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,GAAG,IAAI,GAAG,CAAC;SACX;QACD,GAAG,IAAI,MAAM,CAAC;QACd,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACH,CAAC;CACD,CAAA;AApJY,uBAAuB;IADnC,YAAY,CAAC,yBAAyB,CAAC;;GAC3B,uBAAuB,CAoJnC;SApJY,uBAAuB","sourcesContent":["import type { CanDeclareExpression, ExpressionNode, NodeDeserializer } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode, AwaitPromise, ReturnValue } 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}\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),\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tconstructor(private identifier: ExpressionNode, 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\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.set(stack, value || this.defaultValue?.get(stack));\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tevents(): string[] {\n\t\treturn this.identifier.events().concat(this.defaultValue?.events() || []);\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\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends AbstractExpressionNode {\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('FunctionExpression#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 scope = stack.pushFunctionScope();\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 state of self.body) {\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\treturnValue = await returnValue.promise;\n\t\t\t\t\t\t\t\tstack.clearTo(scope);\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\tstack.clearTo(scope);\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 scope = stack.pushFunctionScope();\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 state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\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\tstack.clearTo(scope);\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 scope = stack.pushFunctionScope();\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 state of self.body) {\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\tstack.clearTo(scope);\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\tstack.clearTo(scope);\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\tstack.clearTo(scope);\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 scope = stack.pushFunctionScope();\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 state of self.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\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\tstack.clearTo(scope);\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\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\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 AbstractExpressionNode {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tnode.body.map(deserializer),\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[],\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 scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\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\tstack.clearTo(scope);\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\tstack.clearTo(scope);\n\t\t\t\t\tif (this.body.length === 1) {\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 scope = stack.pushFunctionScope();\n\t\t\t\t\t// should find a way to get the value of this without interfering with the ArrowFunctionNode implementation\n\t\t\t\t\t// stack.declareVariable('function', 'this', this);\n\t\t\t\t\tthis.setParameter(stack, args);\n\t\t\t\t\tlet returnValue: any;\n\t\t\t\t\tfor (const state of this.body) {\n\t\t\t\t\t\treturnValue = state.get(stack);\n\t\t\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\t\t\tstack.clearTo(scope);\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\tstack.clearTo(scope);\n\t\t\t\t\tif (this.body.length === 1) {\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\tevents(): string[] {\n\t\treturn [\n\t\t\t...this.params.flatMap(param => param.events()),\n\t\t];\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: this.body.map(item => item.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,18 +1,21 @@
1
- import type { NodeDeserializer, ExpressionNode } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanFindScope } from '../expression.js';
2
+ import type { Scope } from '../../scope/scope.js';
2
3
  import type { Stack } from '../../scope/stack.js';
3
4
  import { AbstractExpressionNode } from '../abstract.js';
4
- export declare class MemberExpression extends AbstractExpressionNode {
5
+ export declare class MemberExpression extends AbstractExpressionNode implements CanFindScope {
5
6
  protected object: ExpressionNode;
6
7
  protected property: ExpressionNode;
7
8
  private computed;
9
+ private optional;
8
10
  static fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression;
9
- constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean);
11
+ constructor(object: ExpressionNode, property: ExpressionNode, computed: boolean, optional?: boolean);
10
12
  getObject(): ExpressionNode;
11
13
  getProperty(): ExpressionNode;
12
14
  set(stack: Stack, value: any): any;
13
15
  get(stack: Stack, thisContext?: any): any;
14
- event(parent?: string): string[];
15
- entry(): string[];
16
+ findScope<T extends object>(stack: Stack): Scope<T>;
17
+ findScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;
18
+ events(parent?: string): string[];
16
19
  toString(): string;
17
20
  toJson(): object;
18
21
  }
@@ -3,14 +3,15 @@ import { __decorate, __metadata } from "tslib";
3
3
  import { Deserializer } from '../deserialize/deserialize.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
5
5
  let MemberExpression = MemberExpression_1 = class MemberExpression extends AbstractExpressionNode {
6
- constructor(object, property, computed) {
6
+ constructor(object, property, computed, optional = false) {
7
7
  super();
8
8
  this.object = object;
9
9
  this.property = property;
10
10
  this.computed = computed;
11
+ this.optional = optional;
11
12
  }
12
13
  static fromJSON(node, deserializer) {
13
- return new MemberExpression_1(deserializer(node.object), deserializer(node.property), node.computed);
14
+ return new MemberExpression_1(deserializer(node.object), deserializer(node.property), node.computed, node.optional);
14
15
  }
15
16
  getObject() {
16
17
  return this.object;
@@ -19,62 +20,70 @@ let MemberExpression = MemberExpression_1 = class MemberExpression extends Abstr
19
20
  return this.property;
20
21
  }
21
22
  set(stack, value) {
22
- const objectContext = this.object.get(stack);
23
+ const objectScope = this.object.findScope(stack);
24
+ let propertyKey;
23
25
  if (this.computed) {
24
- const propertyKey = this.property.get(stack);
25
- return objectContext[propertyKey] = value;
26
+ propertyKey = this.property.get(stack);
27
+ objectScope.set(propertyKey, value);
26
28
  }
27
- const objectScope = stack.pushBlockScopeFor(objectContext);
28
- const result = this.property.set(stack, value);
29
- stack.clearTo(objectScope);
30
- return result;
29
+ else {
30
+ stack.pushScope(objectScope);
31
+ this.property.set(stack, value);
32
+ stack.clearTo(objectScope);
33
+ }
34
+ return value;
31
35
  }
32
36
  get(stack, thisContext) {
33
- if (this.computed) {
34
- const thisRef = thisContext ?? this.object.get(stack);
35
- const value = thisRef[this.property.get(stack)];
36
- if (typeof value === 'function') {
37
- return value.bind(thisRef);
37
+ const objectRef = thisContext ?? this.object.get(stack);
38
+ if (objectRef === undefined || objectRef === null) {
39
+ if (this.optional) {
40
+ return;
38
41
  }
39
- return value;
42
+ throw new TypeError(`Cannot read property '${this.property.toString()}' of ${objectRef}`);
43
+ }
44
+ let value;
45
+ if (this.computed) {
46
+ value = objectRef[this.property.get(stack)];
40
47
  }
41
- const thisRef = thisContext ?? this.object.get(stack);
42
- const value = this.property.get(stack, thisRef);
43
- if (typeof value === 'function') {
44
- return value.bind(thisRef);
48
+ else {
49
+ value = this.property.get(stack, objectRef);
45
50
  }
46
51
  return value;
47
52
  }
48
- event(parent) {
53
+ findScope(stack, objectScope) {
54
+ if (!objectScope) {
55
+ objectScope = this.object.findScope(stack);
56
+ }
57
+ return this.property.findScope(stack, objectScope);
58
+ }
59
+ events(parent) {
49
60
  if (this.computed) {
50
- parent ?? (parent = '');
51
- parent = `${parent}${this.object.event(parent)}`;
61
+ parent ??= '';
62
+ parent = `${parent}${this.object.events(parent)}`;
52
63
  return [parent, `${parent}[${this.property.toString()}]`];
53
64
  }
54
- parent || (parent = '');
65
+ parent ||= '';
55
66
  parent += this.object.toString() + '.';
56
- return [...this.object.event(), ...this.property.event(parent)];
57
- }
58
- entry() {
59
- return this.object.entry();
67
+ return [...this.object.events(), ...this.property.events(parent)];
60
68
  }
61
69
  toString() {
62
70
  if (this.computed) {
63
- return `${this.object.toString()}[${this.property.toString()}]`;
71
+ return `${this.object.toString()}${this.optional ? '?.' : ''}[${this.property.toString()}]`;
64
72
  }
65
- return `${this.object.toString()}.${this.property.toString()}`;
73
+ return `${this.object.toString()}${this.optional ? '?.' : '.'}${this.property.toString()}`;
66
74
  }
67
75
  toJson() {
68
76
  return {
69
77
  object: this.object.toJSON(),
70
78
  property: this.property.toJSON(),
71
- computed: this.computed
79
+ computed: this.computed,
80
+ optional: this.optional
72
81
  };
73
82
  }
74
83
  };
75
84
  MemberExpression = MemberExpression_1 = __decorate([
76
85
  Deserializer('MemberExpression'),
77
- __metadata("design:paramtypes", [Object, Object, Boolean])
86
+ __metadata("design:paramtypes", [Object, Object, Boolean, Boolean])
78
87
  ], MemberExpression);
79
88
  export { MemberExpression };
80
89
  //# sourceMappingURL=member.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"member.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/member.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,IAAa,gBAAgB,wBAA7B,MAAa,gBAAiB,SAAQ,sBAAsB;IAI3D,YAAsB,MAAsB,EAAY,QAAwB,EAAU,QAAiB;QAC1G,KAAK,EAAE,CAAC;QADa,WAAM,GAAN,MAAM,CAAgB;QAAY,aAAQ,GAAR,QAAQ,CAAgB;QAAU,aAAQ,GAAR,QAAQ,CAAS;IAE3G,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,IAAsB,EAAE,YAA8B;QACrE,OAAO,IAAI,kBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpG,CAAC;IAID,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,aAAa,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;SAC1C;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,WAAiB;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAChC,OAAkB,KAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACvC;YACD,OAAO,KAAK,CAAC;SACb;QACD,MAAM,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAChC,OAAkB,KAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,KAAK,CAAC,MAAe;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,KAAN,MAAM,GAAK,EAAE,EAAC;YACd,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SAC1D;QACD,MAAM,KAAN,MAAM,GAAK,EAAE,EAAC;QACd,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,KAAK;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,QAAQ;QACP,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;SAChE;QACD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChE,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC;IACH,CAAC;CACD,CAAA;AAlEY,gBAAgB;IAD5B,YAAY,CAAC,kBAAkB,CAAC;;GACpB,gBAAgB,CAkE5B;SAlEY,gBAAgB","sourcesContent":["import type { NodeDeserializer, ExpressionNode } from '../expression.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 {\n\tstatic fromJSON(node: MemberExpression, deserializer: NodeDeserializer): MemberExpression {\n\t\treturn new MemberExpression(deserializer(node.object), deserializer(node.property), node.computed);\n\t}\n\tconstructor(protected object: ExpressionNode, protected property: ExpressionNode, private computed: boolean) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tconst objectContext = this.object.get(stack);\n\t\tif (this.computed) {\n\t\t\tconst propertyKey = this.property.get(stack);\n\t\t\treturn objectContext[propertyKey] = value;\n\t\t}\n\t\tconst objectScope = stack.pushBlockScopeFor(objectContext);\n\t\tconst result = this.property.set(stack, value);\n\t\tstack.clearTo(objectScope);\n\t\treturn result;\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tif (this.computed) {\n\t\t\tconst thisRef = thisContext ?? this.object.get(stack);\n\t\t\tconst value = thisRef[this.property.get(stack)];\n\t\t\tif (typeof value === 'function') {\n\t\t\t\treturn (<Function>value).bind(thisRef);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tconst thisRef = thisContext ?? this.object.get(stack);\n\t\tconst value = this.property.get(stack, thisRef);\n\t\tif (typeof value === 'function') {\n\t\t\treturn (<Function>value).bind(thisRef);\n\t\t}\n\t\treturn value;\n\t}\n\tevent(parent?: string): string[] {\n\t\tif (this.computed) {\n\t\t\tparent ??= '';\n\t\t\tparent = `${parent}${this.object.event(parent)}`;\n\t\t\treturn [parent, `${parent}[${this.property.toString()}]`];\n\t\t}\n\t\tparent ||= '';\n\t\tparent += this.object.toString() + '.';\n\t\treturn [...this.object.event(), ...this.property.event(parent)];\n\t}\n\tentry(): string[] {\n\t\treturn this.object.entry();\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}.${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};\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 { NodeDeserializer, ExpressionNode, CanFindScope } 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@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\tset(stack: Stack, value: any) {\n\t\tconst objectScope = (this.object as ExpressionNode & CanFindScope).findScope(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\tevents(parent?: string): string[] {\n\t\tif (this.computed) {\n\t\t\tparent ??= '';\n\t\t\tparent = `${parent}${this.object.events(parent)}`;\n\t\t\treturn [parent, `${parent}[${this.property.toString()}]`];\n\t\t}\n\t\tparent ||= '';\n\t\tparent += this.object.toString() + '.';\n\t\treturn [...this.object.events(), ...this.property.events(parent)];\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,45 +1,44 @@
1
- import type { NodeDeserializer, ExpressionNode, CanDeclareVariable } from '../expression.js';
1
+ import type { NodeDeserializer, ExpressionNode, CanDeclareExpression } from '../expression.js';
2
2
  import type { Stack } from '../../scope/stack.js';
3
3
  import type { ScopeType } from '../../scope/scope.js';
4
4
  import { AbstractExpressionNode } from '../abstract.js';
5
- export declare class Property extends AbstractExpressionNode implements CanDeclareVariable {
5
+ import { RestElement } from '../computing/rest.js';
6
+ export declare class Property extends AbstractExpressionNode implements CanDeclareExpression {
6
7
  protected key: ExpressionNode;
7
- protected value: ExpressionNode;
8
+ protected value: CanDeclareExpression | ExpressionNode;
8
9
  protected kind: 'init' | 'get' | 'set';
9
10
  static fromJSON(node: Property, deserializer: NodeDeserializer): Property;
10
- constructor(key: ExpressionNode, value: ExpressionNode, kind: 'init' | 'get' | 'set');
11
+ constructor(key: ExpressionNode, value: CanDeclareExpression | ExpressionNode, kind: 'init' | 'get' | 'set');
11
12
  getKey(): ExpressionNode;
12
- getValue(): ExpressionNode;
13
+ getValue(): ExpressionNode | CanDeclareExpression;
13
14
  set(stack: Stack, value: any): void;
14
15
  get(stack: Stack, thisContext: ThisType<any>): any;
15
16
  declareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void;
16
- entry(): string[];
17
- event(): string[];
17
+ events(): string[];
18
18
  toString(): string;
19
19
  toJson(): object;
20
20
  }
21
21
  export declare class ObjectExpression extends AbstractExpressionNode {
22
22
  private properties;
23
23
  static fromJSON(node: ObjectExpression, deserializer: NodeDeserializer): ObjectExpression;
24
- constructor(properties: ExpressionNode[]);
25
- getProperties(): ExpressionNode[];
24
+ constructor(properties: Property[]);
25
+ getProperties(): Property[];
26
26
  set(stack: Stack): void;
27
27
  get(stack: Stack): {};
28
- entry(): string[];
29
- event(parent?: string): string[];
28
+ events(parent?: string): string[];
30
29
  toString(): string;
31
30
  toJson(): object;
32
31
  }
33
- export declare class ObjectPattern extends AbstractExpressionNode implements CanDeclareVariable {
32
+ export declare class ObjectPattern extends AbstractExpressionNode implements CanDeclareExpression {
34
33
  private properties;
35
34
  static fromJSON(node: ObjectPattern, deserializer: NodeDeserializer): ObjectPattern;
36
- constructor(properties: ExpressionNode[]);
37
- getProperties(): ExpressionNode[];
35
+ constructor(properties: (Property | RestElement)[]);
36
+ getProperties(): (RestElement | Property)[];
38
37
  set(stack: Stack, objectValue: any): void;
39
- get(scopeProvider: Stack, objectValue: any): void;
38
+ get(scopeProvider: Stack): void;
40
39
  declareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void;
41
- entry(): string[];
42
- event(parent?: string): string[];
40
+ private getFromObject;
41
+ events(parent?: string): string[];
43
42
  toString(): string;
44
43
  toJson(): object;
45
44
  }
@@ -2,6 +2,7 @@ var Property_1, ObjectExpression_1, ObjectPattern_1;
2
2
  import { __decorate, __metadata } from "tslib";
3
3
  import { AbstractExpressionNode } from '../abstract.js';
4
4
  import { Deserializer } from '../deserialize/deserialize.js';
5
+ import { RestElement } from '../computing/rest.js';
5
6
  let Property = Property_1 = class Property extends AbstractExpressionNode {
6
7
  constructor(key, value, kind) {
7
8
  super();
@@ -48,11 +49,8 @@ let Property = Property_1 = class Property extends AbstractExpressionNode {
48
49
  const propertyValue = objectValue[propertyName];
49
50
  this.value.declareVariable(stack, scopeType, propertyValue);
50
51
  }
51
- entry() {
52
- return this.key.entry().concat(this.value.entry());
53
- }
54
- event() {
55
- return this.key.event().concat(this.value.event());
52
+ events() {
53
+ return this.key.events().concat(this.value.events());
56
54
  }
57
55
  toString() {
58
56
  return `${this.key.toString()}: ${this.value.toString()}`;
@@ -91,11 +89,8 @@ let ObjectExpression = ObjectExpression_1 = class ObjectExpression extends Abstr
91
89
  }
92
90
  return newObject;
93
91
  }
94
- entry() {
95
- return this.properties.flatMap(property => property.entry());
96
- }
97
- event(parent) {
98
- return this.properties.flatMap(property => property.event());
92
+ events(parent) {
93
+ return this.properties.flatMap(property => property.events());
99
94
  }
100
95
  toString() {
101
96
  return `{ ${this.properties.map(item => item.toString()).join(', ')} }`;
@@ -125,19 +120,32 @@ let ObjectPattern = ObjectPattern_1 = class ObjectPattern extends AbstractExpres
125
120
  set(stack, objectValue) {
126
121
  throw new Error('ObjectPattern#set() has no implementation.');
127
122
  }
128
- get(scopeProvider, objectValue) {
129
- this.declareVariable(scopeProvider, 'block', objectValue);
123
+ get(scopeProvider) {
124
+ throw new Error('ObjectPattern#get() has no implementation.');
130
125
  }
131
126
  declareVariable(stack, scopeType, objectValue) {
132
127
  for (const property of this.properties) {
128
+ if (property instanceof RestElement) {
129
+ objectValue = this.getFromObject(stack, objectValue);
130
+ }
133
131
  property.declareVariable(stack, scopeType, objectValue);
134
132
  }
135
133
  }
136
- entry() {
137
- return this.properties.flatMap(property => property.entry());
134
+ getFromObject(stack, objectValue) {
135
+ const keys = [];
136
+ keys.push(...Object.keys(objectValue));
137
+ keys.push(...Object.getOwnPropertySymbols(objectValue));
138
+ const restObject = {};
139
+ const context = stack.lastScope().getContext();
140
+ for (const key of keys) {
141
+ if (!(key in context)) {
142
+ restObject[key] = objectValue[key];
143
+ }
144
+ }
145
+ return restObject;
138
146
  }
139
- event(parent) {
140
- return this.properties.flatMap(property => property.event());
147
+ events(parent) {
148
+ return this.properties.flatMap(property => property.events());
141
149
  }
142
150
  toString() {
143
151
  return `{ ${this.properties.map(item => item.toString()).join(', ')} }`;
@@ -1 +1 @@
1
- {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/object.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanDeclareVariable } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport type { ScopeType } from '../../scope/scope.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\n@Deserializer('Property')\nexport class Property extends AbstractExpressionNode implements CanDeclareVariable {\n\tstatic fromJSON(node: Property, deserializer: NodeDeserializer): Property {\n\t\treturn new Property(deserializer(node.key), deserializer(node.value), node.kind);\n\t}\n\tconstructor(protected key: ExpressionNode, protected value: ExpressionNode, protected kind: 'init' | 'get' | 'set') {\n\t\tsuper();\n\t}\n\tgetKey() {\n\t\treturn this.key;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthis.key.set(stack, value);\n\t}\n\tget(stack: Stack, thisContext: ThisType<any>): any {\n\t\tconst name = this.key.get(stack);\n\t\tlet value: any;\n\t\tswitch (this.kind) {\n\t\t\tcase 'get':\n\t\t\t\tconst get: () => any = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { get, configurable: true, enumerable: true });\n\t\t\t\tvalue = get;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tconst set: (v: any) => void = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { set, configurable: true, enumerable: true });\n\t\t\t\tvalue = set;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase 'init':\n\t\t\t\tvalue = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { value, configurable: true, enumerable: true, writable: true });\n\t\t\t\tbreak;\n\t\t}\n\t\treturn value;\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void {\n\t\tconst propertyName = this.key.get(stack);\n\t\tconst propertyValue = objectValue[propertyName];\n\t\t(this.value as ExpressionNode & CanDeclareVariable).declareVariable(stack, scopeType, propertyValue);\n\t}\n\tentry(): string[] {\n\t\treturn this.key.entry().concat(this.value.entry());\n\t}\n\tevent(): string[] {\n\t\treturn this.key.event().concat(this.value.event());\n\t}\n\ttoString(): string {\n\t\treturn `${this.key.toString()}: ${this.value.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value.toJSON(),\n\t\t\tkind: this.kind\n\t\t};\n\t}\n}\n\n@Deserializer('ObjectExpression')\nexport class ObjectExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ObjectExpression, deserializer: NodeDeserializer): ObjectExpression {\n\t\treturn new ObjectExpression(node.properties.map(deserializer));\n\t}\n\tconstructor(private properties: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetProperties() {\n\t\treturn this.properties;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error('ObjectExpression#set() has no implementation.');\n\t}\n\tget(stack: Stack) {\n\t\tconst newObject = {};\n\t\tfor (const property of this.properties) {\n\t\t\tproperty.get(stack, newObject);\n\t\t}\n\t\treturn newObject;\n\t}\n\tentry(): string[] {\n\t\treturn this.properties.flatMap(property => property.entry());\n\t}\n\tevent(parent?: string): string[] {\n\t\treturn this.properties.flatMap(property => property.event());\n\t}\n\ttoString() {\n\t\treturn `{ ${this.properties.map(item => item.toString()).join(', ')} }`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tproperties: this.properties.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n@Deserializer('ObjectPattern')\nexport class ObjectPattern extends AbstractExpressionNode implements CanDeclareVariable {\n\tstatic fromJSON(node: ObjectPattern, deserializer: NodeDeserializer): ObjectPattern {\n\t\treturn new ObjectPattern(node.properties.map(deserializer));\n\t}\n\tconstructor(private properties: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetProperties() {\n\t\treturn this.properties;\n\t}\n\tset(stack: Stack, objectValue: any) {\n\t\tthrow new Error('ObjectPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack, objectValue: any) {\n\t\tthis.declareVariable(scopeProvider, 'block', objectValue);\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void {\n\t\tfor (const property of this.properties as Property[]) {\n\t\t\tproperty.declareVariable(stack, scopeType, objectValue);\n\t\t}\n\t}\n\tentry(): string[] {\n\t\treturn this.properties.flatMap(property => property.entry());\n\t}\n\tevent(parent?: string): string[] {\n\t\treturn this.properties.flatMap(property => property.event());\n\t}\n\ttoString() {\n\t\treturn `{ ${this.properties.map(item => item.toString()).join(', ')} }`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tproperties: this.properties.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/object.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeDeserializer, ExpressionNode, CanDeclareExpression } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport type { ScopeType } from '../../scope/scope.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { RestElement } from '../computing/rest.js';\n\n@Deserializer('Property')\nexport class Property extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: Property, deserializer: NodeDeserializer): Property {\n\t\treturn new Property(deserializer(node.key), deserializer(node.value) as CanDeclareExpression, node.kind);\n\t}\n\tconstructor(protected key: ExpressionNode, protected value: CanDeclareExpression | ExpressionNode, protected kind: 'init' | 'get' | 'set') {\n\t\tsuper();\n\t}\n\tgetKey() {\n\t\treturn this.key;\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthis.key.set(stack, value);\n\t}\n\tget(stack: Stack, thisContext: ThisType<any>): any {\n\t\tconst name = this.key.get(stack);\n\t\tlet value: any;\n\t\tswitch (this.kind) {\n\t\t\tcase 'get':\n\t\t\t\tconst get: () => any = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { get, configurable: true, enumerable: true });\n\t\t\t\tvalue = get;\n\t\t\t\tbreak;\n\t\t\tcase 'set':\n\t\t\t\tconst set: (v: any) => void = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { set, configurable: true, enumerable: true });\n\t\t\t\tvalue = set;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\tcase 'init':\n\t\t\t\tvalue = this.value.get(stack);\n\t\t\t\tObject.defineProperty(thisContext, name, { value, configurable: true, enumerable: true, writable: true });\n\t\t\t\tbreak;\n\t\t}\n\t\treturn value;\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void {\n\t\tconst propertyName = this.key.get(stack);\n\t\tconst propertyValue = objectValue[propertyName];\n\t\t(this.value as CanDeclareExpression).declareVariable(stack, scopeType, propertyValue);\n\t}\n\tevents(): string[] {\n\t\treturn this.key.events().concat(this.value.events());\n\t}\n\ttoString(): string {\n\t\treturn `${this.key.toString()}: ${this.value.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tkey: this.key.toJSON(),\n\t\t\tvalue: this.value.toJSON(),\n\t\t\tkind: this.kind\n\t\t};\n\t}\n}\n\n@Deserializer('ObjectExpression')\nexport class ObjectExpression extends AbstractExpressionNode {\n\tstatic fromJSON(node: ObjectExpression, deserializer: NodeDeserializer): ObjectExpression {\n\t\treturn new ObjectExpression(node.properties.map(deserializer) as Property[]);\n\t}\n\tconstructor(private properties: Property[]) {\n\t\tsuper();\n\t}\n\tgetProperties() {\n\t\treturn this.properties;\n\t}\n\tset(stack: Stack) {\n\t\tthrow new Error('ObjectExpression#set() has no implementation.');\n\t}\n\tget(stack: Stack) {\n\t\tconst newObject = {};\n\t\tfor (const property of this.properties) {\n\t\t\tproperty.get(stack, newObject);\n\t\t}\n\t\treturn newObject;\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.properties.flatMap(property => property.events());\n\t}\n\ttoString() {\n\t\treturn `{ ${this.properties.map(item => item.toString()).join(', ')} }`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tproperties: this.properties.map(item => item.toJSON())\n\t\t};\n\t}\n}\n\n@Deserializer('ObjectPattern')\nexport class ObjectPattern extends AbstractExpressionNode implements CanDeclareExpression {\n\tstatic fromJSON(node: ObjectPattern, deserializer: NodeDeserializer): ObjectPattern {\n\t\treturn new ObjectPattern(node.properties.map(deserializer) as (Property | RestElement)[]);\n\t}\n\tconstructor(private properties: (Property | RestElement)[]) {\n\t\tsuper();\n\t}\n\tgetProperties() {\n\t\treturn this.properties;\n\t}\n\tset(stack: Stack, objectValue: any) {\n\t\tthrow new Error('ObjectPattern#set() has no implementation.');\n\t}\n\tget(scopeProvider: Stack) {\n\t\tthrow new Error('ObjectPattern#get() has no implementation.');\n\t}\n\tdeclareVariable(stack: Stack, scopeType: ScopeType, objectValue: any): void {\n\t\tfor (const property of this.properties) {\n\t\t\tif (property instanceof RestElement) {\n\t\t\t\tobjectValue = this.getFromObject(stack, objectValue);\n\t\t\t}\n\t\t\tproperty.declareVariable(stack, scopeType, objectValue);\n\t\t}\n\t}\n\tprivate getFromObject(stack: Stack, objectValue: { [key: PropertyKey]: any }) {\n\t\tconst keys: PropertyKey[] = [];\n\t\tkeys.push(...Object.keys(objectValue));\n\t\tkeys.push(...Object.getOwnPropertySymbols(objectValue));\n\t\tconst restObject: typeof objectValue = {};\n\t\tconst context = stack.lastScope<typeof objectValue>().getContext()!;\n\t\tfor (const key of keys) {\n\t\t\tif (!(key in context)) {\n\t\t\t\trestObject[key] = objectValue[key];\n\t\t\t}\n\t\t}\n\t\treturn restObject;\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.properties.flatMap(property => property.events());\n\t}\n\ttoString() {\n\t\treturn `{ ${this.properties.map(item => item.toString()).join(', ')} }`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tproperties: this.properties.map(item => item.toJSON())\n\t\t};\n\t}\n}\n"]}
@@ -8,8 +8,7 @@ export declare class ExpressionStatement extends AbstractExpressionNode {
8
8
  getBody(): ExpressionNode[];
9
9
  set(stack: Stack, value: any): void;
10
10
  get(stack: Stack): undefined;
11
- entry(): string[];
12
- event(parent?: string): string[];
11
+ events(parent?: string): string[];
13
12
  toString(): string;
14
13
  toJson(): object;
15
14
  }
@@ -21,11 +21,8 @@ let ExpressionStatement = ExpressionStatement_1 = class ExpressionStatement exte
21
21
  this.body.forEach(node => value = node.get(stack));
22
22
  return value;
23
23
  }
24
- entry() {
25
- return this.body.flatMap(node => node.entry());
26
- }
27
- event(parent) {
28
- return this.body.flatMap(node => node.event(parent));
24
+ events(parent) {
25
+ return this.body.flatMap(node => node.events(parent));
29
26
  }
30
27
  toString() {
31
28
  return this.body.map(node => node.toString()).join('; ').concat(';');
@@ -1 +1 @@
1
- {"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/statement.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,IAAa,mBAAmB,2BAAhC,MAAa,mBAAoB,SAAQ,sBAAsB;IAI9D,YAAoB,IAAsB;QACzC,KAAK,EAAE,CAAC;QADW,SAAI,GAAJ,IAAI,CAAkB;IAE1C,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,IAAyB,EAAE,YAA8B;QACxE,OAAO,IAAI,qBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACrE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,IAAI,KAAK,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,KAAK;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,MAAe;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,MAAM;QACL,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;CACD,CAAA;AA9BY,mBAAmB;IAD/B,YAAY,CAAC,qBAAqB,CAAC;;GACvB,mBAAmB,CA8B/B;SA9BY,mBAAmB","sourcesContent":["import type { NodeDeserializer, ExpressionNode } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\n@Deserializer('ExpressionStatement')\nexport class ExpressionStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: ExpressionStatement, deserializer: NodeDeserializer): ExpressionStatement {\n\t\treturn new ExpressionStatement(node.body.map(line => deserializer(line)));\n\t}\n\tconstructor(private body: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ExpressionStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tlet value;\n\t\tthis.body.forEach(node => value = node.get(stack));\n\t\treturn value;\n\t}\n\tentry(): string[] {\n\t\treturn this.body.flatMap(node => node.entry());\n\t}\n\tevent(parent?: string): string[] {\n\t\treturn this.body.flatMap(node => node.event(parent));\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(node => node.toString()).join('; ').concat(';');\n\t}\n\ttoJson(): object {\n\t\treturn { body: this.body.map(exp => exp.toJSON()) };\n\t}\n}\n"]}
1
+ {"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/statement.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,IAAa,mBAAmB,2BAAhC,MAAa,mBAAoB,SAAQ,sBAAsB;IAI9D,YAAoB,IAAsB;QACzC,KAAK,EAAE,CAAC;QADW,SAAI,GAAJ,IAAI,CAAkB;IAE1C,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,IAAyB,EAAE,YAA8B;QACxE,OAAO,IAAI,qBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACrE,CAAC;IACD,GAAG,CAAC,KAAY;QACf,IAAI,KAAK,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,CAAC,MAAe;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,MAAM;QACL,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;CACD,CAAA;AA3BY,mBAAmB;IAD/B,YAAY,CAAC,qBAAqB,CAAC;;GACvB,mBAAmB,CA2B/B;SA3BY,mBAAmB","sourcesContent":["import type { NodeDeserializer, ExpressionNode } from '../expression.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { AbstractExpressionNode } from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\n\n@Deserializer('ExpressionStatement')\nexport class ExpressionStatement extends AbstractExpressionNode {\n\tstatic fromJSON(node: ExpressionStatement, deserializer: NodeDeserializer): ExpressionStatement {\n\t\treturn new ExpressionStatement(node.body.map(line => deserializer(line)));\n\t}\n\tconstructor(private body: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`ExpressionStatement#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tlet value;\n\t\tthis.body.forEach(node => value = node.get(stack));\n\t\treturn value;\n\t}\n\tevents(parent?: string): string[] {\n\t\treturn this.body.flatMap(node => node.events(parent));\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(node => node.toString()).join('; ').concat(';');\n\t}\n\ttoJson(): object {\n\t\treturn { body: this.body.map(exp => exp.toJSON()) };\n\t}\n}\n"]}
@@ -1,29 +1,31 @@
1
- import type { CanDeclareVariable, ExpressionNode, NodeDeserializer } from '../expression.js';
2
- import type { ScopeType } from '../../scope/scope.js';
1
+ import type { CanDeclareExpression, ExpressionNode, NodeDeserializer, CanFindScope } from '../expression.js';
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';
5
- export declare class Identifier extends AbstractExpressionNode implements CanDeclareVariable {
6
- private name;
5
+ export declare class Identifier extends AbstractExpressionNode implements CanDeclareExpression, CanFindScope {
6
+ protected name: string | number;
7
7
  static fromJSON(node: Identifier): Identifier;
8
8
  constructor(name: string | number);
9
9
  getName(): string | number;
10
10
  set(stack: Stack, value: any): any;
11
11
  get(stack: Stack, thisContext?: any): any;
12
+ findScope<T extends object>(stack: Stack): Scope<T>;
13
+ findScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;
12
14
  declareVariable(stack: Stack, scopeType: ScopeType, propertyValue: any): any;
13
- entry(): string[];
14
- event(parent?: string): string[];
15
+ events(parent?: string): string[];
15
16
  toString(): string;
16
17
  toJson(): object;
17
18
  }
18
- export declare class Literal<T> extends AbstractExpressionNode {
19
+ export declare class Literal<T> extends AbstractExpressionNode implements CanFindScope {
19
20
  protected value: T;
20
21
  static fromJSON(node: Literal<any>): Literal<string> | Literal<number> | Literal<bigint> | Literal<boolean> | Literal<RegExp> | Literal<null | undefined>;
21
22
  constructor(value: T);
22
23
  getValue(): T;
23
24
  set(): void;
24
25
  get(): T;
25
- entry(): string[];
26
- event(): string[];
26
+ findScope<V extends object>(stack: Stack): Scope<V>;
27
+ findScope<V extends object>(stack: Stack, scope: Scope<any>): Scope<V>;
28
+ events(): string[];
27
29
  toString(): string;
28
30
  toJson(): object;
29
31
  }
@@ -43,8 +45,7 @@ export declare class TemplateLiteralExpressionNode extends AbstractExpressionNod
43
45
  constructor(quasis: string[], expressions: ExpressionNode[], tag?: ExpressionNode | undefined);
44
46
  set(stack: Stack, value: any): void;
45
47
  get(stack: Stack): any;
46
- entry(): string[];
47
- event(): string[];
48
+ events(): string[];
48
49
  toString(): string;
49
50
  toJson(): object;
50
51
  }