greybel-interpreter 0.7.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintrc +48 -0
  3. package/LICENSE +21 -21
  4. package/README.md +2 -2
  5. package/dist/context.d.ts +107 -98
  6. package/dist/context.js +358 -456
  7. package/dist/cps.d.ts +15 -17
  8. package/dist/cps.js +220 -872
  9. package/dist/handler/error.d.ts +6 -0
  10. package/dist/{operations/debugger.js → handler/error.js} +35 -32
  11. package/dist/handler/output.d.ts +6 -0
  12. package/dist/{operations/if.js → handler/output.js} +35 -31
  13. package/dist/handler/resource.d.ts +12 -0
  14. package/dist/handler/resource.js +51 -0
  15. package/dist/handler-container.d.ts +14 -0
  16. package/dist/handler-container.js +16 -0
  17. package/dist/index.d.ts +44 -36
  18. package/dist/index.js +129 -93
  19. package/dist/interpreter.d.ts +39 -29
  20. package/dist/interpreter.js +292 -210
  21. package/dist/intrinsics-container.d.ts +7 -0
  22. package/dist/intrinsics-container.js +19 -0
  23. package/dist/operations/assign.d.ts +13 -0
  24. package/dist/operations/assign.js +111 -0
  25. package/dist/operations/block.d.ts +12 -0
  26. package/dist/operations/{body.js → block.js} +108 -140
  27. package/dist/operations/break.d.ts +10 -7
  28. package/dist/operations/break.js +41 -34
  29. package/dist/operations/call.d.ts +13 -0
  30. package/dist/operations/call.js +124 -0
  31. package/dist/operations/chunk.d.ts +12 -0
  32. package/dist/operations/chunk.js +85 -0
  33. package/dist/operations/continue.d.ts +10 -7
  34. package/dist/operations/continue.js +41 -34
  35. package/dist/operations/debugger-statement.d.ts +10 -0
  36. package/dist/operations/{else-if.js → debugger-statement.js} +39 -31
  37. package/dist/operations/evaluate.d.ts +39 -0
  38. package/dist/operations/evaluate.js +366 -0
  39. package/dist/operations/for.d.ts +15 -16
  40. package/dist/operations/for.js +146 -143
  41. package/dist/operations/function-reference.d.ts +12 -0
  42. package/dist/operations/function-reference.js +103 -0
  43. package/dist/operations/function.d.ts +12 -26
  44. package/dist/operations/function.js +198 -145
  45. package/dist/operations/if-statement.d.ts +19 -8
  46. package/dist/operations/if-statement.js +181 -169
  47. package/dist/operations/import.d.ts +14 -0
  48. package/dist/{expressions/include.js → operations/import.js} +115 -132
  49. package/dist/operations/include.d.ts +13 -0
  50. package/dist/operations/include.js +95 -0
  51. package/dist/operations/list.d.ts +11 -0
  52. package/dist/{expressions → operations}/list.js +111 -142
  53. package/dist/operations/literal.d.ts +11 -0
  54. package/dist/operations/literal.js +58 -0
  55. package/dist/operations/map.d.ts +11 -0
  56. package/dist/operations/{argument.js → map.js} +167 -145
  57. package/dist/operations/negated-binary.d.ts +11 -0
  58. package/dist/{expressions/binary-negated-expression.js → operations/negated-binary.js} +109 -127
  59. package/dist/operations/new-instance.d.ts +11 -0
  60. package/dist/operations/{new.js → new-instance.js} +100 -97
  61. package/dist/operations/noop.d.ts +9 -0
  62. package/dist/operations/{else.js → noop.js} +36 -30
  63. package/dist/operations/not.d.ts +11 -11
  64. package/dist/operations/not.js +96 -96
  65. package/dist/operations/operation.d.ts +13 -0
  66. package/dist/operations/operation.js +11 -0
  67. package/dist/operations/reference.d.ts +9 -11
  68. package/dist/operations/reference.js +37 -103
  69. package/dist/operations/resolve.d.ts +38 -0
  70. package/dist/operations/resolve.js +330 -0
  71. package/dist/operations/return.d.ts +11 -11
  72. package/dist/operations/return.js +101 -106
  73. package/dist/operations/while.d.ts +13 -14
  74. package/dist/operations/while.js +129 -145
  75. package/dist/types/boolean.d.ts +11 -0
  76. package/dist/{custom-types → types}/boolean.js +46 -47
  77. package/dist/types/default.d.ts +11 -0
  78. package/dist/types/default.js +20 -0
  79. package/dist/types/function.d.ts +32 -0
  80. package/dist/types/function.js +174 -0
  81. package/dist/types/generics.d.ts +17 -0
  82. package/dist/types/{operation.js → generics.js} +40 -38
  83. package/dist/types/interface.d.ts +22 -0
  84. package/dist/types/interface.js +102 -0
  85. package/dist/types/list.d.ts +31 -0
  86. package/dist/types/list.js +227 -0
  87. package/dist/types/map.d.ts +30 -0
  88. package/dist/types/map.js +224 -0
  89. package/dist/types/nil.d.ts +9 -0
  90. package/dist/{custom-types → types}/nil.js +44 -44
  91. package/dist/types/number.d.ts +11 -0
  92. package/dist/{custom-types → types}/number.js +46 -47
  93. package/dist/types/string.d.ts +33 -0
  94. package/dist/types/string.js +149 -0
  95. package/dist/utils/path.d.ts +10 -0
  96. package/dist/utils/path.js +59 -0
  97. package/package.json +58 -44
  98. package/dist/custom-types/boolean.d.ts +0 -12
  99. package/dist/custom-types/list.d.ts +0 -26
  100. package/dist/custom-types/list.js +0 -236
  101. package/dist/custom-types/map.d.ts +0 -26
  102. package/dist/custom-types/map.js +0 -245
  103. package/dist/custom-types/nil.d.ts +0 -10
  104. package/dist/custom-types/number.d.ts +0 -12
  105. package/dist/custom-types/string.d.ts +0 -25
  106. package/dist/custom-types/string.js +0 -172
  107. package/dist/expressions/assign.d.ts +0 -13
  108. package/dist/expressions/assign.js +0 -174
  109. package/dist/expressions/binary-negated-expression.d.ts +0 -18
  110. package/dist/expressions/call.d.ts +0 -14
  111. package/dist/expressions/call.js +0 -209
  112. package/dist/expressions/import.d.ts +0 -14
  113. package/dist/expressions/import.js +0 -155
  114. package/dist/expressions/include.d.ts +0 -13
  115. package/dist/expressions/list.d.ts +0 -14
  116. package/dist/expressions/logical-and-binary.d.ts +0 -22
  117. package/dist/expressions/logical-and-binary.js +0 -222
  118. package/dist/expressions/map.d.ts +0 -19
  119. package/dist/expressions/map.js +0 -197
  120. package/dist/expressions/path.d.ts +0 -31
  121. package/dist/expressions/path.js +0 -384
  122. package/dist/operations/argument.d.ts +0 -8
  123. package/dist/operations/body.d.ts +0 -8
  124. package/dist/operations/debugger.d.ts +0 -7
  125. package/dist/operations/else-if.d.ts +0 -12
  126. package/dist/operations/else.d.ts +0 -10
  127. package/dist/operations/if.d.ts +0 -12
  128. package/dist/operations/new.d.ts +0 -11
  129. package/dist/resource.d.ts +0 -9
  130. package/dist/resource.js +0 -29
  131. package/dist/typer.d.ts +0 -6
  132. package/dist/typer.js +0 -95
  133. package/dist/types/custom-type.d.ts +0 -22
  134. package/dist/types/custom-type.js +0 -67
  135. package/dist/types/expression.d.ts +0 -7
  136. package/dist/types/expression.js +0 -9
  137. package/dist/types/operation.d.ts +0 -10
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ 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;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ var _b, _c, _d, _e, _f, _g, _h;
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.handle = exports.handleFunction = exports.handleNil = exports.handleMap = exports.handleList = exports.handleBoolean = exports.handleString = exports.handleNumber = exports.FunctionProcessorHandler = exports.NilProcessorHandler = exports.MapProcessorHandler = exports.ListProcessorHandler = exports.StringProcessorHandler = exports.multiplyString = exports.NumberProcessorHandler = exports.GenericProcessorHandler = void 0;
59
+ var greyscript_core_1 = require("greyscript-core");
60
+ var boolean_1 = __importDefault(require("../types/boolean"));
61
+ var default_1 = __importDefault(require("../types/default"));
62
+ var function_1 = __importDefault(require("../types/function"));
63
+ var list_1 = __importDefault(require("../types/list"));
64
+ var map_1 = __importDefault(require("../types/map"));
65
+ var nil_1 = __importDefault(require("../types/nil"));
66
+ var number_1 = __importDefault(require("../types/number"));
67
+ var string_1 = __importDefault(require("../types/string"));
68
+ var operation_1 = __importDefault(require("./operation"));
69
+ exports.GenericProcessorHandler = (_b = {},
70
+ _b[greyscript_core_1.Operator.And] = function (a, b) { return new boolean_1.default(a.toTruthy() && b.toTruthy()); },
71
+ _b[greyscript_core_1.Operator.Or] = function (a, b) { return new boolean_1.default(a.toTruthy() || b.toTruthy()); },
72
+ _b);
73
+ exports.NumberProcessorHandler = (_c = {},
74
+ _c[greyscript_core_1.Operator.Plus] = function (a, b) { return new number_1.default(a.toNumber() + b.toNumber()); },
75
+ _c[greyscript_core_1.Operator.Minus] = function (a, b) { return new number_1.default(a.toNumber() - b.toNumber()); },
76
+ _c[greyscript_core_1.Operator.Slash] = function (a, b) { return new number_1.default(a.toNumber() / b.toNumber()); },
77
+ _c[greyscript_core_1.Operator.Asterik] = function (a, b) { return new number_1.default(a.toNumber() * b.toNumber()); },
78
+ _c[greyscript_core_1.Operator.Xor] = function (a, b) { return new number_1.default(a.toInt() ^ b.toInt()); },
79
+ _c[greyscript_core_1.Operator.BitwiseOr] = function (a, b) { return new number_1.default(a.toInt() | b.toInt()); },
80
+ _c[greyscript_core_1.Operator.LessThan] = function (a, b) { return new boolean_1.default(a.toNumber() < b.toNumber()); },
81
+ _c[greyscript_core_1.Operator.GreaterThan] = function (a, b) {
82
+ return new boolean_1.default(a.toNumber() > b.toNumber());
83
+ },
84
+ _c[greyscript_core_1.Operator.LeftShift] = function (a, b) { return new number_1.default(a.toInt() << b.toInt()); },
85
+ _c[greyscript_core_1.Operator.RightShift] = function (a, b) { return new number_1.default(a.toInt() >> b.toInt()); },
86
+ _c[greyscript_core_1.Operator.UnsignedRightShift] = function (a, b) {
87
+ return new number_1.default(a.toInt() >> b.toInt());
88
+ },
89
+ _c[greyscript_core_1.Operator.BitwiseAnd] = function (a, b) { return new number_1.default(a.toInt() & b.toInt()); },
90
+ _c[greyscript_core_1.Operator.PercentSign] = function (a, b) {
91
+ return new number_1.default(a.toNumber() % b.toNumber());
92
+ },
93
+ _c[greyscript_core_1.Operator.GreaterThanOrEqual] = function (a, b) {
94
+ return new boolean_1.default(a.toNumber() >= b.toNumber());
95
+ },
96
+ _c[greyscript_core_1.Operator.Equal] = function (a, b) { return new boolean_1.default(a.toNumber() === b.toNumber()); },
97
+ _c[greyscript_core_1.Operator.LessThanOrEqual] = function (a, b) {
98
+ return new boolean_1.default(a.toNumber() <= b.toNumber());
99
+ },
100
+ _c[greyscript_core_1.Operator.NotEqual] = function (a, b) {
101
+ return new boolean_1.default(a.toNumber() !== b.toNumber());
102
+ },
103
+ _c);
104
+ var multiplyString = function (a, b) {
105
+ var multiStr = new Array(b.toNumber()).fill(a.toString()).join('');
106
+ return new string_1.default(multiStr);
107
+ };
108
+ exports.multiplyString = multiplyString;
109
+ exports.StringProcessorHandler = (_d = {},
110
+ _d[greyscript_core_1.Operator.Plus] = function (a, b) { return new string_1.default(a.toString() + b.toString()); },
111
+ _d[greyscript_core_1.Operator.Asterik] = function (a, b) { return (0, exports.multiplyString)(a, b); },
112
+ _d[greyscript_core_1.Operator.LessThan] = function (a, b) {
113
+ return new boolean_1.default(a.toString().length < b.toString().length);
114
+ },
115
+ _d[greyscript_core_1.Operator.GreaterThan] = function (a, b) {
116
+ return new boolean_1.default(a.toString().length > b.toString().length);
117
+ },
118
+ _d[greyscript_core_1.Operator.GreaterThanOrEqual] = function (a, b) {
119
+ return new boolean_1.default(a.toString().length >= b.toString().length);
120
+ },
121
+ _d[greyscript_core_1.Operator.Equal] = function (a, b) { return new boolean_1.default(a.toString() === b.toString()); },
122
+ _d[greyscript_core_1.Operator.LessThanOrEqual] = function (a, b) {
123
+ return new boolean_1.default(a.toString().length <= b.toString().length);
124
+ },
125
+ _d[greyscript_core_1.Operator.NotEqual] = function (a, b) {
126
+ return new boolean_1.default(a.toString() !== b.toString());
127
+ },
128
+ _d);
129
+ exports.ListProcessorHandler = (_e = {},
130
+ _e[greyscript_core_1.Operator.Plus] = function (left, right) {
131
+ return left.fork().extend(right);
132
+ },
133
+ _e[greyscript_core_1.Operator.LessThan] = function (left, right) {
134
+ return new boolean_1.default(left.value.length < right.value.length);
135
+ },
136
+ _e[greyscript_core_1.Operator.GreaterThan] = function (left, right) {
137
+ return new boolean_1.default(left.value.length > right.value.length);
138
+ },
139
+ _e[greyscript_core_1.Operator.GreaterThanOrEqual] = function (left, right) {
140
+ return new boolean_1.default(left.value.length >= right.value.length);
141
+ },
142
+ _e[greyscript_core_1.Operator.Equal] = function (left, right) {
143
+ return new boolean_1.default(left.value === right.value);
144
+ },
145
+ _e[greyscript_core_1.Operator.LessThanOrEqual] = function (left, right) {
146
+ return new boolean_1.default(left.value.length <= right.value.length);
147
+ },
148
+ _e[greyscript_core_1.Operator.NotEqual] = function (left, right) {
149
+ return new boolean_1.default(left.value !== right.value);
150
+ },
151
+ _e);
152
+ exports.MapProcessorHandler = (_f = {},
153
+ _f[greyscript_core_1.Operator.Plus] = function (left, right) {
154
+ return left.fork().extend(right);
155
+ },
156
+ _f[greyscript_core_1.Operator.LessThan] = function (left, right) {
157
+ return new boolean_1.default(left.value.size < right.value.size);
158
+ },
159
+ _f[greyscript_core_1.Operator.GreaterThan] = function (left, right) {
160
+ return new boolean_1.default(left.value.size > right.value.size);
161
+ },
162
+ _f[greyscript_core_1.Operator.GreaterThanOrEqual] = function (left, right) {
163
+ return new boolean_1.default(left.value.size >= right.value.size);
164
+ },
165
+ _f[greyscript_core_1.Operator.Equal] = function (left, right) {
166
+ return new boolean_1.default(left.value === right.value);
167
+ },
168
+ _f[greyscript_core_1.Operator.LessThanOrEqual] = function (left, right) {
169
+ return new boolean_1.default(left.value.size <= right.value.size);
170
+ },
171
+ _f[greyscript_core_1.Operator.NotEqual] = function (left, right) {
172
+ return new boolean_1.default(left.value !== right.value);
173
+ },
174
+ _f);
175
+ exports.NilProcessorHandler = (_g = {},
176
+ _g[greyscript_core_1.Operator.Equal] = function (_a, b) { return new boolean_1.default(b instanceof nil_1.default); },
177
+ _g[greyscript_core_1.Operator.NotEqual] = function (_a, b) { return new boolean_1.default(!(b instanceof nil_1.default)); },
178
+ _g);
179
+ exports.FunctionProcessorHandler = (_h = {},
180
+ _h[greyscript_core_1.Operator.Equal] = function (a, b) { return new boolean_1.default(a === b); },
181
+ _h[greyscript_core_1.Operator.NotEqual] = function (a, b) { return new boolean_1.default(a !== b); },
182
+ _h);
183
+ var handleNumber = function (op, a, b) {
184
+ if (op in exports.NumberProcessorHandler) {
185
+ return exports.NumberProcessorHandler[op](a, b);
186
+ }
187
+ else if (op in exports.GenericProcessorHandler) {
188
+ return exports.GenericProcessorHandler[op](a, b);
189
+ }
190
+ return default_1.default.Void;
191
+ };
192
+ exports.handleNumber = handleNumber;
193
+ var handleString = function (op, a, b) {
194
+ if (op in exports.StringProcessorHandler) {
195
+ return exports.StringProcessorHandler[op](a, b);
196
+ }
197
+ else if (op in exports.GenericProcessorHandler) {
198
+ return exports.GenericProcessorHandler[op](a, b);
199
+ }
200
+ return default_1.default.Void;
201
+ };
202
+ exports.handleString = handleString;
203
+ var handleBoolean = function (op, a, b) {
204
+ return (0, exports.handleNumber)(op, a, b);
205
+ };
206
+ exports.handleBoolean = handleBoolean;
207
+ var handleList = function (op, a, b) {
208
+ var left = a;
209
+ var right = b instanceof list_1.default ? b : new list_1.default();
210
+ if (op in exports.ListProcessorHandler) {
211
+ return exports.ListProcessorHandler[op](left, right);
212
+ }
213
+ else if (op in exports.GenericProcessorHandler) {
214
+ return exports.GenericProcessorHandler[op](a, b);
215
+ }
216
+ return default_1.default.Void;
217
+ };
218
+ exports.handleList = handleList;
219
+ var handleMap = function (op, a, b) {
220
+ var left = a;
221
+ var right = b instanceof map_1.default ? b : new map_1.default();
222
+ if (op in exports.MapProcessorHandler) {
223
+ return exports.MapProcessorHandler[op](left, right);
224
+ }
225
+ else if (op in exports.GenericProcessorHandler) {
226
+ return exports.GenericProcessorHandler[op](a, b);
227
+ }
228
+ return default_1.default.Void;
229
+ };
230
+ exports.handleMap = handleMap;
231
+ var handleNil = function (op, a, b) {
232
+ if (op in exports.NilProcessorHandler) {
233
+ return exports.NilProcessorHandler[op](a, b);
234
+ }
235
+ else if (op in exports.GenericProcessorHandler) {
236
+ return exports.GenericProcessorHandler[op](a, b);
237
+ }
238
+ return default_1.default.Void;
239
+ };
240
+ exports.handleNil = handleNil;
241
+ var handleFunction = function (op, a, b) {
242
+ if (op in exports.FunctionProcessorHandler) {
243
+ return exports.FunctionProcessorHandler[op](a, b);
244
+ }
245
+ else if (op in exports.GenericProcessorHandler) {
246
+ return exports.GenericProcessorHandler[op](a, b);
247
+ }
248
+ return default_1.default.Void;
249
+ };
250
+ exports.handleFunction = handleFunction;
251
+ var handle = function (op, a, b) {
252
+ if (a instanceof string_1.default || b instanceof string_1.default) {
253
+ return (0, exports.handleString)(op, a, b);
254
+ }
255
+ else if (a instanceof number_1.default || b instanceof number_1.default) {
256
+ return (0, exports.handleNumber)(op, a, b);
257
+ }
258
+ else if (a instanceof boolean_1.default || b instanceof boolean_1.default) {
259
+ return (0, exports.handleBoolean)(op, a, b);
260
+ }
261
+ else if (a instanceof list_1.default) {
262
+ return (0, exports.handleList)(op, a, b);
263
+ }
264
+ else if (a instanceof map_1.default) {
265
+ return (0, exports.handleMap)(op, a, b);
266
+ }
267
+ else if (a instanceof function_1.default) {
268
+ return (0, exports.handleFunction)(op, a, b);
269
+ }
270
+ else if (a instanceof nil_1.default) {
271
+ return (0, exports.handleNil)(op, a, b);
272
+ }
273
+ return default_1.default.Void;
274
+ };
275
+ exports.handle = handle;
276
+ var Evaluate = /** @class */ (function (_super) {
277
+ __extends(Evaluate, _super);
278
+ function Evaluate(item, target) {
279
+ var _this = _super.call(this, null, target) || this;
280
+ _this.item = item;
281
+ return _this;
282
+ }
283
+ Evaluate.prototype.build = function (visit) {
284
+ return __awaiter(this, void 0, void 0, function () {
285
+ var _b, _c;
286
+ return __generator(this, function (_d) {
287
+ switch (_d.label) {
288
+ case 0:
289
+ this.type = this.item.type;
290
+ this.op = this.item.operator;
291
+ _b = this;
292
+ return [4 /*yield*/, visit(this.item.left)];
293
+ case 1:
294
+ _b.left = _d.sent();
295
+ _c = this;
296
+ return [4 /*yield*/, visit(this.item.right)];
297
+ case 2:
298
+ _c.right = _d.sent();
299
+ return [2 /*return*/, this];
300
+ }
301
+ });
302
+ });
303
+ };
304
+ Evaluate.prototype.resolveBinaryExpression = function (ctx, expr) {
305
+ return __awaiter(this, void 0, void 0, function () {
306
+ var left, right;
307
+ return __generator(this, function (_b) {
308
+ switch (_b.label) {
309
+ case 0: return [4 /*yield*/, this.resolve(ctx, expr.left)];
310
+ case 1:
311
+ left = _b.sent();
312
+ return [4 /*yield*/, this.resolve(ctx, expr.right)];
313
+ case 2:
314
+ right = _b.sent();
315
+ return [2 /*return*/, (0, exports.handle)(expr.op, left, right)];
316
+ }
317
+ });
318
+ });
319
+ };
320
+ Evaluate.prototype.resolveLogicalExpression = function (ctx, expr) {
321
+ return __awaiter(this, void 0, void 0, function () {
322
+ var left, right;
323
+ return __generator(this, function (_b) {
324
+ switch (_b.label) {
325
+ case 0: return [4 /*yield*/, this.resolve(ctx, expr.left)];
326
+ case 1:
327
+ left = _b.sent();
328
+ if (expr.op === greyscript_core_1.Operator.And && !left.toTruthy()) {
329
+ return [2 /*return*/, new boolean_1.default(false)];
330
+ }
331
+ else if (expr.op === greyscript_core_1.Operator.Or && left.toTruthy()) {
332
+ return [2 /*return*/, new boolean_1.default(true)];
333
+ }
334
+ return [4 /*yield*/, this.resolve(ctx, expr.right)];
335
+ case 2:
336
+ right = _b.sent();
337
+ return [2 /*return*/, (0, exports.handle)(expr.op, left, right)];
338
+ }
339
+ });
340
+ });
341
+ };
342
+ Evaluate.prototype.resolve = function (ctx, op) {
343
+ return __awaiter(this, void 0, void 0, function () {
344
+ var expr;
345
+ return __generator(this, function (_b) {
346
+ if (op instanceof Evaluate) {
347
+ expr = op;
348
+ switch (expr.type) {
349
+ case greyscript_core_1.ASTType.BinaryExpression:
350
+ return [2 /*return*/, this.resolveBinaryExpression(ctx, expr)];
351
+ case greyscript_core_1.ASTType.LogicalExpression:
352
+ return [2 /*return*/, this.resolveLogicalExpression(ctx, expr)];
353
+ default:
354
+ break;
355
+ }
356
+ }
357
+ return [2 /*return*/, op.handle(ctx)];
358
+ });
359
+ });
360
+ };
361
+ Evaluate.prototype.handle = function (ctx) {
362
+ return this.resolve(ctx, this);
363
+ };
364
+ return Evaluate;
365
+ }(operation_1.default));
366
+ exports.default = Evaluate;
@@ -1,16 +1,15 @@
1
- import { Operation } from '../types/operation';
2
- import { OperationContext } from '../context';
3
- import { ASTBase } from 'greybel-core';
4
- import BodyOperation from './body';
5
- export interface ForOperationOptions {
6
- variable: any;
7
- iterator: any;
8
- body: BodyOperation;
9
- }
10
- export default class ForOperation extends Operation {
11
- variable: any;
12
- iterator: any;
13
- body: BodyOperation;
14
- constructor(ast: ASTBase, options: ForOperationOptions);
15
- run(operationContext: OperationContext): Promise<void>;
16
- }
1
+ import { ASTForGenericStatement } from 'greyscript-core';
2
+ import context from '../context';
3
+ import { CustomValue } from '../types/generics';
4
+ import Block from './block';
5
+ import Operation, { CPSVisit } from './operation';
6
+ import Resolve from './resolve';
7
+ export default class For extends Operation {
8
+ readonly item: ASTForGenericStatement;
9
+ block: Block;
10
+ variable: Resolve;
11
+ iterator: Operation;
12
+ constructor(item: ASTForGenericStatement, target?: string);
13
+ build(visit: CPSVisit): Promise<Operation>;
14
+ handle(ctx: context): Promise<CustomValue>;
15
+ }