greybel-interpreter 1.4.4 → 1.4.5

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 (93) hide show
  1. package/dist/context.d.ts +3 -2
  2. package/dist/context.js +113 -190
  3. package/dist/cps.js +135 -188
  4. package/dist/handler/error.js +6 -29
  5. package/dist/handler/output.js +15 -38
  6. package/dist/handler/resource.js +16 -39
  7. package/dist/handler-container.js +6 -8
  8. package/dist/index.d.ts +4 -3
  9. package/dist/index.js +10 -9
  10. package/dist/interpreter.d.ts +4 -4
  11. package/dist/interpreter.js +108 -203
  12. package/dist/operations/assign.d.ts +1 -1
  13. package/dist/operations/assign.js +28 -93
  14. package/dist/operations/block.d.ts +1 -1
  15. package/dist/operations/block.js +33 -89
  16. package/dist/operations/break.d.ts +1 -1
  17. package/dist/operations/break.js +11 -29
  18. package/dist/operations/call.d.ts +1 -1
  19. package/dist/operations/call.js +31 -106
  20. package/dist/operations/chunk.d.ts +1 -1
  21. package/dist/operations/chunk.js +15 -67
  22. package/dist/operations/continue.d.ts +1 -1
  23. package/dist/operations/continue.js +11 -29
  24. package/dist/operations/debugger-statement.d.ts +1 -1
  25. package/dist/operations/debugger-statement.js +11 -29
  26. package/dist/operations/evaluate.d.ts +1 -1
  27. package/dist/operations/evaluate.js +143 -247
  28. package/dist/operations/for.d.ts +1 -1
  29. package/dist/operations/for.js +62 -133
  30. package/dist/operations/function-reference.d.ts +1 -1
  31. package/dist/operations/function-reference.js +25 -84
  32. package/dist/operations/function.d.ts +1 -1
  33. package/dist/operations/function.js +49 -177
  34. package/dist/operations/if-statement.d.ts +1 -1
  35. package/dist/operations/if-statement.js +58 -154
  36. package/dist/operations/import.d.ts +1 -1
  37. package/dist/operations/import.js +35 -97
  38. package/dist/operations/include.d.ts +1 -1
  39. package/dist/operations/include.js +19 -73
  40. package/dist/operations/list.d.ts +1 -1
  41. package/dist/operations/list.js +24 -93
  42. package/dist/operations/literal.d.ts +1 -1
  43. package/dist/operations/literal.js +15 -33
  44. package/dist/operations/map.d.ts +1 -1
  45. package/dist/operations/map.js +26 -153
  46. package/dist/operations/negated-binary.d.ts +1 -1
  47. package/dist/operations/negated-binary.js +24 -91
  48. package/dist/operations/new-instance.d.ts +1 -1
  49. package/dist/operations/new-instance.js +21 -82
  50. package/dist/operations/noop.d.ts +1 -1
  51. package/dist/operations/noop.js +10 -27
  52. package/dist/operations/not.d.ts +1 -1
  53. package/dist/operations/not.js +17 -78
  54. package/dist/operations/operation.d.ts +2 -2
  55. package/dist/operations/operation.js +3 -5
  56. package/dist/operations/reference.d.ts +1 -1
  57. package/dist/operations/reference.js +10 -28
  58. package/dist/operations/resolve.d.ts +1 -1
  59. package/dist/operations/resolve.js +161 -281
  60. package/dist/operations/return.d.ts +1 -1
  61. package/dist/operations/return.js +27 -89
  62. package/dist/operations/while.d.ts +1 -1
  63. package/dist/operations/while.js +45 -116
  64. package/dist/types/base.d.ts +9 -0
  65. package/dist/types/base.js +5 -0
  66. package/dist/types/boolean.d.ts +3 -1
  67. package/dist/types/boolean.js +24 -36
  68. package/dist/types/default.d.ts +6 -9
  69. package/dist/types/default.js +11 -17
  70. package/dist/types/function.d.ts +1 -1
  71. package/dist/types/function.js +60 -130
  72. package/dist/types/interface.d.ts +2 -1
  73. package/dist/types/interface.js +44 -64
  74. package/dist/types/list.d.ts +4 -6
  75. package/dist/types/list.js +77 -128
  76. package/dist/types/map.d.ts +11 -15
  77. package/dist/types/map.js +102 -266
  78. package/dist/types/nil.d.ts +2 -1
  79. package/dist/types/nil.js +23 -36
  80. package/dist/types/number.d.ts +16 -2
  81. package/dist/types/number.js +60 -37
  82. package/dist/types/string.d.ts +4 -6
  83. package/dist/types/string.js +66 -90
  84. package/dist/types/{generics.d.ts → with-intrinsics.d.ts} +6 -9
  85. package/dist/types/with-intrinsics.js +19 -0
  86. package/dist/utils/deep-equal.js +9 -34
  87. package/dist/utils/object-value.d.ts +6 -0
  88. package/dist/utils/object-value.js +36 -0
  89. package/dist/utils/path.js +16 -43
  90. package/package.json +3 -3
  91. package/dist/intrinsics-container.d.ts +0 -7
  92. package/dist/intrinsics-container.js +0 -19
  93. package/dist/types/generics.js +0 -40
package/dist/cps.js CHANGED
@@ -8,206 +8,153 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
13
  };
41
14
  Object.defineProperty(exports, "__esModule", { value: true });
42
15
  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) {
16
+ const greybel_core_1 = require("greybel-core");
17
+ const greyscript_core_1 = require("greyscript-core");
18
+ const assign_1 = __importDefault(require("./operations/assign"));
19
+ const break_1 = __importDefault(require("./operations/break"));
20
+ const call_1 = __importDefault(require("./operations/call"));
21
+ const chunk_1 = __importDefault(require("./operations/chunk"));
22
+ const continue_1 = __importDefault(require("./operations/continue"));
23
+ const debugger_statement_1 = __importDefault(require("./operations/debugger-statement"));
24
+ const evaluate_1 = __importDefault(require("./operations/evaluate"));
25
+ const for_1 = __importDefault(require("./operations/for"));
26
+ const function_1 = __importDefault(require("./operations/function"));
27
+ const function_reference_1 = __importDefault(require("./operations/function-reference"));
28
+ const if_statement_1 = __importDefault(require("./operations/if-statement"));
29
+ const import_1 = __importDefault(require("./operations/import"));
30
+ const include_1 = __importDefault(require("./operations/include"));
31
+ const list_1 = __importDefault(require("./operations/list"));
32
+ const literal_1 = __importDefault(require("./operations/literal"));
33
+ const map_1 = __importDefault(require("./operations/map"));
34
+ const negated_binary_1 = __importDefault(require("./operations/negated-binary"));
35
+ const new_instance_1 = __importDefault(require("./operations/new-instance"));
36
+ const noop_1 = __importDefault(require("./operations/noop"));
37
+ const not_1 = __importDefault(require("./operations/not"));
38
+ const resolve_1 = __importDefault(require("./operations/resolve"));
39
+ const return_1 = __importDefault(require("./operations/return"));
40
+ const while_1 = __importDefault(require("./operations/while"));
41
+ class CPSContext {
42
+ constructor(target, handler) {
70
43
  this.target = target;
71
44
  this.handler = handler;
72
45
  }
73
- return CPSContext;
74
- }());
46
+ }
75
47
  exports.CPSContext = CPSContext;
76
- var visit = function (context, currentTarget, item) { return __awaiter(void 0, void 0, void 0, function () {
77
- var defaultVisit, _a, importExpr, target, code, subVisit, importStatement, includeExpr, target, code, subVisit, importStatement, importExpr, target, code, subVisit, importStatement, unaryExpr;
78
- return __generator(this, function (_b) {
79
- switch (_b.label) {
80
- case 0:
81
- defaultVisit = visit.bind(null, context, currentTarget);
82
- _a = item.type;
83
- switch (_a) {
84
- case greyscript_core_1.ASTType.MapConstructorExpression: return [3 /*break*/, 1];
85
- case greyscript_core_1.ASTType.ListConstructorExpression: return [3 /*break*/, 2];
86
- case greyscript_core_1.ASTType.AssignmentStatement: return [3 /*break*/, 3];
87
- case greyscript_core_1.ASTType.MemberExpression: return [3 /*break*/, 4];
88
- case greyscript_core_1.ASTType.Identifier: return [3 /*break*/, 4];
89
- case greyscript_core_1.ASTType.IndexExpression: return [3 /*break*/, 4];
90
- case greyscript_core_1.ASTType.FunctionDeclaration: return [3 /*break*/, 5];
91
- case greyscript_core_1.ASTType.InvalidCodeExpression: return [3 /*break*/, 6];
92
- case greyscript_core_1.ASTType.WhileStatement: return [3 /*break*/, 7];
93
- case greyscript_core_1.ASTType.ForGenericStatement: return [3 /*break*/, 8];
94
- case greyscript_core_1.ASTType.IfStatement: return [3 /*break*/, 9];
95
- case greyscript_core_1.ASTType.IfShortcutStatement: return [3 /*break*/, 9];
96
- case greyscript_core_1.ASTType.ReturnStatement: return [3 /*break*/, 10];
97
- case greyscript_core_1.ASTType.BreakStatement: return [3 /*break*/, 11];
98
- case greyscript_core_1.ASTType.ContinueStatement: return [3 /*break*/, 12];
99
- case greyscript_core_1.ASTType.CallExpression: return [3 /*break*/, 13];
100
- case greyscript_core_1.ASTType.CallStatement: return [3 /*break*/, 14];
101
- case greybel_core_1.ASTType.FeatureImportExpression: return [3 /*break*/, 15];
102
- case greybel_core_1.ASTType.FeatureIncludeExpression: return [3 /*break*/, 19];
103
- case greyscript_core_1.ASTType.ImportCodeExpression: return [3 /*break*/, 23];
104
- case greybel_core_1.ASTType.FeatureDebuggerExpression: return [3 /*break*/, 27];
105
- case greyscript_core_1.ASTType.BooleanLiteral: return [3 /*break*/, 28];
106
- case greyscript_core_1.ASTType.StringLiteral: return [3 /*break*/, 28];
107
- case greyscript_core_1.ASTType.NumericLiteral: return [3 /*break*/, 28];
108
- case greyscript_core_1.ASTType.NilLiteral: return [3 /*break*/, 28];
109
- case greyscript_core_1.ASTType.EmptyExpression: return [3 /*break*/, 29];
110
- case greyscript_core_1.ASTType.BinaryExpression: return [3 /*break*/, 30];
111
- case greyscript_core_1.ASTType.LogicalExpression: return [3 /*break*/, 30];
112
- case greyscript_core_1.ASTType.NegationExpression: return [3 /*break*/, 31];
113
- case greyscript_core_1.ASTType.BinaryNegatedExpression: return [3 /*break*/, 32];
114
- case greyscript_core_1.ASTType.UnaryExpression: return [3 /*break*/, 33];
115
- case greyscript_core_1.ASTType.Chunk: return [3 /*break*/, 34];
116
- }
117
- return [3 /*break*/, 35];
118
- case 1: return [2 /*return*/, new map_1.default(item, currentTarget).build(defaultVisit)];
119
- case 2: return [2 /*return*/, new list_1.default(item, currentTarget).build(defaultVisit)];
120
- case 3: return [2 /*return*/, new assign_1.default(item, currentTarget).build(defaultVisit)];
121
- case 4: return [2 /*return*/, new resolve_1.default(item, currentTarget).build(defaultVisit)];
122
- case 5: return [2 /*return*/, new function_1.default(item, currentTarget).build(defaultVisit)];
123
- case 6: return [2 /*return*/, new noop_1.default(item).build(defaultVisit)];
124
- case 7: return [2 /*return*/, new while_1.default(item, currentTarget).build(defaultVisit)];
125
- case 8: return [2 /*return*/, new for_1.default(item, currentTarget).build(defaultVisit)];
126
- case 9: return [2 /*return*/, new if_statement_1.default(item, currentTarget).build(defaultVisit)];
127
- case 10: return [2 /*return*/, new return_1.default(item, currentTarget).build(defaultVisit)];
128
- case 11: return [2 /*return*/, new break_1.default(item, currentTarget).build(defaultVisit)];
129
- case 12: return [2 /*return*/, new continue_1.default(item, currentTarget).build(defaultVisit)];
130
- case 13: return [2 /*return*/, new call_1.default(item, currentTarget).build(defaultVisit)];
131
- case 14: return [2 /*return*/, defaultVisit(item.expression)];
132
- case 15:
133
- importExpr = item;
134
- return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.path)];
135
- case 16:
136
- target = _b.sent();
137
- return [4 /*yield*/, context.handler.resourceHandler.get(target)];
138
- case 17:
139
- code = _b.sent();
140
- if (code == null) {
141
- throw new Error("Cannot find import ".concat(currentTarget, "."));
142
- }
143
- subVisit = visit.bind(null, context, target);
144
- return [4 /*yield*/, new import_1.default(importExpr, target, code).build(subVisit)];
145
- case 18:
146
- importStatement = _b.sent();
147
- return [2 /*return*/, importStatement];
148
- case 19:
149
- includeExpr = item;
150
- return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(currentTarget, includeExpr.path)];
151
- case 20:
152
- target = _b.sent();
153
- return [4 /*yield*/, context.handler.resourceHandler.get(target)];
154
- case 21:
155
- code = _b.sent();
156
- if (code == null) {
157
- throw new Error("Cannot find include ".concat(currentTarget, "."));
158
- }
159
- subVisit = visit.bind(null, context, target);
160
- return [4 /*yield*/, new include_1.default(includeExpr, target, code).build(subVisit)];
161
- case 22:
162
- importStatement = _b.sent();
163
- return [2 /*return*/, importStatement];
164
- case 23:
165
- importExpr = item;
166
- return [4 /*yield*/, context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.fileSystemDirectory)];
167
- case 24:
168
- target = _b.sent();
169
- return [4 /*yield*/, context.handler.resourceHandler.get(target)];
170
- case 25:
171
- code = _b.sent();
172
- if (code == null) {
173
- throw new Error("Cannot find native import ".concat(currentTarget, "."));
174
- }
175
- subVisit = visit.bind(null, context, target);
176
- return [4 /*yield*/, new include_1.default(importExpr, target, code).build(subVisit)];
177
- case 26:
178
- importStatement = _b.sent();
179
- return [2 /*return*/, importStatement];
180
- case 27: return [2 /*return*/, new debugger_statement_1.default(item, currentTarget)];
181
- case 28: return [2 /*return*/, new literal_1.default(item, currentTarget).build(defaultVisit)];
182
- case 29: return [2 /*return*/, new noop_1.default(item, currentTarget).build(defaultVisit)];
183
- case 30: return [2 /*return*/, new evaluate_1.default(item, currentTarget).build(defaultVisit)];
184
- case 31: return [2 /*return*/, new not_1.default(item, currentTarget).build(defaultVisit)];
185
- case 32: return [2 /*return*/, new negated_binary_1.default(item, currentTarget).build(defaultVisit)];
186
- case 33:
187
- {
188
- unaryExpr = item;
189
- if (unaryExpr.operator === 'new') {
190
- return [2 /*return*/, new new_instance_1.default(unaryExpr).build(defaultVisit)];
191
- }
192
- else if (unaryExpr.operator === '@') {
193
- return [2 /*return*/, new function_reference_1.default(unaryExpr).build(defaultVisit)];
194
- }
195
- throw new Error('Unknown unary expression.');
196
- }
197
- _b.label = 34;
198
- case 34: return [2 /*return*/, new chunk_1.default(item, currentTarget).build(defaultVisit)];
199
- case 35: throw new Error("Unexpected AST type ".concat(item.type, "."));
48
+ const visit = (context, currentTarget, item) => __awaiter(void 0, void 0, void 0, function* () {
49
+ const defaultVisit = visit.bind(null, context, currentTarget);
50
+ switch (item.type) {
51
+ case greyscript_core_1.ASTType.MapConstructorExpression:
52
+ return new map_1.default(item, currentTarget).build(defaultVisit);
53
+ case greyscript_core_1.ASTType.ListConstructorExpression:
54
+ return new list_1.default(item, currentTarget).build(defaultVisit);
55
+ case greyscript_core_1.ASTType.AssignmentStatement:
56
+ return new assign_1.default(item, currentTarget).build(defaultVisit);
57
+ case greyscript_core_1.ASTType.MemberExpression:
58
+ case greyscript_core_1.ASTType.Identifier:
59
+ case greyscript_core_1.ASTType.IndexExpression:
60
+ return new resolve_1.default(item, currentTarget).build(defaultVisit);
61
+ case greyscript_core_1.ASTType.FunctionDeclaration:
62
+ return new function_1.default(item, currentTarget).build(defaultVisit);
63
+ case greyscript_core_1.ASTType.InvalidCodeExpression:
64
+ return new noop_1.default(item, currentTarget).build(defaultVisit);
65
+ case greyscript_core_1.ASTType.WhileStatement:
66
+ return new while_1.default(item, currentTarget).build(defaultVisit);
67
+ case greyscript_core_1.ASTType.ForGenericStatement:
68
+ return new for_1.default(item, currentTarget).build(defaultVisit);
69
+ case greyscript_core_1.ASTType.IfStatement:
70
+ case greyscript_core_1.ASTType.IfShortcutStatement:
71
+ return new if_statement_1.default(item, currentTarget).build(defaultVisit);
72
+ case greyscript_core_1.ASTType.ReturnStatement:
73
+ return new return_1.default(item, currentTarget).build(defaultVisit);
74
+ case greyscript_core_1.ASTType.BreakStatement:
75
+ return new break_1.default(item, currentTarget).build(defaultVisit);
76
+ case greyscript_core_1.ASTType.ContinueStatement:
77
+ return new continue_1.default(item, currentTarget).build(defaultVisit);
78
+ case greyscript_core_1.ASTType.CallExpression:
79
+ return new call_1.default(item, currentTarget).build(defaultVisit);
80
+ case greyscript_core_1.ASTType.CallStatement:
81
+ return defaultVisit(item.expression);
82
+ case greybel_core_1.ASTType.FeatureImportExpression: {
83
+ const importExpr = item;
84
+ const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.path);
85
+ const code = yield context.handler.resourceHandler.get(target);
86
+ if (code == null) {
87
+ throw new Error(`Cannot find import ${currentTarget}.`);
88
+ }
89
+ const subVisit = visit.bind(null, context, target);
90
+ const importStatement = yield new import_1.default(importExpr, target, code).build(subVisit);
91
+ return importStatement;
200
92
  }
201
- });
202
- }); };
203
- var CPS = /** @class */ (function () {
204
- function CPS(context) {
93
+ case greybel_core_1.ASTType.FeatureIncludeExpression: {
94
+ const includeExpr = item;
95
+ const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, includeExpr.path);
96
+ const code = yield context.handler.resourceHandler.get(target);
97
+ if (code == null) {
98
+ throw new Error(`Cannot find include ${currentTarget}.`);
99
+ }
100
+ const subVisit = visit.bind(null, context, target);
101
+ const importStatement = yield new include_1.default(includeExpr, target, code).build(subVisit);
102
+ return importStatement;
103
+ }
104
+ case greyscript_core_1.ASTType.ImportCodeExpression: {
105
+ const importExpr = item;
106
+ const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.fileSystemDirectory);
107
+ const code = yield context.handler.resourceHandler.get(target);
108
+ if (code == null) {
109
+ throw new Error(`Cannot find native import ${currentTarget}.`);
110
+ }
111
+ const subVisit = visit.bind(null, context, target);
112
+ const importStatement = yield new include_1.default(importExpr, target, code).build(subVisit);
113
+ return importStatement;
114
+ }
115
+ case greybel_core_1.ASTType.FeatureDebuggerExpression:
116
+ return new debugger_statement_1.default(item, currentTarget);
117
+ case greyscript_core_1.ASTType.BooleanLiteral:
118
+ case greyscript_core_1.ASTType.StringLiteral:
119
+ case greyscript_core_1.ASTType.NumericLiteral:
120
+ case greyscript_core_1.ASTType.NilLiteral:
121
+ return new literal_1.default(item, currentTarget).build(defaultVisit);
122
+ case greyscript_core_1.ASTType.EmptyExpression:
123
+ return new noop_1.default(item, currentTarget).build(defaultVisit);
124
+ case greyscript_core_1.ASTType.BinaryExpression:
125
+ case greyscript_core_1.ASTType.LogicalExpression:
126
+ return new evaluate_1.default(item, currentTarget).build(defaultVisit);
127
+ case greyscript_core_1.ASTType.NegationExpression:
128
+ return new not_1.default(item, currentTarget).build(defaultVisit);
129
+ case greyscript_core_1.ASTType.BinaryNegatedExpression:
130
+ return new negated_binary_1.default(item, currentTarget).build(defaultVisit);
131
+ case greyscript_core_1.ASTType.UnaryExpression: {
132
+ const unaryExpr = item;
133
+ if (unaryExpr.operator === 'new') {
134
+ return new new_instance_1.default(unaryExpr).build(defaultVisit);
135
+ }
136
+ else if (unaryExpr.operator === '@') {
137
+ return new function_reference_1.default(unaryExpr).build(defaultVisit);
138
+ }
139
+ throw new Error('Unknown unary expression.');
140
+ }
141
+ case greyscript_core_1.ASTType.Chunk:
142
+ return new chunk_1.default(item, currentTarget).build(defaultVisit);
143
+ case greyscript_core_1.ASTType.Comment:
144
+ return new noop_1.default(item, currentTarget);
145
+ case greyscript_core_1.ASTType.ParenthesisExpression:
146
+ return defaultVisit(item.expression);
147
+ default:
148
+ throw new Error(`Unexpected AST type ${item.type}.`);
149
+ }
150
+ });
151
+ class CPS {
152
+ constructor(context) {
205
153
  this.context = context;
206
154
  this.__visit = visit.bind(null, context, context.target);
207
155
  }
208
- CPS.prototype.visit = function (item) {
156
+ visit(item) {
209
157
  return this.__visit(item);
210
- };
211
- return CPS;
212
- }());
158
+ }
159
+ }
213
160
  exports.default = CPS;
@@ -1,35 +1,12 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
18
3
  exports.DefaultErrorHandler = exports.ErrorHandler = void 0;
19
- var ErrorHandler = /** @class */ (function () {
20
- function ErrorHandler() {
21
- }
22
- return ErrorHandler;
23
- }());
4
+ class ErrorHandler {
5
+ }
24
6
  exports.ErrorHandler = ErrorHandler;
25
- var DefaultErrorHandler = /** @class */ (function (_super) {
26
- __extends(DefaultErrorHandler, _super);
27
- function DefaultErrorHandler() {
28
- return _super !== null && _super.apply(this, arguments) || this;
29
- }
30
- DefaultErrorHandler.prototype.raise = function (err) {
7
+ class DefaultErrorHandler extends ErrorHandler {
8
+ raise(err) {
31
9
  throw err;
32
- };
33
- return DefaultErrorHandler;
34
- }(ErrorHandler));
10
+ }
11
+ }
35
12
  exports.DefaultErrorHandler = DefaultErrorHandler;
@@ -1,52 +1,29 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
18
3
  exports.DefaultOutputHandler = exports.OutputHandler = void 0;
19
- var OutputHandler = /** @class */ (function () {
20
- function OutputHandler() {
21
- }
22
- return OutputHandler;
23
- }());
4
+ class OutputHandler {
5
+ }
24
6
  exports.OutputHandler = OutputHandler;
25
- var DefaultOutputHandler = /** @class */ (function (_super) {
26
- __extends(DefaultOutputHandler, _super);
27
- function DefaultOutputHandler() {
28
- return _super !== null && _super.apply(this, arguments) || this;
29
- }
30
- DefaultOutputHandler.prototype.print = function (message) {
7
+ class DefaultOutputHandler extends OutputHandler {
8
+ print(message) {
31
9
  console.log(message);
32
- };
33
- DefaultOutputHandler.prototype.progress = function (timeout) {
34
- return new Promise(function (resolve, _reject) {
10
+ }
11
+ progress(timeout) {
12
+ return new Promise((resolve, _reject) => {
35
13
  setTimeout(resolve, timeout);
36
14
  });
37
- };
38
- DefaultOutputHandler.prototype.waitForInput = function (_isPassword) {
15
+ }
16
+ waitForInput(_isPassword) {
39
17
  return Promise.resolve('test');
40
- };
41
- DefaultOutputHandler.prototype.waitForKeyPress = function () {
18
+ }
19
+ waitForKeyPress() {
42
20
  return Promise.resolve({
43
21
  keyCode: 13,
44
22
  code: 'Enter'
45
23
  });
46
- };
47
- DefaultOutputHandler.prototype.clear = function () {
24
+ }
25
+ clear() {
48
26
  console.clear();
49
- };
50
- return DefaultOutputHandler;
51
- }(OutputHandler));
27
+ }
28
+ }
52
29
  exports.DefaultOutputHandler = DefaultOutputHandler;
@@ -1,51 +1,28 @@
1
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
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
18
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
4
  };
20
5
  Object.defineProperty(exports, "__esModule", { value: true });
21
6
  exports.DefaultResourceHandler = exports.ResourceHandler = void 0;
22
- var fs_1 = __importDefault(require("fs"));
23
- var path_1 = __importDefault(require("path"));
24
- var ResourceHandler = /** @class */ (function () {
25
- function ResourceHandler() {
26
- }
27
- return ResourceHandler;
28
- }());
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class ResourceHandler {
10
+ }
29
11
  exports.ResourceHandler = ResourceHandler;
30
- var DefaultResourceHandler = /** @class */ (function (_super) {
31
- __extends(DefaultResourceHandler, _super);
32
- function DefaultResourceHandler() {
33
- return _super !== null && _super.apply(this, arguments) || this;
34
- }
35
- DefaultResourceHandler.prototype.getTargetRelativeTo = function (source, target) {
36
- var base = path_1.default.resolve(source, '..');
37
- var result = path_1.default.resolve(base, target);
12
+ class DefaultResourceHandler extends ResourceHandler {
13
+ getTargetRelativeTo(source, target) {
14
+ const base = path_1.default.resolve(source, '..');
15
+ const result = path_1.default.resolve(base, target);
38
16
  return Promise.resolve(fs_1.default.existsSync(result) ? result : result + '.src');
39
- };
40
- DefaultResourceHandler.prototype.has = function (target) {
17
+ }
18
+ has(target) {
41
19
  return Promise.resolve(fs_1.default.existsSync(target));
42
- };
43
- DefaultResourceHandler.prototype.get = function (target) {
20
+ }
21
+ get(target) {
44
22
  return Promise.resolve(fs_1.default.readFileSync(target, 'utf8'));
45
- };
46
- DefaultResourceHandler.prototype.resolve = function (target) {
23
+ }
24
+ resolve(target) {
47
25
  return Promise.resolve(path_1.default.resolve(target));
48
- };
49
- return DefaultResourceHandler;
50
- }(ResourceHandler));
26
+ }
27
+ }
51
28
  exports.DefaultResourceHandler = DefaultResourceHandler;
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var error_1 = require("./handler/error");
4
- var output_1 = require("./handler/output");
5
- var resource_1 = require("./handler/resource");
6
- var HandlerContainer = /** @class */ (function () {
7
- function HandlerContainer(options) {
8
- if (options === void 0) { options = {}; }
3
+ const error_1 = require("./handler/error");
4
+ const output_1 = require("./handler/output");
5
+ const resource_1 = require("./handler/resource");
6
+ class HandlerContainer {
7
+ constructor(options = {}) {
9
8
  this.resourceHandler =
10
9
  (options === null || options === void 0 ? void 0 : options.resourceHandler) || new resource_1.DefaultResourceHandler();
11
10
  this.outputHandler = (options === null || options === void 0 ? void 0 : options.outputHandler) || new output_1.DefaultOutputHandler();
12
11
  this.errorHandler = (options === null || options === void 0 ? void 0 : options.errorHandler) || new error_1.DefaultErrorHandler();
13
12
  }
14
- return HandlerContainer;
15
- }());
13
+ }
16
14
  exports.default = HandlerContainer;
package/dist/index.d.ts CHANGED
@@ -5,7 +5,6 @@ export { DefaultOutputHandler, KeyEvent, OutputHandler } from './handler/output'
5
5
  export { DefaultResourceHandler, ResourceHandler } from './handler/resource';
6
6
  export { default as HandlerContainer } from './handler-container';
7
7
  export { default as Interpreter, InterpreterOptions } from './interpreter';
8
- export { default as IntrinsicsContainer } from './intrinsics-container';
9
8
  export { default as Assign } from './operations/assign';
10
9
  export { default as Block, IsEOL } from './operations/block';
11
10
  export { default as Break } from './operations/break';
@@ -13,7 +12,7 @@ export { default as Call } from './operations/call';
13
12
  export { default as Chunk } from './operations/chunk';
14
13
  export { default as Continue } from './operations/continue';
15
14
  export { default as DebuggerStatement } from './operations/debugger-statement';
16
- export { default as Evaluate, GenericProcessorHandler, handle, handleList, handleMap, handleNumber, handleString, handleInterface, ListProcessorHandler, MapProcessorHandler, NumberProcessorHandler, ProcessorHandler, ProcessorHandlerFunction, StringProcessorHandler } from './operations/evaluate';
15
+ export { default as Evaluate, GenericProcessorHandler, handle, handleInterface, handleList, handleMap, handleNumber, handleString, ListProcessorHandler, MapProcessorHandler, NumberProcessorHandler, ProcessorHandler, ProcessorHandlerFunction, StringProcessorHandler } from './operations/evaluate';
17
16
  export { default as For } from './operations/for';
18
17
  export { default as FunctionOpertion } from './operations/function';
19
18
  export { Clause, default as IfStatement } from './operations/if-statement';
@@ -31,15 +30,17 @@ export { default as Reference } from './operations/reference';
31
30
  export { IdentifierSegment, IndexSegment, OperationSegment, default as Resolve, ResolveResult, Segment } from './operations/resolve';
32
31
  export { default as Return } from './operations/return';
33
32
  export { default as While } from './operations/while';
33
+ export { default as CustomValue } from './types/base';
34
34
  export { default as CustomBoolean } from './types/boolean';
35
35
  export { default as Defaults } from './types/default';
36
36
  export { Argument, Callback, default as CustomFunction } from './types/function';
37
- export { CustomObject, CustomValue, CustomValueWithIntrinsics } from './types/generics';
38
37
  export { default as CustomInterface, CustomInterfaceIterator } from './types/interface';
39
38
  export { default as CustomList, CustomListIterator } from './types/list';
40
39
  export { default as CustomMap, CustomMapIterator } from './types/map';
41
40
  export { default as CustomNil } from './types/nil';
42
41
  export { default as CustomNumber } from './types/number';
43
42
  export { default as CustomString, CustomStringIterator } from './types/string';
43
+ export { CustomObject, CustomValueWithIntrinsics } from './types/with-intrinsics';
44
44
  export { default as deepEqual } from './utils/deep-equal';
45
+ export { default as ObjectValue } from './utils/object-value';
45
46
  export { default as Path } from './utils/path';