greybel-interpreter 1.0.4 → 1.1.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.
- package/dist/cps.d.ts +2 -3
- package/dist/cps.js +130 -137
- package/dist/operations/return.js +1 -1
- package/package.json +1 -1
package/dist/cps.d.ts
CHANGED
|
@@ -4,12 +4,11 @@ import Operation from './operations/operation';
|
|
|
4
4
|
export declare class CPSContext {
|
|
5
5
|
readonly target: string;
|
|
6
6
|
readonly handler: HandlerContainer;
|
|
7
|
-
|
|
8
|
-
constructor(target: string, handler: HandlerContainer, currentTarget?: string);
|
|
9
|
-
getCurrentTarget(): string;
|
|
7
|
+
constructor(target: string, handler: HandlerContainer);
|
|
10
8
|
}
|
|
11
9
|
export default class CPS {
|
|
12
10
|
private readonly context;
|
|
11
|
+
private __visit;
|
|
13
12
|
constructor(context: CPSContext);
|
|
14
13
|
visit(item: ASTBase): Promise<Operation>;
|
|
15
14
|
}
|
package/dist/cps.js
CHANGED
|
@@ -66,154 +66,147 @@ var resolve_1 = __importDefault(require("./operations/resolve"));
|
|
|
66
66
|
var return_1 = __importDefault(require("./operations/return"));
|
|
67
67
|
var while_1 = __importDefault(require("./operations/while"));
|
|
68
68
|
var CPSContext = /** @class */ (function () {
|
|
69
|
-
function CPSContext(target, handler
|
|
70
|
-
if (currentTarget === void 0) { currentTarget = null; }
|
|
69
|
+
function CPSContext(target, handler) {
|
|
71
70
|
this.target = target;
|
|
72
71
|
this.handler = handler;
|
|
73
|
-
this.currentTarget = currentTarget;
|
|
74
72
|
}
|
|
75
|
-
CPSContext.prototype.getCurrentTarget = function () {
|
|
76
|
-
return this.currentTarget;
|
|
77
|
-
};
|
|
78
73
|
return CPSContext;
|
|
79
74
|
}());
|
|
80
75
|
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, "."));
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}); };
|
|
81
203
|
var CPS = /** @class */ (function () {
|
|
82
204
|
function CPS(context) {
|
|
83
205
|
this.context = context;
|
|
206
|
+
this.__visit = visit.bind(null, context, context.target);
|
|
84
207
|
}
|
|
85
208
|
CPS.prototype.visit = function (item) {
|
|
86
|
-
return
|
|
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
|
-
});
|
|
209
|
+
return this.__visit(item);
|
|
217
210
|
};
|
|
218
211
|
return CPS;
|
|
219
212
|
}());
|
|
@@ -90,7 +90,7 @@ var Return = /** @class */ (function (_super) {
|
|
|
90
90
|
return __generator(this, function (_b) {
|
|
91
91
|
switch (_b.label) {
|
|
92
92
|
case 0:
|
|
93
|
-
if (!(ctx.functionState
|
|
93
|
+
if (!(ctx.functionState != null)) return [3 /*break*/, 2];
|
|
94
94
|
_a = ctx.functionState;
|
|
95
95
|
return [4 /*yield*/, this.arg.handle(ctx)];
|
|
96
96
|
case 1:
|