@ibyar/expressions 0.3.6 → 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.
package/README.md CHANGED
@@ -48,7 +48,7 @@ const source = `
48
48
  setTimeout(() => console.log('setTimeout', alex), 500);
49
49
  const sara = { firstName: 'sara', lastName: 'jon', age: 28, [Symbol.toStringTag]: 'SARA'};
50
50
  console.log(sara['age']);
51
- console.log('toStringTag', sara[Symbol.toStringTag]);
51
+ console.log('toStringTag', Object.prototype.toString.call(sara));
52
52
  console.log('compare', sara.age <=> alex.age);
53
53
  console.log('older', sara.age >? alex.age);
54
54
  console.log('younger', sara.age <? alex.age);
@@ -69,7 +69,16 @@ const source = `
69
69
  'let taggedStringLiteral = latex`Hi\n${2+3}!`; console.log({taggedStringLiteral});'
70
70
  ;
71
71
 
72
- const ast = JavaScriptParser.parse(source);
72
+ const pipeSource = `
73
+ const add = (arg1, arg2) => arg1 + arg2;
74
+ a
75
+ |> function(s) {return s;}
76
+ |> (c => b = c + 1)
77
+ |> add(?, 2)
78
+ |> add(3, ?)
79
+ |> console.log:4:5;`;
80
+
81
+ const ast = JavaScriptParser.parse(source + pipeSource);
73
82
  const esTree = ast.toJSON();
74
83
  const esTreeString = JSON.stringify(ast, void 0, 2);
75
84
  console.log({ esTree, esTreeString });
@@ -77,10 +86,14 @@ const context = {
77
86
  Promise,
78
87
  setTimeout,
79
88
  console,
80
- Symbol
89
+ Symbol,
90
+ Object
81
91
  };
82
92
  const stack = Stack.for(context);
83
- const globalScope = Scope.functionScope();
93
+ const globalScope = Scope.functionScopeFor({
94
+ a: 7,
95
+ b: undefined
96
+ });
84
97
  stack.pushScope(globalScope);
85
98
  ast.get(stack);
86
99
  console.log(
@@ -133,27 +146,26 @@ non-ecma operator are `%% >? <? <=> >?= <?= %%=`
133
146
 
134
147
  ## Pipeline Operator |> Support
135
148
 
136
- - supported pipeline operators `|> :|> ?|> ?:|> <| <|: ?<| ?<|:` and `|>> <<|`.
149
+ - support angular-like syntax and partial operator for a call syntax:
137
150
 
138
- - support the following F# syntax:
139
-
140
151
  ```js
141
- function add(x, y) { return x + y };
142
- const a = 88;
143
- argument |> map
144
- |> function(x) { console.log(x); return x; }
145
- |> (x) => { console.log(x); return x; }
146
- |> add(a) // y = a, x will be th return value from the arrow function
147
-
148
- ```
152
+ x |> methodName1:arg2:arg3
153
+ |> methodName2(arg1, ?, ...arg3);
149
154
 
150
- - support angular like pipeline syntax
151
155
 
152
- ```js
153
156
  function add(x, y, z) { return x + y + z };
154
157
  const a = 88;
155
158
  const b = 99;
156
159
  const c = 11;
157
- const b = a |> add:b:c; // === add(a, b, c)
160
+ const z = a |> add:b:c; // === add(a, b, c)
158
161
  ```
159
162
 
163
+ ```js
164
+ function add(x, y) { return x + y };
165
+ const a = 88;
166
+ argument |> map
167
+ |> function(x) { console.log(x); return x; }
168
+ |> (x) => { console.log(x); return x; }
169
+ |> methodName3(a)
170
+
171
+ ```
@@ -382,6 +382,9 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
382
382
  }
383
383
  }
384
384
  stack.clearTo(scope);
385
+ if (this.body.length === 1) {
386
+ return returnValue;
387
+ }
385
388
  };
386
389
  break;
387
390
  default:
@@ -398,6 +401,9 @@ let ArrowFunctionExpression = ArrowFunctionExpression_1 = class ArrowFunctionExp
398
401
  }
399
402
  }
400
403
  stack.clearTo(scope);
404
+ if (this.body.length === 1) {
405
+ return returnValue;
406
+ }
401
407
  };
402
408
  break;
403
409
  }
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CanDeclareExpression, 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};\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};\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
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibyar/expressions",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "description": "Aurora expression, an template expression evaluation",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ibyar/aurora",
@@ -14,6 +14,10 @@
14
14
  "publishConfig": {
15
15
  "access": "public"
16
16
  },
17
+ "dependencies": {
18
+ "reflect-metadata": "^0.1.13",
19
+ "tslib": "^2.3.1"
20
+ },
17
21
  "devDependencies": {
18
22
  "typescript": "^4.4.3"
19
23
  },
@@ -37,5 +41,5 @@
37
41
  "eval",
38
42
  "evaluation"
39
43
  ],
40
- "gitHead": "b641c29b0dbac9a13c5ee2ef6f2a0b0bf427a10d"
44
+ "gitHead": "6e8f85ae5e22ace13e9846f3960577fea9836190"
41
45
  }
package/v8/parser.d.ts CHANGED
@@ -135,6 +135,7 @@ export declare class JavaScriptParser extends AbstractParser {
135
135
  protected doParseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode;
136
136
  protected parsePropertyName(): ExpressionNode;
137
137
  protected parsePipelineExpression(expression: ExpressionNode): ExpressionNode;
138
+ protected parsePipelineBody(lhs: ExpressionNode): ExpressionNode;
138
139
  protected parseConditionalExpression(): ExpressionNode;
139
140
  protected parseLogicalExpression(): ExpressionNode;
140
141
  protected parseBinaryContinuation(x: ExpressionNode, prec: number, prec1: number): ExpressionNode;
package/v8/parser.js CHANGED
@@ -959,7 +959,12 @@ export class JavaScriptParser extends AbstractParser {
959
959
  }
960
960
  this.expect(Token.R_PARENTHESES);
961
961
  if (this.peek().isType(Token.ARROW)) {
962
- expression = this.parseArrowFunctionLiteral([expression], ArrowFunctionType.NORMAL, info.rest);
962
+ if (expression instanceof SequenceExpression) {
963
+ expression = this.parseArrowFunctionLiteral(expression.getExpressions(), ArrowFunctionType.NORMAL, info.rest);
964
+ }
965
+ else {
966
+ expression = this.parseArrowFunctionLiteral([expression], ArrowFunctionType.NORMAL, info.rest);
967
+ }
963
968
  }
964
969
  return expression;
965
970
  }
@@ -1326,71 +1331,112 @@ export class JavaScriptParser extends AbstractParser {
1326
1331
  throw new Error(this.errorMessage(`Parsing property expression: Unexpected Token`));
1327
1332
  }
1328
1333
  parsePipelineExpression(expression) {
1329
- while (this.peek().isType(Token.PIPELINE)) {
1330
- this.consume(Token.PIPELINE);
1331
- const func = this.parseMemberExpression();
1332
- let args = [];
1333
- switch (this.peek().token) {
1334
- case Token.COLON:
1335
- do {
1336
- this.consume(Token.COLON);
1337
- const isSpread = this.check(Token.ELLIPSIS);
1338
- if (this.peek().isType(Token.CONDITIONAL)) {
1339
- this.consume(Token.CONDITIONAL);
1340
- if (isSpread) {
1341
- args.push('...?');
1342
- }
1343
- else {
1344
- args.push('?');
1345
- }
1334
+ let token;
1335
+ while (Token.isPipelineOperator(token = this.peek().token)) {
1336
+ this.consume(token);
1337
+ expression = this.parsePipelineBody(expression);
1338
+ }
1339
+ return expression;
1340
+ }
1341
+ parsePipelineBody(lhs) {
1342
+ let body;
1343
+ let token = this.peek();
1344
+ switch (token.token) {
1345
+ case Token.FUNCTION:
1346
+ this.consume(Token.FUNCTION);
1347
+ if (this.peek().isType(Token.MUL)) {
1348
+ this.consume(Token.MUL);
1349
+ body = this.parseFunctionExpression(FunctionKind.GENERATOR);
1350
+ break;
1351
+ }
1352
+ body = this.parseFunctionExpression(FunctionKind.NORMAL);
1353
+ break;
1354
+ case Token.ASYNC:
1355
+ if (this.peekAhead().isType(Token.FUNCTION)) {
1356
+ this.consume(Token.ASYNC);
1357
+ this.consume(Token.FUNCTION);
1358
+ if (this.peek().isType(Token.MUL)) {
1359
+ this.consume(Token.MUL);
1360
+ body = this.parseFunctionExpression(FunctionKind.ASYNC_GENERATOR);
1361
+ break;
1362
+ }
1363
+ body = this.parseFunctionExpression(FunctionKind.ASYNC);
1364
+ break;
1365
+ }
1366
+ break;
1367
+ default:
1368
+ break;
1369
+ }
1370
+ if (body) {
1371
+ return new PipelineExpression(lhs, body);
1372
+ }
1373
+ if (token.isType(Token.L_PARENTHESES)) {
1374
+ body = this.parsePrimaryExpression();
1375
+ return new PipelineExpression(lhs, body);
1376
+ }
1377
+ const func = this.parseMemberExpression();
1378
+ let args = [];
1379
+ switch (this.peek().token) {
1380
+ case Token.COLON:
1381
+ do {
1382
+ this.consume(Token.COLON);
1383
+ const isSpread = this.check(Token.ELLIPSIS);
1384
+ if (this.peek().isType(Token.CONDITIONAL)) {
1385
+ this.consume(Token.CONDITIONAL);
1386
+ if (isSpread) {
1387
+ args.push('...?');
1346
1388
  }
1347
1389
  else {
1348
- const arg = this.parseLogicalExpression();
1349
- if (isSpread) {
1350
- args.push(new SpreadElement(arg));
1351
- }
1352
- else {
1353
- args.push(arg);
1354
- }
1390
+ args.push('?');
1355
1391
  }
1356
- } while (this.peek().isType(Token.COLON));
1357
- break;
1358
- case Token.L_PARENTHESES:
1359
- this.consume(Token.L_PARENTHESES);
1360
- let indexed = false;
1361
- while (this.peek().isNotType(Token.R_PARENTHESES)) {
1362
- const isSpread = this.check(Token.ELLIPSIS);
1363
- if (this.peek().isType(Token.CONDITIONAL)) {
1364
- this.consume(Token.CONDITIONAL);
1365
- indexed = true;
1366
- if (isSpread) {
1367
- args.push('...?');
1368
- }
1369
- else {
1370
- args.push('?');
1371
- }
1392
+ }
1393
+ else {
1394
+ const arg = this.parseAssignmentExpressionCoverGrammar();
1395
+ if (isSpread) {
1396
+ args.push(new SpreadElement(arg));
1372
1397
  }
1373
1398
  else {
1374
- const arg = this.parseLogicalExpression();
1375
- if (isSpread) {
1376
- args.push(new SpreadElement(arg));
1377
- }
1378
- else {
1379
- args.push(arg);
1380
- }
1399
+ args.push(arg);
1381
1400
  }
1382
1401
  }
1383
- this.expect(Token.R_PARENTHESES);
1384
- if (!indexed) {
1385
- throw new Error(this.errorMessage('should use partial operator `?` in pipeline with a multi argument call'));
1402
+ } while (this.peek().isType(Token.COLON));
1403
+ break;
1404
+ case Token.L_PARENTHESES:
1405
+ this.consume(Token.L_PARENTHESES);
1406
+ let indexed = false;
1407
+ while (this.peek().isNotType(Token.R_PARENTHESES)) {
1408
+ const isSpread = this.check(Token.ELLIPSIS);
1409
+ if (this.peek().isType(Token.CONDITIONAL)) {
1410
+ this.consume(Token.CONDITIONAL);
1411
+ indexed = true;
1412
+ if (isSpread) {
1413
+ args.push('...?');
1414
+ }
1415
+ else {
1416
+ args.push('?');
1417
+ }
1386
1418
  }
1387
- break;
1388
- default:
1389
- break;
1390
- }
1391
- expression = new PipelineExpression(expression, func, args);
1419
+ else {
1420
+ const arg = this.parseAssignmentExpressionCoverGrammar();
1421
+ if (isSpread) {
1422
+ args.push(new SpreadElement(arg));
1423
+ }
1424
+ else {
1425
+ args.push(arg);
1426
+ }
1427
+ }
1428
+ this.check(Token.COMMA);
1429
+ }
1430
+ this.expect(Token.R_PARENTHESES);
1431
+ if (!indexed) {
1432
+ body = new CallExpression(func, args);
1433
+ return new PipelineExpression(lhs, body);
1434
+ }
1435
+ break;
1436
+ default:
1437
+ break;
1392
1438
  }
1393
- return expression;
1439
+ return new PipelineExpression(lhs, func, args);
1394
1440
  }
1395
1441
  parseConditionalExpression() {
1396
1442
  let expression = this.parseLogicalExpression();