vsn 0.1.144 → 0.1.146

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.
@@ -9,5 +9,6 @@ export declare class FunctionCallNode<T = any> extends Node implements TreeNode
9
9
  readonly args: FunctionArgumentNode<any[]>;
10
10
  constructor(fnc: TreeNode<(...args: any[]) => any>, args: FunctionArgumentNode<any[]>);
11
11
  protected _getChildNodes(): Node[];
12
+ protected callFunction(func: any, functionScope: any, dom: any, tag: any, ...values: any[]): Promise<[any, boolean]>;
12
13
  protected _evaluate(scope: Scope, dom: DOM, tag?: Tag): Promise<any>;
13
14
  }
@@ -50,17 +50,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
50
50
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
51
  }
52
52
  };
53
- var __values = (this && this.__values) || function(o) {
54
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
55
- if (m) return m.call(o);
56
- if (o && typeof o.length === "number") return {
57
- next: function () {
58
- if (o && i >= o.length) o = void 0;
59
- return { value: o && o[i++], done: !o };
60
- }
61
- };
62
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
63
- };
64
53
  var __read = (this && this.__read) || function (o, n) {
65
54
  var m = typeof Symbol === "function" && o[Symbol.iterator];
66
55
  if (!m) return o;
@@ -82,15 +71,24 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
82
71
  to[j] = from[i];
83
72
  return to;
84
73
  };
74
+ var __values = (this && this.__values) || function(o) {
75
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
76
+ if (m) return m.call(o);
77
+ if (o && typeof o.length === "number") return {
78
+ next: function () {
79
+ if (o && i >= o.length) o = void 0;
80
+ return { value: o && o[i++], done: !o };
81
+ }
82
+ };
83
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
84
+ };
85
85
  Object.defineProperty(exports, "__esModule", { value: true });
86
86
  exports.FunctionCallNode = void 0;
87
87
  var Tag_1 = require("../Tag");
88
88
  var Node_1 = require("./Node");
89
89
  var ScopeMemberNode_1 = require("./ScopeMemberNode");
90
90
  var FunctionNode_1 = require("./FunctionNode");
91
- var Registry_1 = require("../Registry");
92
91
  var ElementQueryNode_1 = require("./ElementQueryNode");
93
- var ClassNode_1 = require("./ClassNode");
94
92
  var FunctionCallNode = /** @class */ (function (_super) {
95
93
  __extends(FunctionCallNode, _super);
96
94
  function FunctionCallNode(fnc, args) {
@@ -105,162 +103,134 @@ var FunctionCallNode = /** @class */ (function (_super) {
105
103
  this.args
106
104
  ];
107
105
  };
106
+ FunctionCallNode.prototype.callFunction = function (func, functionScope, dom, tag) {
107
+ var values = [];
108
+ for (var _i = 4; _i < arguments.length; _i++) {
109
+ values[_i - 4] = arguments[_i];
110
+ }
111
+ return __awaiter(this, void 0, void 0, function () {
112
+ var r;
113
+ return __generator(this, function (_a) {
114
+ switch (_a.label) {
115
+ case 0:
116
+ if (!(func instanceof FunctionNode_1.FunctionNode)) return [3 /*break*/, 4];
117
+ return [4 /*yield*/, func.evaluate(functionScope, dom, tag)];
118
+ case 1: return [4 /*yield*/, (_a.sent()).apply(void 0, __spreadArray([], __read(values)))];
119
+ case 2:
120
+ r = _a.sent();
121
+ return [4 /*yield*/, func.collectGarbage()];
122
+ case 3:
123
+ _a.sent();
124
+ return [2 /*return*/, [r, true]];
125
+ case 4:
126
+ if (typeof func === 'function') {
127
+ return [2 /*return*/, [func.call.apply(func, __spreadArray([functionScope.wrapped || functionScope], __read(values))), true]];
128
+ }
129
+ _a.label = 5;
130
+ case 5: return [2 /*return*/, [null, false]];
131
+ }
132
+ });
133
+ });
134
+ };
108
135
  FunctionCallNode.prototype._evaluate = function (scope, dom, tag) {
109
136
  if (tag === void 0) { tag = null; }
110
137
  return __awaiter(this, void 0, void 0, function () {
111
- var tags, functionScope, functionName, instanceOfScopeMemberNode, _tags, values, func, functionName_1, returnValues, toCleanup, calls, tags_1, tags_1_1, _tag, tagNum, _a, _b, className, cls, fnc, _c, _d, e_1_1, e_2_1, toCleanup_1, toCleanup_1_1, fnc, e_3_1, r;
112
- var e_2, _e, e_1, _f, e_3, _g;
113
- return __generator(this, function (_h) {
114
- switch (_h.label) {
138
+ var tags, functionScope, _tags, values, functionName, returnValues, calls, func, _functionScope, tags_1, tags_1_1, _tag, _a, result, success, e_1_1;
139
+ var e_1, _b;
140
+ return __generator(this, function (_c) {
141
+ switch (_c.label) {
115
142
  case 0:
116
143
  tags = [];
117
144
  functionScope = scope;
118
- functionName = '';
119
- instanceOfScopeMemberNode = false;
120
- if (!(this.fnc instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 5];
121
- instanceOfScopeMemberNode = true;
145
+ if (!(this.fnc instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 4];
146
+ if (!(this.fnc.scope instanceof ElementQueryNode_1.ElementQueryNode)) return [3 /*break*/, 2];
122
147
  return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
123
148
  case 1:
124
- functionScope = _h.sent();
125
- return [4 /*yield*/, this.fnc.name.evaluate(scope, dom, tag)];
126
- case 2:
127
- functionName = _h.sent();
128
- if (!(this.fnc.scope instanceof ElementQueryNode_1.ElementQueryNode)) return [3 /*break*/, 4];
129
- return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
130
- case 3:
131
- _tags = _h.sent();
149
+ _tags = _c.sent();
132
150
  if (_tags instanceof Array) {
133
151
  tags = _tags;
134
152
  }
135
153
  else if (_tags instanceof Tag_1.Tag) {
136
154
  tags = [_tags];
155
+ functionScope = _tags.scope;
137
156
  }
138
157
  else {
139
158
  throw new Error('Invalid element query result');
140
159
  }
141
- return [3 /*break*/, 5];
160
+ return [3 /*break*/, 4];
161
+ case 2: return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
162
+ case 3:
163
+ functionScope = _c.sent();
164
+ _c.label = 4;
142
165
  case 4:
143
- tags = [tag];
144
- _h.label = 5;
145
- case 5: return [4 /*yield*/, this.args.evaluate(scope, dom, tag)];
146
- case 6:
147
- values = _h.sent();
148
- return [4 /*yield*/, this.fnc.evaluate(scope, dom, tag)];
149
- case 7:
150
- func = _h.sent();
151
- if (!(!func || func instanceof Array)) return [3 /*break*/, 31];
166
+ if (tags.length === 0)
167
+ tags.push(tag);
168
+ return [4 /*yield*/, this.args.evaluate(scope, dom, tag)];
169
+ case 5:
170
+ values = _c.sent();
152
171
  return [4 /*yield*/, this.fnc.name.evaluate(scope, dom, tag)];
153
- case 8:
154
- functionName_1 = _h.sent();
172
+ case 6:
173
+ functionName = _c.sent();
155
174
  returnValues = [];
156
- toCleanup = [];
157
175
  calls = 0;
158
- _h.label = 9;
159
- case 9:
160
- _h.trys.push([9, 21, 22, 23]);
176
+ _functionScope = functionScope;
177
+ _c.label = 7;
178
+ case 7:
179
+ _c.trys.push([7, 15, 16, 17]);
161
180
  tags_1 = __values(tags), tags_1_1 = tags_1.next();
162
- _h.label = 10;
163
- case 10:
164
- if (!!tags_1_1.done) return [3 /*break*/, 20];
181
+ _c.label = 8;
182
+ case 8:
183
+ if (!!tags_1_1.done) return [3 /*break*/, 14];
165
184
  _tag = tags_1_1.value;
166
- tagNum = 0;
167
- _h.label = 11;
168
- case 11:
169
- _h.trys.push([11, 17, 18, 19]);
170
- _a = (e_1 = void 0, __values(_tag.element[ClassNode_1.ClassNode.ClassesVariable] || [])), _b = _a.next();
171
- _h.label = 12;
185
+ if (_tag === null) {
186
+ _functionScope = functionScope;
187
+ }
188
+ else {
189
+ _functionScope = _tag.scope;
190
+ }
191
+ if (!_functionScope.has(functionName)) return [3 /*break*/, 9];
192
+ func = _functionScope.get(functionName);
193
+ return [3 /*break*/, 11];
194
+ case 9: return [4 /*yield*/, this.fnc.evaluate(scope, dom, _tag)];
195
+ case 10:
196
+ func = _c.sent();
197
+ _c.label = 11;
198
+ case 11: return [4 /*yield*/, this.callFunction.apply(this, __spreadArray([func, _functionScope, dom, _tag], __read(values)))];
172
199
  case 12:
173
- if (!!_b.done) return [3 /*break*/, 16];
174
- className = _b.value;
175
- tagNum++;
176
- cls = Registry_1.Registry.instance.classes.getSynchronous(className);
177
- if (!cls) return [3 /*break*/, 15];
178
- if (!cls.classScope.has(functionName_1)) return [3 /*break*/, 15];
179
- fnc = cls.classScope.get(functionName_1);
180
- toCleanup.push(fnc);
181
- _d = (_c = returnValues).push;
182
- return [4 /*yield*/, fnc.evaluate(_tag.scope, dom, _tag)];
183
- case 13: return [4 /*yield*/, (_h.sent()).apply(void 0, __spreadArray([], __read(values)))];
184
- case 14:
185
- _d.apply(_c, [_h.sent()]);
186
- calls++;
187
- _h.label = 15;
200
+ _a = __read.apply(void 0, [_c.sent(), 2]), result = _a[0], success = _a[1];
201
+ if (success) {
202
+ returnValues.push(result);
203
+ calls++;
204
+ }
205
+ else {
206
+ console.warn("Function " + functionName + " was not found in current scope.");
207
+ }
208
+ _c.label = 13;
209
+ case 13:
210
+ tags_1_1 = tags_1.next();
211
+ return [3 /*break*/, 8];
212
+ case 14: return [3 /*break*/, 17];
188
213
  case 15:
189
- _b = _a.next();
190
- return [3 /*break*/, 12];
191
- case 16: return [3 /*break*/, 19];
192
- case 17:
193
- e_1_1 = _h.sent();
214
+ e_1_1 = _c.sent();
194
215
  e_1 = { error: e_1_1 };
195
- return [3 /*break*/, 19];
196
- case 18:
216
+ return [3 /*break*/, 17];
217
+ case 16:
197
218
  try {
198
- if (_b && !_b.done && (_f = _a.return)) _f.call(_a);
219
+ if (tags_1_1 && !tags_1_1.done && (_b = tags_1.return)) _b.call(tags_1);
199
220
  }
200
221
  finally { if (e_1) throw e_1.error; }
201
222
  return [7 /*endfinally*/];
202
- case 19:
203
- tags_1_1 = tags_1.next();
204
- return [3 /*break*/, 10];
205
- case 20: return [3 /*break*/, 23];
206
- case 21:
207
- e_2_1 = _h.sent();
208
- e_2 = { error: e_2_1 };
209
- return [3 /*break*/, 23];
210
- case 22:
211
- try {
212
- if (tags_1_1 && !tags_1_1.done && (_e = tags_1.return)) _e.call(tags_1);
213
- }
214
- finally { if (e_2) throw e_2.error; }
215
- return [7 /*endfinally*/];
216
- case 23:
217
- _h.trys.push([23, 28, 29, 30]);
218
- toCleanup_1 = __values(toCleanup), toCleanup_1_1 = toCleanup_1.next();
219
- _h.label = 24;
220
- case 24:
221
- if (!!toCleanup_1_1.done) return [3 /*break*/, 27];
222
- fnc = toCleanup_1_1.value;
223
- return [4 /*yield*/, fnc.collectGarbage()];
224
- case 25:
225
- _h.sent();
226
- _h.label = 26;
227
- case 26:
228
- toCleanup_1_1 = toCleanup_1.next();
229
- return [3 /*break*/, 24];
230
- case 27: return [3 /*break*/, 30];
231
- case 28:
232
- e_3_1 = _h.sent();
233
- e_3 = { error: e_3_1 };
234
- return [3 /*break*/, 30];
235
- case 29:
236
- try {
237
- if (toCleanup_1_1 && !toCleanup_1_1.done && (_g = toCleanup_1.return)) _g.call(toCleanup_1);
238
- }
239
- finally { if (e_3) throw e_3.error; }
240
- return [7 /*endfinally*/];
241
- case 30:
223
+ case 17:
242
224
  if (calls === 1) {
243
225
  return [2 /*return*/, returnValues[0]];
244
226
  }
245
227
  else if (calls === 0) {
246
- throw new Error("Function " + functionName_1 + " not found");
228
+ throw new Error("Function " + functionName + " not found");
247
229
  }
248
230
  else {
249
231
  return [2 /*return*/, returnValues];
250
232
  }
251
- return [3 /*break*/, 36];
252
- case 31:
253
- if (!(func instanceof FunctionNode_1.FunctionNode)) return [3 /*break*/, 35];
254
- return [4 /*yield*/, func.evaluate(functionScope, dom, tag)];
255
- case 32: return [4 /*yield*/, (_h.sent()).apply(void 0, __spreadArray([], __read(values)))];
256
- case 33:
257
- r = _h.sent();
258
- return [4 /*yield*/, func.collectGarbage()];
259
- case 34:
260
- _h.sent();
261
- return [2 /*return*/, r];
262
- case 35: return [2 /*return*/, func.call.apply(func, __spreadArray([functionScope.wrapped || functionScope], __read(values)))];
263
- case 36: return [2 /*return*/];
233
+ return [2 /*return*/];
264
234
  }
265
235
  });
266
236
  });
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionCallNode.js","sourceRoot":"","sources":["../../src/AST/FunctionCallNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FunctionCallNode.js","sourceRoot":"","sources":["../../src/AST/FunctionCallNode.ts"],"names":[],"mappings":"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"}
package/dist/AST.d.ts CHANGED
@@ -146,7 +146,7 @@ export declare class Tree {
146
146
  evaluate(scope: Scope, dom: DOM, tag?: Tag): Promise<any>;
147
147
  prepare(scope: Scope, dom: DOM, tag?: Tag): Promise<void>;
148
148
  bindToScopeChanges(scope: any, fnc: any, dom: DOM, tag?: Tag): Promise<void>;
149
- static reprepareExecutingTrees(): void;
149
+ static reprepareExecutingTrees(): Promise<void>;
150
150
  static tokenize(code: string): Token[];
151
151
  static stripWhiteSpace(tokens: Token[]): Token[];
152
152
  static processTokens(tokens: Token[], _node?: Node, _lastBlock?: Node): BlockNode;
package/dist/AST.js CHANGED
@@ -71,6 +71,7 @@ var _a, _b, _c;
71
71
  Object.defineProperty(exports, "__esModule", { value: true });
72
72
  exports.Tree = exports.TreeCache = exports.AttributableNodes = exports.tokenIsBlockCloser = exports.tokenIsBlockOpener = exports.getTokenBlockOpenerConfig = exports.BlockCloseToTypeMap = exports.BlockOpenToTypeMap = exports.BlockTypeConfigurations = exports.TokenType = exports.BlockType = void 0;
73
73
  var DOM_1 = require("./DOM");
74
+ var Tag_1 = require("./Tag");
74
75
  var RootScopeMemberNode_1 = require("./AST/RootScopeMemberNode");
75
76
  var ScopeMemberNode_1 = require("./AST/ScopeMemberNode");
76
77
  var ElementAttributeNode_1 = require("./AST/ElementAttributeNode");
@@ -606,68 +607,111 @@ var Tree = /** @class */ (function () {
606
607
  Tree.prototype.bindToScopeChanges = function (scope, fnc, dom, tag) {
607
608
  if (tag === void 0) { tag = null; }
608
609
  return __awaiter(this, void 0, void 0, function () {
609
- var _a, _b, node, _scope, name_1, e_2_1;
610
- var e_2, _c;
611
- return __generator(this, function (_d) {
612
- switch (_d.label) {
610
+ var _a, _b, node, _scope, name_1, ref, ref_1, ref_1_1, tag_1, e_2_1;
611
+ var e_2, _c, e_3, _d;
612
+ return __generator(this, function (_e) {
613
+ switch (_e.label) {
613
614
  case 0:
614
- _d.trys.push([0, 9, 10, 11]);
615
+ _e.trys.push([0, 8, 9, 10]);
615
616
  _a = __values(this._root.findChildrenByTypes([RootScopeMemberNode_1.RootScopeMemberNode, ScopeMemberNode_1.ScopeMemberNode, ElementAttributeNode_1.ElementAttributeNode], 'ScopeMemberNodes')), _b = _a.next();
616
- _d.label = 1;
617
+ _e.label = 1;
617
618
  case 1:
618
- if (!!_b.done) return [3 /*break*/, 8];
619
+ if (!!_b.done) return [3 /*break*/, 7];
619
620
  node = _b.value;
620
621
  _scope = scope;
621
- if (!(node instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 3];
622
- return [4 /*yield*/, node.scope.evaluate(scope, dom)];
622
+ return [4 /*yield*/, node.name.evaluate(scope, dom, tag)];
623
623
  case 2:
624
- _scope = _d.sent();
625
- return [3 /*break*/, 5];
624
+ name_1 = _e.sent();
625
+ if (!(node instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 4];
626
+ return [4 /*yield*/, node.scope.evaluate(scope, dom)];
626
627
  case 3:
627
- if (!(node instanceof ElementAttributeNode_1.ElementAttributeNode && node.elementRef)) return [3 /*break*/, 5];
628
- return [4 /*yield*/, node.elementRef.evaluate(scope, dom, tag)];
628
+ _scope = _e.sent();
629
+ _scope.on("change:" + name_1, fnc);
630
+ return [3 /*break*/, 6];
629
631
  case 4:
630
- _scope = (_d.sent())[0].scope;
631
- _d.label = 5;
632
- case 5: return [4 /*yield*/, node.name.evaluate(scope, dom, tag)];
632
+ if (!(node instanceof ElementAttributeNode_1.ElementAttributeNode && node.elementRef)) return [3 /*break*/, 6];
633
+ return [4 /*yield*/, node.elementRef.evaluate(scope, dom, tag)];
634
+ case 5:
635
+ ref = _e.sent();
636
+ if (ref instanceof Tag_1.Tag) {
637
+ ref.scope.on("change:" + name_1, fnc);
638
+ }
639
+ else if (ref instanceof Array) {
640
+ try {
641
+ for (ref_1 = (e_3 = void 0, __values(ref)), ref_1_1 = ref_1.next(); !ref_1_1.done; ref_1_1 = ref_1.next()) {
642
+ tag_1 = ref_1_1.value;
643
+ tag_1.scope.on("change:" + name_1, fnc);
644
+ }
645
+ }
646
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
647
+ finally {
648
+ try {
649
+ if (ref_1_1 && !ref_1_1.done && (_d = ref_1.return)) _d.call(ref_1);
650
+ }
651
+ finally { if (e_3) throw e_3.error; }
652
+ }
653
+ }
654
+ else {
655
+ console.warn("Cannot bind to changes for " + name_1 + ".");
656
+ }
657
+ _e.label = 6;
633
658
  case 6:
634
- name_1 = _d.sent();
635
- _scope.on("change:" + name_1, fnc);
636
- _d.label = 7;
637
- case 7:
638
659
  _b = _a.next();
639
660
  return [3 /*break*/, 1];
640
- case 8: return [3 /*break*/, 11];
641
- case 9:
642
- e_2_1 = _d.sent();
661
+ case 7: return [3 /*break*/, 10];
662
+ case 8:
663
+ e_2_1 = _e.sent();
643
664
  e_2 = { error: e_2_1 };
644
- return [3 /*break*/, 11];
645
- case 10:
665
+ return [3 /*break*/, 10];
666
+ case 9:
646
667
  try {
647
668
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
648
669
  }
649
670
  finally { if (e_2) throw e_2.error; }
650
671
  return [7 /*endfinally*/];
651
- case 11: return [2 /*return*/];
672
+ case 10: return [2 /*return*/];
652
673
  }
653
674
  });
654
675
  });
655
676
  };
656
677
  Tree.reprepareExecutingTrees = function () {
657
- var _this = this;
658
- Tree.executing.forEach(function (context) { return __awaiter(_this, void 0, void 0, function () {
659
- return __generator(this, function (_a) {
660
- switch (_a.label) {
661
- case 0: return [4 /*yield*/, context.tree.prepare(context.scope, context.dom, context.tag)];
678
+ return __awaiter(this, void 0, void 0, function () {
679
+ var _a, _b, context, e_4_1;
680
+ var e_4, _c;
681
+ return __generator(this, function (_d) {
682
+ switch (_d.label) {
683
+ case 0:
684
+ _d.trys.push([0, 5, 6, 7]);
685
+ _a = __values(this.executing), _b = _a.next();
686
+ _d.label = 1;
662
687
  case 1:
663
- _a.sent();
664
- return [2 /*return*/];
688
+ if (!!_b.done) return [3 /*break*/, 4];
689
+ context = _b.value;
690
+ return [4 /*yield*/, context.tree.prepare(context.scope, context.dom, context.tag)];
691
+ case 2:
692
+ _d.sent();
693
+ _d.label = 3;
694
+ case 3:
695
+ _b = _a.next();
696
+ return [3 /*break*/, 1];
697
+ case 4: return [3 /*break*/, 7];
698
+ case 5:
699
+ e_4_1 = _d.sent();
700
+ e_4 = { error: e_4_1 };
701
+ return [3 /*break*/, 7];
702
+ case 6:
703
+ try {
704
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
705
+ }
706
+ finally { if (e_4) throw e_4.error; }
707
+ return [7 /*endfinally*/];
708
+ case 7: return [2 /*return*/];
665
709
  }
666
710
  });
667
- }); });
711
+ });
668
712
  };
669
713
  Tree.tokenize = function (code) {
670
- var e_3, _a;
714
+ var e_5, _a;
671
715
  var tokens = [];
672
716
  if (!code || code.length === 0)
673
717
  return tokens;
@@ -675,7 +719,7 @@ var Tree = /** @class */ (function () {
675
719
  do {
676
720
  foundToken = false;
677
721
  try {
678
- for (var TOKEN_PATTERNS_1 = (e_3 = void 0, __values(TOKEN_PATTERNS)), TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next(); !TOKEN_PATTERNS_1_1.done; TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next()) {
722
+ for (var TOKEN_PATTERNS_1 = (e_5 = void 0, __values(TOKEN_PATTERNS)), TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next(); !TOKEN_PATTERNS_1_1.done; TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next()) {
679
723
  var tp = TOKEN_PATTERNS_1_1.value;
680
724
  var match = tp.pattern.exec(code);
681
725
  if (match) {
@@ -691,12 +735,12 @@ var Tree = /** @class */ (function () {
691
735
  }
692
736
  }
693
737
  }
694
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
738
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
695
739
  finally {
696
740
  try {
697
741
  if (TOKEN_PATTERNS_1_1 && !TOKEN_PATTERNS_1_1.done && (_a = TOKEN_PATTERNS_1.return)) _a.call(TOKEN_PATTERNS_1);
698
742
  }
699
- finally { if (e_3) throw e_3.error; }
743
+ finally { if (e_5) throw e_5.error; }
700
744
  }
701
745
  } while (code.length > 0 && foundToken);
702
746
  return tokens;
@@ -711,7 +755,7 @@ var Tree = /** @class */ (function () {
711
755
  return tokens;
712
756
  };
713
757
  Tree.processTokens = function (tokens, _node, _lastBlock) {
714
- var e_4, _a;
758
+ var e_6, _a;
715
759
  if (_node === void 0) { _node = null; }
716
760
  if (_lastBlock === void 0) { _lastBlock = null; }
717
761
  var blockNodes = [];
@@ -832,17 +876,17 @@ var Tree = /** @class */ (function () {
832
876
  var funcArgs = Tree.getBlockTokens(tokens);
833
877
  var nodes = [];
834
878
  try {
835
- for (var funcArgs_1 = (e_4 = void 0, __values(funcArgs)), funcArgs_1_1 = funcArgs_1.next(); !funcArgs_1_1.done; funcArgs_1_1 = funcArgs_1.next()) {
879
+ for (var funcArgs_1 = (e_6 = void 0, __values(funcArgs)), funcArgs_1_1 = funcArgs_1.next(); !funcArgs_1_1.done; funcArgs_1_1 = funcArgs_1.next()) {
836
880
  var arg = funcArgs_1_1.value;
837
881
  nodes.push(Tree.processTokens(arg));
838
882
  }
839
883
  }
840
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
884
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
841
885
  finally {
842
886
  try {
843
887
  if (funcArgs_1_1 && !funcArgs_1_1.done && (_a = funcArgs_1.return)) _a.call(funcArgs_1);
844
888
  }
845
- finally { if (e_4) throw e_4.error; }
889
+ finally { if (e_6) throw e_6.error; }
846
890
  }
847
891
  if (node) {
848
892
  node = new FunctionCallNode_1.FunctionCallNode(node, // Previous node should be a NAME
@@ -1068,7 +1112,7 @@ var Tree = /** @class */ (function () {
1068
1112
  return statementTokens;
1069
1113
  };
1070
1114
  Tree.consumeTypes = function (tokens, types) {
1071
- var e_5, _a;
1115
+ var e_7, _a;
1072
1116
  var matching = [];
1073
1117
  try {
1074
1118
  for (var tokens_1 = __values(tokens), tokens_1_1 = tokens_1.next(); !tokens_1_1.done; tokens_1_1 = tokens_1.next()) {
@@ -1081,12 +1125,12 @@ var Tree = /** @class */ (function () {
1081
1125
  }
1082
1126
  }
1083
1127
  }
1084
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
1128
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1085
1129
  finally {
1086
1130
  try {
1087
1131
  if (tokens_1_1 && !tokens_1_1.done && (_a = tokens_1.return)) _a.call(tokens_1);
1088
1132
  }
1089
- finally { if (e_5) throw e_5.error; }
1133
+ finally { if (e_7) throw e_7.error; }
1090
1134
  }
1091
1135
  tokens.splice(0, matching.length);
1092
1136
  return matching;