greybel-interpreter 0.7.2 → 1.0.2
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/.editorconfig +15 -0
- package/.eslintrc +48 -0
- package/LICENSE +21 -21
- package/README.md +2 -2
- package/dist/context.d.ts +109 -98
- package/dist/context.js +378 -456
- package/dist/cps.d.ts +15 -17
- package/dist/cps.js +220 -872
- package/dist/handler/error.d.ts +6 -0
- package/dist/{operations/debugger.js → handler/error.js} +35 -32
- package/dist/handler/output.d.ts +6 -0
- package/dist/{operations/if.js → handler/output.js} +35 -31
- package/dist/handler/resource.d.ts +12 -0
- package/dist/handler/resource.js +51 -0
- package/dist/handler-container.d.ts +14 -0
- package/dist/handler-container.js +16 -0
- package/dist/index.d.ts +44 -36
- package/dist/index.js +129 -93
- package/dist/interpreter.d.ts +39 -29
- package/dist/interpreter.js +292 -210
- package/dist/intrinsics-container.d.ts +7 -0
- package/dist/intrinsics-container.js +19 -0
- package/dist/operations/assign.d.ts +13 -0
- package/dist/operations/assign.js +111 -0
- package/dist/operations/block.d.ts +12 -0
- package/dist/operations/{body.js → block.js} +108 -140
- package/dist/operations/break.d.ts +10 -7
- package/dist/operations/break.js +41 -34
- package/dist/operations/call.d.ts +13 -0
- package/dist/operations/call.js +124 -0
- package/dist/operations/chunk.d.ts +12 -0
- package/dist/operations/chunk.js +85 -0
- package/dist/operations/continue.d.ts +10 -7
- package/dist/operations/continue.js +41 -34
- package/dist/operations/debugger-statement.d.ts +10 -0
- package/dist/operations/{else-if.js → debugger-statement.js} +39 -31
- package/dist/operations/evaluate.d.ts +39 -0
- package/dist/operations/evaluate.js +366 -0
- package/dist/operations/for.d.ts +15 -16
- package/dist/operations/for.js +146 -143
- package/dist/operations/function-reference.d.ts +12 -0
- package/dist/operations/function-reference.js +103 -0
- package/dist/operations/function.d.ts +12 -26
- package/dist/operations/function.js +198 -145
- package/dist/operations/if-statement.d.ts +19 -8
- package/dist/operations/if-statement.js +181 -169
- package/dist/operations/import.d.ts +14 -0
- package/dist/{expressions/include.js → operations/import.js} +115 -132
- package/dist/operations/include.d.ts +13 -0
- package/dist/operations/include.js +95 -0
- package/dist/operations/list.d.ts +11 -0
- package/dist/{expressions → operations}/list.js +111 -142
- package/dist/operations/literal.d.ts +11 -0
- package/dist/operations/literal.js +58 -0
- package/dist/operations/map.d.ts +11 -0
- package/dist/operations/{argument.js → map.js} +167 -145
- package/dist/operations/negated-binary.d.ts +11 -0
- package/dist/{expressions/binary-negated-expression.js → operations/negated-binary.js} +109 -127
- package/dist/operations/new-instance.d.ts +11 -0
- package/dist/operations/{new.js → new-instance.js} +100 -97
- package/dist/operations/noop.d.ts +9 -0
- package/dist/operations/{else.js → noop.js} +36 -30
- package/dist/operations/not.d.ts +11 -11
- package/dist/operations/not.js +96 -96
- package/dist/operations/operation.d.ts +13 -0
- package/dist/operations/operation.js +11 -0
- package/dist/operations/reference.d.ts +9 -11
- package/dist/operations/reference.js +37 -103
- package/dist/operations/resolve.d.ts +38 -0
- package/dist/operations/resolve.js +330 -0
- package/dist/operations/return.d.ts +11 -11
- package/dist/operations/return.js +107 -106
- package/dist/operations/while.d.ts +13 -14
- package/dist/operations/while.js +129 -145
- package/dist/types/boolean.d.ts +11 -0
- package/dist/{custom-types → types}/boolean.js +46 -47
- package/dist/types/default.d.ts +11 -0
- package/dist/types/default.js +20 -0
- package/dist/types/function.d.ts +32 -0
- package/dist/types/function.js +174 -0
- package/dist/types/generics.d.ts +17 -0
- package/dist/types/{operation.js → generics.js} +40 -38
- package/dist/types/interface.d.ts +22 -0
- package/dist/types/interface.js +102 -0
- package/dist/types/list.d.ts +31 -0
- package/dist/types/list.js +227 -0
- package/dist/types/map.d.ts +30 -0
- package/dist/types/map.js +224 -0
- package/dist/types/nil.d.ts +9 -0
- package/dist/{custom-types → types}/nil.js +44 -44
- package/dist/types/number.d.ts +11 -0
- package/dist/{custom-types → types}/number.js +46 -47
- package/dist/types/string.d.ts +33 -0
- package/dist/types/string.js +149 -0
- package/dist/utils/path.d.ts +10 -0
- package/dist/utils/path.js +59 -0
- package/package.json +58 -44
- package/dist/custom-types/boolean.d.ts +0 -12
- package/dist/custom-types/list.d.ts +0 -26
- package/dist/custom-types/list.js +0 -236
- package/dist/custom-types/map.d.ts +0 -26
- package/dist/custom-types/map.js +0 -245
- package/dist/custom-types/nil.d.ts +0 -10
- package/dist/custom-types/number.d.ts +0 -12
- package/dist/custom-types/string.d.ts +0 -25
- package/dist/custom-types/string.js +0 -172
- package/dist/expressions/assign.d.ts +0 -13
- package/dist/expressions/assign.js +0 -174
- package/dist/expressions/binary-negated-expression.d.ts +0 -18
- package/dist/expressions/call.d.ts +0 -14
- package/dist/expressions/call.js +0 -209
- package/dist/expressions/import.d.ts +0 -14
- package/dist/expressions/import.js +0 -155
- package/dist/expressions/include.d.ts +0 -13
- package/dist/expressions/list.d.ts +0 -14
- package/dist/expressions/logical-and-binary.d.ts +0 -22
- package/dist/expressions/logical-and-binary.js +0 -222
- package/dist/expressions/map.d.ts +0 -19
- package/dist/expressions/map.js +0 -197
- package/dist/expressions/path.d.ts +0 -31
- package/dist/expressions/path.js +0 -384
- package/dist/operations/argument.d.ts +0 -8
- package/dist/operations/body.d.ts +0 -8
- package/dist/operations/debugger.d.ts +0 -7
- package/dist/operations/else-if.d.ts +0 -12
- package/dist/operations/else.d.ts +0 -10
- package/dist/operations/if.d.ts +0 -12
- package/dist/operations/new.d.ts +0 -11
- package/dist/resource.d.ts +0 -9
- package/dist/resource.js +0 -29
- package/dist/typer.d.ts +0 -6
- package/dist/typer.js +0 -95
- package/dist/types/custom-type.d.ts +0 -22
- package/dist/types/custom-type.js +0 -67
- package/dist/types/expression.d.ts +0 -7
- package/dist/types/expression.js +0 -9
- package/dist/types/operation.d.ts +0 -10
package/dist/cps.js
CHANGED
|
@@ -1,872 +1,220 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
var
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
var
|
|
66
|
-
var return_1 = __importDefault(require("./operations/return"));
|
|
67
|
-
var
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return [
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return [3 /*break*/,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return [3 /*break*/,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
if (
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
case 8:
|
|
222
|
-
try {
|
|
223
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
224
|
-
}
|
|
225
|
-
finally { if (e_3) throw e_3.error; }
|
|
226
|
-
return [7 /*endfinally*/];
|
|
227
|
-
case 9: return [2 /*return*/, new while_1.default(item, {
|
|
228
|
-
body: body,
|
|
229
|
-
condition: condition
|
|
230
|
-
})];
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
},
|
|
235
|
-
'StringLiteral': function (item) {
|
|
236
|
-
return Promise.resolve(
|
|
237
|
-
// @ts-ignore: Key is always a literal
|
|
238
|
-
new string_1.default(item.value));
|
|
239
|
-
},
|
|
240
|
-
'IndexExpression': function (item) {
|
|
241
|
-
return new path_1.default(item).prepare(visit);
|
|
242
|
-
},
|
|
243
|
-
'FeatureEnvarExpression': function (_item) {
|
|
244
|
-
throw new Error('Not supported');
|
|
245
|
-
},
|
|
246
|
-
'InvalidCodeExpression': function (_item) { },
|
|
247
|
-
'IfShortcutStatement': function (item) {
|
|
248
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
249
|
-
var op, _a, _b, clausesItem, _c, _d, e_4_1;
|
|
250
|
-
var e_4, _e;
|
|
251
|
-
return __generator(this, function (_f) {
|
|
252
|
-
switch (_f.label) {
|
|
253
|
-
case 0:
|
|
254
|
-
op = new if_statement_1.default(item);
|
|
255
|
-
_f.label = 1;
|
|
256
|
-
case 1:
|
|
257
|
-
_f.trys.push([1, 6, 7, 8]);
|
|
258
|
-
_a = __values(item.clauses), _b = _a.next();
|
|
259
|
-
_f.label = 2;
|
|
260
|
-
case 2:
|
|
261
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
262
|
-
clausesItem = _b.value;
|
|
263
|
-
_d = (_c = op.clauses).push;
|
|
264
|
-
return [4 /*yield*/, visit(clausesItem)];
|
|
265
|
-
case 3:
|
|
266
|
-
_d.apply(_c, [_f.sent()]);
|
|
267
|
-
_f.label = 4;
|
|
268
|
-
case 4:
|
|
269
|
-
_b = _a.next();
|
|
270
|
-
return [3 /*break*/, 2];
|
|
271
|
-
case 5: return [3 /*break*/, 8];
|
|
272
|
-
case 6:
|
|
273
|
-
e_4_1 = _f.sent();
|
|
274
|
-
e_4 = { error: e_4_1 };
|
|
275
|
-
return [3 /*break*/, 8];
|
|
276
|
-
case 7:
|
|
277
|
-
try {
|
|
278
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
279
|
-
}
|
|
280
|
-
finally { if (e_4) throw e_4.error; }
|
|
281
|
-
return [7 /*endfinally*/];
|
|
282
|
-
case 8: return [2 /*return*/, op];
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
},
|
|
287
|
-
'IfShortcutClause': function (item) {
|
|
288
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
289
|
-
var body, condition, _a, _b, bodyItem, _c, _d, e_5_1;
|
|
290
|
-
var e_5, _e;
|
|
291
|
-
return __generator(this, function (_f) {
|
|
292
|
-
switch (_f.label) {
|
|
293
|
-
case 0:
|
|
294
|
-
body = new body_1.default(item.body);
|
|
295
|
-
return [4 /*yield*/, visit(item.condition)];
|
|
296
|
-
case 1:
|
|
297
|
-
condition = _f.sent();
|
|
298
|
-
_f.label = 2;
|
|
299
|
-
case 2:
|
|
300
|
-
_f.trys.push([2, 7, 8, 9]);
|
|
301
|
-
_a = __values(item.body), _b = _a.next();
|
|
302
|
-
_f.label = 3;
|
|
303
|
-
case 3:
|
|
304
|
-
if (!!_b.done) return [3 /*break*/, 6];
|
|
305
|
-
bodyItem = _b.value;
|
|
306
|
-
_d = (_c = body.stack).push;
|
|
307
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
308
|
-
case 4:
|
|
309
|
-
_d.apply(_c, [_f.sent()]);
|
|
310
|
-
_f.label = 5;
|
|
311
|
-
case 5:
|
|
312
|
-
_b = _a.next();
|
|
313
|
-
return [3 /*break*/, 3];
|
|
314
|
-
case 6: return [3 /*break*/, 9];
|
|
315
|
-
case 7:
|
|
316
|
-
e_5_1 = _f.sent();
|
|
317
|
-
e_5 = { error: e_5_1 };
|
|
318
|
-
return [3 /*break*/, 9];
|
|
319
|
-
case 8:
|
|
320
|
-
try {
|
|
321
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
322
|
-
}
|
|
323
|
-
finally { if (e_5) throw e_5.error; }
|
|
324
|
-
return [7 /*endfinally*/];
|
|
325
|
-
case 9: return [2 /*return*/, new if_1.default(item, {
|
|
326
|
-
condition: condition,
|
|
327
|
-
body: body
|
|
328
|
-
})];
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
},
|
|
333
|
-
'ElseifShortcutClause': function (item) {
|
|
334
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
335
|
-
var body, condition, _a, _b, bodyItem, _c, _d, e_6_1;
|
|
336
|
-
var e_6, _e;
|
|
337
|
-
return __generator(this, function (_f) {
|
|
338
|
-
switch (_f.label) {
|
|
339
|
-
case 0:
|
|
340
|
-
body = new body_1.default(item.body);
|
|
341
|
-
return [4 /*yield*/, visit(item.condition)];
|
|
342
|
-
case 1:
|
|
343
|
-
condition = _f.sent();
|
|
344
|
-
_f.label = 2;
|
|
345
|
-
case 2:
|
|
346
|
-
_f.trys.push([2, 7, 8, 9]);
|
|
347
|
-
_a = __values(item.body), _b = _a.next();
|
|
348
|
-
_f.label = 3;
|
|
349
|
-
case 3:
|
|
350
|
-
if (!!_b.done) return [3 /*break*/, 6];
|
|
351
|
-
bodyItem = _b.value;
|
|
352
|
-
_d = (_c = body.stack).push;
|
|
353
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
354
|
-
case 4:
|
|
355
|
-
_d.apply(_c, [_f.sent()]);
|
|
356
|
-
_f.label = 5;
|
|
357
|
-
case 5:
|
|
358
|
-
_b = _a.next();
|
|
359
|
-
return [3 /*break*/, 3];
|
|
360
|
-
case 6: return [3 /*break*/, 9];
|
|
361
|
-
case 7:
|
|
362
|
-
e_6_1 = _f.sent();
|
|
363
|
-
e_6 = { error: e_6_1 };
|
|
364
|
-
return [3 /*break*/, 9];
|
|
365
|
-
case 8:
|
|
366
|
-
try {
|
|
367
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
368
|
-
}
|
|
369
|
-
finally { if (e_6) throw e_6.error; }
|
|
370
|
-
return [7 /*endfinally*/];
|
|
371
|
-
case 9: return [2 /*return*/, new else_if_1.default(item, {
|
|
372
|
-
body: body,
|
|
373
|
-
condition: condition
|
|
374
|
-
})];
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
},
|
|
379
|
-
'ElseShortcutClause': function (item) {
|
|
380
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
381
|
-
var body, _a, _b, bodyItem, _c, _d, e_7_1;
|
|
382
|
-
var e_7, _e;
|
|
383
|
-
return __generator(this, function (_f) {
|
|
384
|
-
switch (_f.label) {
|
|
385
|
-
case 0:
|
|
386
|
-
body = new body_1.default(item.body);
|
|
387
|
-
_f.label = 1;
|
|
388
|
-
case 1:
|
|
389
|
-
_f.trys.push([1, 6, 7, 8]);
|
|
390
|
-
_a = __values(item.body), _b = _a.next();
|
|
391
|
-
_f.label = 2;
|
|
392
|
-
case 2:
|
|
393
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
394
|
-
bodyItem = _b.value;
|
|
395
|
-
_d = (_c = body.stack).push;
|
|
396
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
397
|
-
case 3:
|
|
398
|
-
_d.apply(_c, [_f.sent()]);
|
|
399
|
-
_f.label = 4;
|
|
400
|
-
case 4:
|
|
401
|
-
_b = _a.next();
|
|
402
|
-
return [3 /*break*/, 2];
|
|
403
|
-
case 5: return [3 /*break*/, 8];
|
|
404
|
-
case 6:
|
|
405
|
-
e_7_1 = _f.sent();
|
|
406
|
-
e_7 = { error: e_7_1 };
|
|
407
|
-
return [3 /*break*/, 8];
|
|
408
|
-
case 7:
|
|
409
|
-
try {
|
|
410
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
411
|
-
}
|
|
412
|
-
finally { if (e_7) throw e_7.error; }
|
|
413
|
-
return [7 /*endfinally*/];
|
|
414
|
-
case 8: return [2 /*return*/, new else_1.default(item, {
|
|
415
|
-
body: body
|
|
416
|
-
})];
|
|
417
|
-
}
|
|
418
|
-
});
|
|
419
|
-
});
|
|
420
|
-
},
|
|
421
|
-
'NilLiteral': function (item) {
|
|
422
|
-
return Promise.resolve(new nil_1.default());
|
|
423
|
-
},
|
|
424
|
-
'ForGenericStatement': function (item) {
|
|
425
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
426
|
-
var body, variable, iterator, _a, _b, bodyItem, _c, _d, e_8_1;
|
|
427
|
-
var e_8, _e;
|
|
428
|
-
return __generator(this, function (_f) {
|
|
429
|
-
switch (_f.label) {
|
|
430
|
-
case 0:
|
|
431
|
-
body = new body_1.default(item.body);
|
|
432
|
-
return [4 /*yield*/, visit(item.variable)];
|
|
433
|
-
case 1:
|
|
434
|
-
variable = _f.sent();
|
|
435
|
-
return [4 /*yield*/, visit(item.iterator)];
|
|
436
|
-
case 2:
|
|
437
|
-
iterator = _f.sent();
|
|
438
|
-
_f.label = 3;
|
|
439
|
-
case 3:
|
|
440
|
-
_f.trys.push([3, 8, 9, 10]);
|
|
441
|
-
_a = __values(item.body), _b = _a.next();
|
|
442
|
-
_f.label = 4;
|
|
443
|
-
case 4:
|
|
444
|
-
if (!!_b.done) return [3 /*break*/, 7];
|
|
445
|
-
bodyItem = _b.value;
|
|
446
|
-
_d = (_c = body.stack).push;
|
|
447
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
448
|
-
case 5:
|
|
449
|
-
_d.apply(_c, [_f.sent()]);
|
|
450
|
-
_f.label = 6;
|
|
451
|
-
case 6:
|
|
452
|
-
_b = _a.next();
|
|
453
|
-
return [3 /*break*/, 4];
|
|
454
|
-
case 7: return [3 /*break*/, 10];
|
|
455
|
-
case 8:
|
|
456
|
-
e_8_1 = _f.sent();
|
|
457
|
-
e_8 = { error: e_8_1 };
|
|
458
|
-
return [3 /*break*/, 10];
|
|
459
|
-
case 9:
|
|
460
|
-
try {
|
|
461
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
462
|
-
}
|
|
463
|
-
finally { if (e_8) throw e_8.error; }
|
|
464
|
-
return [7 /*endfinally*/];
|
|
465
|
-
case 10: return [2 /*return*/, new for_1.default(item, {
|
|
466
|
-
body: body,
|
|
467
|
-
variable: variable,
|
|
468
|
-
iterator: iterator
|
|
469
|
-
})];
|
|
470
|
-
}
|
|
471
|
-
});
|
|
472
|
-
});
|
|
473
|
-
},
|
|
474
|
-
'IfStatement': function (item) {
|
|
475
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
476
|
-
var op, _a, _b, clausesItem, _c, _d, e_9_1;
|
|
477
|
-
var e_9, _e;
|
|
478
|
-
return __generator(this, function (_f) {
|
|
479
|
-
switch (_f.label) {
|
|
480
|
-
case 0:
|
|
481
|
-
op = new if_statement_1.default(item);
|
|
482
|
-
_f.label = 1;
|
|
483
|
-
case 1:
|
|
484
|
-
_f.trys.push([1, 6, 7, 8]);
|
|
485
|
-
_a = __values(item.clauses), _b = _a.next();
|
|
486
|
-
_f.label = 2;
|
|
487
|
-
case 2:
|
|
488
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
489
|
-
clausesItem = _b.value;
|
|
490
|
-
_d = (_c = op.clauses).push;
|
|
491
|
-
return [4 /*yield*/, visit(clausesItem)];
|
|
492
|
-
case 3:
|
|
493
|
-
_d.apply(_c, [_f.sent()]);
|
|
494
|
-
_f.label = 4;
|
|
495
|
-
case 4:
|
|
496
|
-
_b = _a.next();
|
|
497
|
-
return [3 /*break*/, 2];
|
|
498
|
-
case 5: return [3 /*break*/, 8];
|
|
499
|
-
case 6:
|
|
500
|
-
e_9_1 = _f.sent();
|
|
501
|
-
e_9 = { error: e_9_1 };
|
|
502
|
-
return [3 /*break*/, 8];
|
|
503
|
-
case 7:
|
|
504
|
-
try {
|
|
505
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
506
|
-
}
|
|
507
|
-
finally { if (e_9) throw e_9.error; }
|
|
508
|
-
return [7 /*endfinally*/];
|
|
509
|
-
case 8: return [2 /*return*/, op];
|
|
510
|
-
}
|
|
511
|
-
});
|
|
512
|
-
});
|
|
513
|
-
},
|
|
514
|
-
'IfClause': function (item) {
|
|
515
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
516
|
-
var body, condition, _a, _b, bodyItem, _c, _d, e_10_1;
|
|
517
|
-
var e_10, _e;
|
|
518
|
-
return __generator(this, function (_f) {
|
|
519
|
-
switch (_f.label) {
|
|
520
|
-
case 0:
|
|
521
|
-
body = new body_1.default(item.body);
|
|
522
|
-
return [4 /*yield*/, visit(item.condition)];
|
|
523
|
-
case 1:
|
|
524
|
-
condition = _f.sent();
|
|
525
|
-
_f.label = 2;
|
|
526
|
-
case 2:
|
|
527
|
-
_f.trys.push([2, 7, 8, 9]);
|
|
528
|
-
_a = __values(item.body), _b = _a.next();
|
|
529
|
-
_f.label = 3;
|
|
530
|
-
case 3:
|
|
531
|
-
if (!!_b.done) return [3 /*break*/, 6];
|
|
532
|
-
bodyItem = _b.value;
|
|
533
|
-
_d = (_c = body.stack).push;
|
|
534
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
535
|
-
case 4:
|
|
536
|
-
_d.apply(_c, [_f.sent()]);
|
|
537
|
-
_f.label = 5;
|
|
538
|
-
case 5:
|
|
539
|
-
_b = _a.next();
|
|
540
|
-
return [3 /*break*/, 3];
|
|
541
|
-
case 6: return [3 /*break*/, 9];
|
|
542
|
-
case 7:
|
|
543
|
-
e_10_1 = _f.sent();
|
|
544
|
-
e_10 = { error: e_10_1 };
|
|
545
|
-
return [3 /*break*/, 9];
|
|
546
|
-
case 8:
|
|
547
|
-
try {
|
|
548
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
549
|
-
}
|
|
550
|
-
finally { if (e_10) throw e_10.error; }
|
|
551
|
-
return [7 /*endfinally*/];
|
|
552
|
-
case 9: return [2 /*return*/, new if_1.default(item, {
|
|
553
|
-
body: body,
|
|
554
|
-
condition: condition
|
|
555
|
-
})];
|
|
556
|
-
}
|
|
557
|
-
});
|
|
558
|
-
});
|
|
559
|
-
},
|
|
560
|
-
'ElseifClause': function (item) {
|
|
561
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
562
|
-
var body, condition, _a, _b, bodyItem, _c, _d, e_11_1;
|
|
563
|
-
var e_11, _e;
|
|
564
|
-
return __generator(this, function (_f) {
|
|
565
|
-
switch (_f.label) {
|
|
566
|
-
case 0:
|
|
567
|
-
body = new body_1.default(item.body);
|
|
568
|
-
return [4 /*yield*/, visit(item.condition)];
|
|
569
|
-
case 1:
|
|
570
|
-
condition = _f.sent();
|
|
571
|
-
_f.label = 2;
|
|
572
|
-
case 2:
|
|
573
|
-
_f.trys.push([2, 7, 8, 9]);
|
|
574
|
-
_a = __values(item.body), _b = _a.next();
|
|
575
|
-
_f.label = 3;
|
|
576
|
-
case 3:
|
|
577
|
-
if (!!_b.done) return [3 /*break*/, 6];
|
|
578
|
-
bodyItem = _b.value;
|
|
579
|
-
_d = (_c = body.stack).push;
|
|
580
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
581
|
-
case 4:
|
|
582
|
-
_d.apply(_c, [_f.sent()]);
|
|
583
|
-
_f.label = 5;
|
|
584
|
-
case 5:
|
|
585
|
-
_b = _a.next();
|
|
586
|
-
return [3 /*break*/, 3];
|
|
587
|
-
case 6: return [3 /*break*/, 9];
|
|
588
|
-
case 7:
|
|
589
|
-
e_11_1 = _f.sent();
|
|
590
|
-
e_11 = { error: e_11_1 };
|
|
591
|
-
return [3 /*break*/, 9];
|
|
592
|
-
case 8:
|
|
593
|
-
try {
|
|
594
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
595
|
-
}
|
|
596
|
-
finally { if (e_11) throw e_11.error; }
|
|
597
|
-
return [7 /*endfinally*/];
|
|
598
|
-
case 9: return [2 /*return*/, new else_if_1.default(item, {
|
|
599
|
-
body: body,
|
|
600
|
-
condition: condition
|
|
601
|
-
})];
|
|
602
|
-
}
|
|
603
|
-
});
|
|
604
|
-
});
|
|
605
|
-
},
|
|
606
|
-
'ElseClause': function (item) {
|
|
607
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
608
|
-
var body, _a, _b, bodyItem, _c, _d, e_12_1;
|
|
609
|
-
var e_12, _e;
|
|
610
|
-
return __generator(this, function (_f) {
|
|
611
|
-
switch (_f.label) {
|
|
612
|
-
case 0:
|
|
613
|
-
body = new body_1.default(item.body);
|
|
614
|
-
_f.label = 1;
|
|
615
|
-
case 1:
|
|
616
|
-
_f.trys.push([1, 6, 7, 8]);
|
|
617
|
-
_a = __values(item.body), _b = _a.next();
|
|
618
|
-
_f.label = 2;
|
|
619
|
-
case 2:
|
|
620
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
621
|
-
bodyItem = _b.value;
|
|
622
|
-
_d = (_c = body.stack).push;
|
|
623
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
624
|
-
case 3:
|
|
625
|
-
_d.apply(_c, [_f.sent()]);
|
|
626
|
-
_f.label = 4;
|
|
627
|
-
case 4:
|
|
628
|
-
_b = _a.next();
|
|
629
|
-
return [3 /*break*/, 2];
|
|
630
|
-
case 5: return [3 /*break*/, 8];
|
|
631
|
-
case 6:
|
|
632
|
-
e_12_1 = _f.sent();
|
|
633
|
-
e_12 = { error: e_12_1 };
|
|
634
|
-
return [3 /*break*/, 8];
|
|
635
|
-
case 7:
|
|
636
|
-
try {
|
|
637
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
638
|
-
}
|
|
639
|
-
finally { if (e_12) throw e_12.error; }
|
|
640
|
-
return [7 /*endfinally*/];
|
|
641
|
-
case 8: return [2 /*return*/, new else_1.default(item, {
|
|
642
|
-
body: body
|
|
643
|
-
})];
|
|
644
|
-
}
|
|
645
|
-
});
|
|
646
|
-
});
|
|
647
|
-
},
|
|
648
|
-
'NegationExpression': function (item) {
|
|
649
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
650
|
-
var arg;
|
|
651
|
-
return __generator(this, function (_a) {
|
|
652
|
-
switch (_a.label) {
|
|
653
|
-
case 0: return [4 /*yield*/, visit(item.argument)];
|
|
654
|
-
case 1:
|
|
655
|
-
arg = _a.sent();
|
|
656
|
-
return [2 /*return*/, new not_1.default(item, { arg: arg })];
|
|
657
|
-
}
|
|
658
|
-
});
|
|
659
|
-
});
|
|
660
|
-
},
|
|
661
|
-
'ContinueStatement': function (item) {
|
|
662
|
-
return Promise.resolve(new continue_1.default(item));
|
|
663
|
-
},
|
|
664
|
-
'BreakStatement': function (item) {
|
|
665
|
-
return Promise.resolve(new break_1.default(item));
|
|
666
|
-
},
|
|
667
|
-
'CallExpression': function (item) {
|
|
668
|
-
return new call_1.default(item).prepare(visit);
|
|
669
|
-
},
|
|
670
|
-
'CallStatement': function (item) {
|
|
671
|
-
return visit(item.expression);
|
|
672
|
-
},
|
|
673
|
-
'FeatureImportExpression': function (item) {
|
|
674
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
675
|
-
var resourceHandler, target, code, chunk;
|
|
676
|
-
return __generator(this, function (_a) {
|
|
677
|
-
switch (_a.label) {
|
|
678
|
-
case 0:
|
|
679
|
-
resourceHandler = context.resourceHandler;
|
|
680
|
-
return [4 /*yield*/, resourceHandler.getTargetRelativeTo(context.target,
|
|
681
|
-
// @ts-ignore: FileSystemDirectory is always a string
|
|
682
|
-
item.path)];
|
|
683
|
-
case 1:
|
|
684
|
-
target = _a.sent();
|
|
685
|
-
return [4 /*yield*/, context.resourceHandler.get(target)];
|
|
686
|
-
case 2:
|
|
687
|
-
code = _a.sent();
|
|
688
|
-
context.currentTarget = target;
|
|
689
|
-
return [4 /*yield*/, (new import_1.default(item, target, code).prepare(visit))];
|
|
690
|
-
case 3:
|
|
691
|
-
chunk = _a.sent();
|
|
692
|
-
context.currentTarget = context.target;
|
|
693
|
-
return [2 /*return*/, chunk];
|
|
694
|
-
}
|
|
695
|
-
});
|
|
696
|
-
});
|
|
697
|
-
},
|
|
698
|
-
'FeatureIncludeExpression': function (item) {
|
|
699
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
700
|
-
var resourceHandler, target, code, chunk;
|
|
701
|
-
return __generator(this, function (_a) {
|
|
702
|
-
switch (_a.label) {
|
|
703
|
-
case 0:
|
|
704
|
-
resourceHandler = context.resourceHandler;
|
|
705
|
-
return [4 /*yield*/, resourceHandler.getTargetRelativeTo(context.target,
|
|
706
|
-
// @ts-ignore: FileSystemDirectory is always a string
|
|
707
|
-
item.path)];
|
|
708
|
-
case 1:
|
|
709
|
-
target = _a.sent();
|
|
710
|
-
return [4 /*yield*/, context.resourceHandler.get(target)];
|
|
711
|
-
case 2:
|
|
712
|
-
code = _a.sent();
|
|
713
|
-
context.currentTarget = target;
|
|
714
|
-
return [4 /*yield*/, (new include_1.default(item, target, code).prepare(visit))];
|
|
715
|
-
case 3:
|
|
716
|
-
chunk = _a.sent();
|
|
717
|
-
context.currentTarget = context.target;
|
|
718
|
-
return [2 /*return*/, chunk];
|
|
719
|
-
}
|
|
720
|
-
});
|
|
721
|
-
});
|
|
722
|
-
},
|
|
723
|
-
'ImportCodeExpression': function (item) {
|
|
724
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
725
|
-
var resourceHandler, target, code, chunk;
|
|
726
|
-
return __generator(this, function (_a) {
|
|
727
|
-
switch (_a.label) {
|
|
728
|
-
case 0:
|
|
729
|
-
resourceHandler = context.resourceHandler;
|
|
730
|
-
return [4 /*yield*/, resourceHandler.getTargetRelativeTo(context.target,
|
|
731
|
-
// @ts-ignore: FileSystemDirectory is always a string
|
|
732
|
-
item.fileSystemDirectory)];
|
|
733
|
-
case 1:
|
|
734
|
-
target = _a.sent();
|
|
735
|
-
return [4 /*yield*/, context.resourceHandler.get(target)];
|
|
736
|
-
case 2:
|
|
737
|
-
code = _a.sent();
|
|
738
|
-
context.currentTarget = target;
|
|
739
|
-
return [4 /*yield*/, (new include_1.default(item, target, code).prepare(visit))];
|
|
740
|
-
case 3:
|
|
741
|
-
chunk = _a.sent();
|
|
742
|
-
context.currentTarget = context.target;
|
|
743
|
-
return [2 /*return*/, chunk];
|
|
744
|
-
}
|
|
745
|
-
});
|
|
746
|
-
});
|
|
747
|
-
},
|
|
748
|
-
'FeatureDebuggerExpression': function (item) {
|
|
749
|
-
return Promise.resolve(new debugger_1.default(item));
|
|
750
|
-
},
|
|
751
|
-
'ListConstructorExpression': function (item) {
|
|
752
|
-
return new list_1.default(item).prepare(visit);
|
|
753
|
-
},
|
|
754
|
-
'BooleanLiteral': function (item) {
|
|
755
|
-
return Promise.resolve(
|
|
756
|
-
// @ts-ignore: Key is always a literal
|
|
757
|
-
new boolean_1.default(item.value));
|
|
758
|
-
},
|
|
759
|
-
'EmptyExpression': function (item) { },
|
|
760
|
-
'BinaryExpression': function (item) {
|
|
761
|
-
return new logical_and_binary_1.default(item).prepare(visit);
|
|
762
|
-
},
|
|
763
|
-
'BinaryNegatedExpression': function (item) {
|
|
764
|
-
return new binary_negated_expression_1.default(item).prepare(visit);
|
|
765
|
-
},
|
|
766
|
-
'LogicalExpression': function (item) {
|
|
767
|
-
return new logical_and_binary_1.default(item).prepare(visit);
|
|
768
|
-
},
|
|
769
|
-
'UnaryExpression': function (item) {
|
|
770
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
771
|
-
var arg, op;
|
|
772
|
-
return __generator(this, function (_a) {
|
|
773
|
-
switch (_a.label) {
|
|
774
|
-
case 0: return [4 /*yield*/, visit(item.argument)];
|
|
775
|
-
case 1:
|
|
776
|
-
arg = _a.sent();
|
|
777
|
-
if ('@' === item.operator) {
|
|
778
|
-
op = new reference_1.default(item, { arg: arg });
|
|
779
|
-
}
|
|
780
|
-
else if ('new' === item.operator) {
|
|
781
|
-
op = new new_1.default(item, { arg: arg });
|
|
782
|
-
}
|
|
783
|
-
else {
|
|
784
|
-
throw new Error('Unknown unary expression.');
|
|
785
|
-
}
|
|
786
|
-
return [2 /*return*/, op];
|
|
787
|
-
}
|
|
788
|
-
});
|
|
789
|
-
});
|
|
790
|
-
},
|
|
791
|
-
'Chunk': function (item) {
|
|
792
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
793
|
-
var op, _a, _b, bodyItem, _c, _d, e_13_1;
|
|
794
|
-
var e_13, _e;
|
|
795
|
-
return __generator(this, function (_f) {
|
|
796
|
-
switch (_f.label) {
|
|
797
|
-
case 0:
|
|
798
|
-
op = new body_1.default(item.body);
|
|
799
|
-
_f.label = 1;
|
|
800
|
-
case 1:
|
|
801
|
-
_f.trys.push([1, 6, 7, 8]);
|
|
802
|
-
_a = __values(item.body), _b = _a.next();
|
|
803
|
-
_f.label = 2;
|
|
804
|
-
case 2:
|
|
805
|
-
if (!!_b.done) return [3 /*break*/, 5];
|
|
806
|
-
bodyItem = _b.value;
|
|
807
|
-
_d = (_c = op.stack).push;
|
|
808
|
-
return [4 /*yield*/, visit(bodyItem)];
|
|
809
|
-
case 3:
|
|
810
|
-
_d.apply(_c, [_f.sent()]);
|
|
811
|
-
_f.label = 4;
|
|
812
|
-
case 4:
|
|
813
|
-
_b = _a.next();
|
|
814
|
-
return [3 /*break*/, 2];
|
|
815
|
-
case 5: return [3 /*break*/, 8];
|
|
816
|
-
case 6:
|
|
817
|
-
e_13_1 = _f.sent();
|
|
818
|
-
e_13 = { error: e_13_1 };
|
|
819
|
-
return [3 /*break*/, 8];
|
|
820
|
-
case 7:
|
|
821
|
-
try {
|
|
822
|
-
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
823
|
-
}
|
|
824
|
-
finally { if (e_13) throw e_13.error; }
|
|
825
|
-
return [7 /*endfinally*/];
|
|
826
|
-
case 8: return [2 /*return*/, op];
|
|
827
|
-
}
|
|
828
|
-
});
|
|
829
|
-
});
|
|
830
|
-
}
|
|
831
|
-
};
|
|
832
|
-
};
|
|
833
|
-
exports.CPSMap = CPSMap;
|
|
834
|
-
var CPS = /** @class */ (function () {
|
|
835
|
-
function CPS(context) {
|
|
836
|
-
var me = this;
|
|
837
|
-
me.cpsMap = (0, exports.CPSMap)(me.visit.bind(me), context);
|
|
838
|
-
me.context = context;
|
|
839
|
-
context.currentTarget = context.target;
|
|
840
|
-
}
|
|
841
|
-
CPS.prototype.visit = function (o) {
|
|
842
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
843
|
-
var me, fn, result;
|
|
844
|
-
return __generator(this, function (_a) {
|
|
845
|
-
switch (_a.label) {
|
|
846
|
-
case 0:
|
|
847
|
-
me = this;
|
|
848
|
-
if (o == null)
|
|
849
|
-
return [2 /*return*/, ''];
|
|
850
|
-
if (o.type == null) {
|
|
851
|
-
console.error('Error ast type:', o);
|
|
852
|
-
throw new Error("Current CPS iteration item does not have a type.");
|
|
853
|
-
}
|
|
854
|
-
fn = me.cpsMap[o.type];
|
|
855
|
-
if (fn == null) {
|
|
856
|
-
console.error('Error ast:', o);
|
|
857
|
-
throw new Error("".concat(o.type, " is not a supported AST type."));
|
|
858
|
-
}
|
|
859
|
-
return [4 /*yield*/, fn.call(me, o)];
|
|
860
|
-
case 1:
|
|
861
|
-
result = _a.sent();
|
|
862
|
-
if (result instanceof operation_1.Operation || result instanceof expression_1.Expression) {
|
|
863
|
-
result.target = me.context.currentTarget;
|
|
864
|
-
}
|
|
865
|
-
return [2 /*return*/, result];
|
|
866
|
-
}
|
|
867
|
-
});
|
|
868
|
-
});
|
|
869
|
-
};
|
|
870
|
-
return CPS;
|
|
871
|
-
}());
|
|
872
|
-
exports.default = CPS;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.CPSContext = void 0;
|
|
43
|
+
var greybel_core_1 = require("greybel-core");
|
|
44
|
+
var greyscript_core_1 = require("greyscript-core");
|
|
45
|
+
var assign_1 = __importDefault(require("./operations/assign"));
|
|
46
|
+
var break_1 = __importDefault(require("./operations/break"));
|
|
47
|
+
var call_1 = __importDefault(require("./operations/call"));
|
|
48
|
+
var chunk_1 = __importDefault(require("./operations/chunk"));
|
|
49
|
+
var continue_1 = __importDefault(require("./operations/continue"));
|
|
50
|
+
var debugger_statement_1 = __importDefault(require("./operations/debugger-statement"));
|
|
51
|
+
var evaluate_1 = __importDefault(require("./operations/evaluate"));
|
|
52
|
+
var for_1 = __importDefault(require("./operations/for"));
|
|
53
|
+
var function_1 = __importDefault(require("./operations/function"));
|
|
54
|
+
var function_reference_1 = __importDefault(require("./operations/function-reference"));
|
|
55
|
+
var if_statement_1 = __importDefault(require("./operations/if-statement"));
|
|
56
|
+
var import_1 = __importDefault(require("./operations/import"));
|
|
57
|
+
var include_1 = __importDefault(require("./operations/include"));
|
|
58
|
+
var list_1 = __importDefault(require("./operations/list"));
|
|
59
|
+
var literal_1 = __importDefault(require("./operations/literal"));
|
|
60
|
+
var map_1 = __importDefault(require("./operations/map"));
|
|
61
|
+
var negated_binary_1 = __importDefault(require("./operations/negated-binary"));
|
|
62
|
+
var new_instance_1 = __importDefault(require("./operations/new-instance"));
|
|
63
|
+
var noop_1 = __importDefault(require("./operations/noop"));
|
|
64
|
+
var not_1 = __importDefault(require("./operations/not"));
|
|
65
|
+
var resolve_1 = __importDefault(require("./operations/resolve"));
|
|
66
|
+
var return_1 = __importDefault(require("./operations/return"));
|
|
67
|
+
var while_1 = __importDefault(require("./operations/while"));
|
|
68
|
+
var CPSContext = /** @class */ (function () {
|
|
69
|
+
function CPSContext(target, handler, currentTarget) {
|
|
70
|
+
if (currentTarget === void 0) { currentTarget = null; }
|
|
71
|
+
this.target = target;
|
|
72
|
+
this.handler = handler;
|
|
73
|
+
this.currentTarget = currentTarget;
|
|
74
|
+
}
|
|
75
|
+
CPSContext.prototype.getCurrentTarget = function () {
|
|
76
|
+
return this.currentTarget;
|
|
77
|
+
};
|
|
78
|
+
return CPSContext;
|
|
79
|
+
}());
|
|
80
|
+
exports.CPSContext = CPSContext;
|
|
81
|
+
var CPS = /** @class */ (function () {
|
|
82
|
+
function CPS(context) {
|
|
83
|
+
this.context = context;
|
|
84
|
+
}
|
|
85
|
+
CPS.prototype.visit = function (item) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
+
var context, visit, _a, importExpr, target, code, importStatement, includeExpr, target, code, importStatement, importExpr, target, code, importStatement, unaryExpr;
|
|
88
|
+
return __generator(this, function (_b) {
|
|
89
|
+
switch (_b.label) {
|
|
90
|
+
case 0:
|
|
91
|
+
context = this.context;
|
|
92
|
+
visit = this.visit.bind(this);
|
|
93
|
+
_a = item.type;
|
|
94
|
+
switch (_a) {
|
|
95
|
+
case greyscript_core_1.ASTType.MapConstructorExpression: return [3 /*break*/, 1];
|
|
96
|
+
case greyscript_core_1.ASTType.ListConstructorExpression: return [3 /*break*/, 2];
|
|
97
|
+
case greyscript_core_1.ASTType.AssignmentStatement: return [3 /*break*/, 3];
|
|
98
|
+
case greyscript_core_1.ASTType.MemberExpression: return [3 /*break*/, 4];
|
|
99
|
+
case greyscript_core_1.ASTType.Identifier: return [3 /*break*/, 4];
|
|
100
|
+
case greyscript_core_1.ASTType.IndexExpression: return [3 /*break*/, 4];
|
|
101
|
+
case greyscript_core_1.ASTType.FunctionDeclaration: return [3 /*break*/, 5];
|
|
102
|
+
case greyscript_core_1.ASTType.InvalidCodeExpression: return [3 /*break*/, 6];
|
|
103
|
+
case greyscript_core_1.ASTType.WhileStatement: return [3 /*break*/, 7];
|
|
104
|
+
case greyscript_core_1.ASTType.ForGenericStatement: return [3 /*break*/, 8];
|
|
105
|
+
case greyscript_core_1.ASTType.IfStatement: return [3 /*break*/, 9];
|
|
106
|
+
case greyscript_core_1.ASTType.IfShortcutStatement: return [3 /*break*/, 9];
|
|
107
|
+
case greyscript_core_1.ASTType.ReturnStatement: return [3 /*break*/, 10];
|
|
108
|
+
case greyscript_core_1.ASTType.BreakStatement: return [3 /*break*/, 11];
|
|
109
|
+
case greyscript_core_1.ASTType.ContinueStatement: return [3 /*break*/, 12];
|
|
110
|
+
case greyscript_core_1.ASTType.CallExpression: return [3 /*break*/, 13];
|
|
111
|
+
case greyscript_core_1.ASTType.CallStatement: return [3 /*break*/, 14];
|
|
112
|
+
case greybel_core_1.ASTType.FeatureImportExpression: return [3 /*break*/, 15];
|
|
113
|
+
case greybel_core_1.ASTType.FeatureIncludeExpression: return [3 /*break*/, 19];
|
|
114
|
+
case greyscript_core_1.ASTType.ImportCodeExpression: return [3 /*break*/, 23];
|
|
115
|
+
case greybel_core_1.ASTType.FeatureDebuggerExpression: return [3 /*break*/, 27];
|
|
116
|
+
case greyscript_core_1.ASTType.BooleanLiteral: return [3 /*break*/, 28];
|
|
117
|
+
case greyscript_core_1.ASTType.StringLiteral: return [3 /*break*/, 28];
|
|
118
|
+
case greyscript_core_1.ASTType.NumericLiteral: return [3 /*break*/, 28];
|
|
119
|
+
case greyscript_core_1.ASTType.NilLiteral: return [3 /*break*/, 28];
|
|
120
|
+
case greyscript_core_1.ASTType.EmptyExpression: return [3 /*break*/, 29];
|
|
121
|
+
case greyscript_core_1.ASTType.BinaryExpression: return [3 /*break*/, 30];
|
|
122
|
+
case greyscript_core_1.ASTType.LogicalExpression: return [3 /*break*/, 30];
|
|
123
|
+
case greyscript_core_1.ASTType.NegationExpression: return [3 /*break*/, 31];
|
|
124
|
+
case greyscript_core_1.ASTType.BinaryNegatedExpression: return [3 /*break*/, 32];
|
|
125
|
+
case greyscript_core_1.ASTType.UnaryExpression: return [3 /*break*/, 33];
|
|
126
|
+
case greyscript_core_1.ASTType.Chunk: return [3 /*break*/, 34];
|
|
127
|
+
}
|
|
128
|
+
return [3 /*break*/, 35];
|
|
129
|
+
case 1: return [2 /*return*/, new map_1.default(item, context.target).build(visit)];
|
|
130
|
+
case 2: return [2 /*return*/, new list_1.default(item, context.target).build(visit)];
|
|
131
|
+
case 3: return [2 /*return*/, new assign_1.default(item, context.target).build(visit)];
|
|
132
|
+
case 4: return [2 /*return*/, new resolve_1.default(item, context.target).build(visit)];
|
|
133
|
+
case 5: return [2 /*return*/, new function_1.default(item, context.target).build(visit)];
|
|
134
|
+
case 6: return [2 /*return*/, new noop_1.default(item).build(visit)];
|
|
135
|
+
case 7: return [2 /*return*/, new while_1.default(item, context.target).build(visit)];
|
|
136
|
+
case 8: return [2 /*return*/, new for_1.default(item, context.target).build(visit)];
|
|
137
|
+
case 9: return [2 /*return*/, new if_statement_1.default(item, context.target).build(visit)];
|
|
138
|
+
case 10: return [2 /*return*/, new return_1.default(item, context.target).build(visit)];
|
|
139
|
+
case 11: return [2 /*return*/, new break_1.default(item, context.target).build(visit)];
|
|
140
|
+
case 12: return [2 /*return*/, new continue_1.default(item, context.target).build(visit)];
|
|
141
|
+
case 13: return [2 /*return*/, new call_1.default(item, context.target).build(visit)];
|
|
142
|
+
case 14: return [2 /*return*/, visit(item.expression)];
|
|
143
|
+
case 15:
|
|
144
|
+
importExpr = item;
|
|
145
|
+
return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(context.target, importExpr.path)];
|
|
146
|
+
case 16:
|
|
147
|
+
target = _b.sent();
|
|
148
|
+
return [4 /*yield*/, context.handler.resourceHandler.get(target)];
|
|
149
|
+
case 17:
|
|
150
|
+
code = _b.sent();
|
|
151
|
+
if (code == null) {
|
|
152
|
+
throw new Error("Cannot find import ".concat(context.target, "."));
|
|
153
|
+
}
|
|
154
|
+
context.currentTarget = target;
|
|
155
|
+
return [4 /*yield*/, new import_1.default(importExpr, target, code).build(visit)];
|
|
156
|
+
case 18:
|
|
157
|
+
importStatement = _b.sent();
|
|
158
|
+
context.currentTarget = context.target;
|
|
159
|
+
return [2 /*return*/, importStatement];
|
|
160
|
+
case 19:
|
|
161
|
+
includeExpr = item;
|
|
162
|
+
return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(context.target, includeExpr.path)];
|
|
163
|
+
case 20:
|
|
164
|
+
target = _b.sent();
|
|
165
|
+
return [4 /*yield*/, context.handler.resourceHandler.get(target)];
|
|
166
|
+
case 21:
|
|
167
|
+
code = _b.sent();
|
|
168
|
+
if (code == null) {
|
|
169
|
+
throw new Error("Cannot find include ".concat(context.target, "."));
|
|
170
|
+
}
|
|
171
|
+
context.currentTarget = target;
|
|
172
|
+
return [4 /*yield*/, new include_1.default(includeExpr, target, code).build(visit)];
|
|
173
|
+
case 22:
|
|
174
|
+
importStatement = _b.sent();
|
|
175
|
+
context.currentTarget = context.target;
|
|
176
|
+
return [2 /*return*/, importStatement];
|
|
177
|
+
case 23:
|
|
178
|
+
importExpr = item;
|
|
179
|
+
return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(context.target, importExpr.fileSystemDirectory)];
|
|
180
|
+
case 24:
|
|
181
|
+
target = _b.sent();
|
|
182
|
+
return [4 /*yield*/, context.handler.resourceHandler.get(target)];
|
|
183
|
+
case 25:
|
|
184
|
+
code = _b.sent();
|
|
185
|
+
if (code == null) {
|
|
186
|
+
throw new Error("Cannot find native import ".concat(context.target, "."));
|
|
187
|
+
}
|
|
188
|
+
context.currentTarget = target;
|
|
189
|
+
return [4 /*yield*/, new include_1.default(importExpr, target, code).build(visit)];
|
|
190
|
+
case 26:
|
|
191
|
+
importStatement = _b.sent();
|
|
192
|
+
context.currentTarget = context.target;
|
|
193
|
+
return [2 /*return*/, importStatement];
|
|
194
|
+
case 27: return [2 /*return*/, new debugger_statement_1.default(item, context.target)];
|
|
195
|
+
case 28: return [2 /*return*/, new literal_1.default(item, context.target).build(visit)];
|
|
196
|
+
case 29: return [2 /*return*/, new noop_1.default(item, context.target).build(visit)];
|
|
197
|
+
case 30: return [2 /*return*/, new evaluate_1.default(item, context.target).build(visit)];
|
|
198
|
+
case 31: return [2 /*return*/, new not_1.default(item, context.target).build(visit)];
|
|
199
|
+
case 32: return [2 /*return*/, new negated_binary_1.default(item, context.target).build(visit)];
|
|
200
|
+
case 33:
|
|
201
|
+
{
|
|
202
|
+
unaryExpr = item;
|
|
203
|
+
if (unaryExpr.operator === 'new') {
|
|
204
|
+
return [2 /*return*/, new new_instance_1.default(unaryExpr).build(visit)];
|
|
205
|
+
}
|
|
206
|
+
else if (unaryExpr.operator === '@') {
|
|
207
|
+
return [2 /*return*/, new function_reference_1.default(unaryExpr).build(visit)];
|
|
208
|
+
}
|
|
209
|
+
throw new Error('Unknown unary expression.');
|
|
210
|
+
}
|
|
211
|
+
_b.label = 34;
|
|
212
|
+
case 34: return [2 /*return*/, new chunk_1.default(item, context.target).build(visit)];
|
|
213
|
+
case 35: throw new Error("Unexpected AST type ".concat(item.type, "."));
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
return CPS;
|
|
219
|
+
}());
|
|
220
|
+
exports.default = CPS;
|