greybel-interpreter 1.0.3 → 1.1.1

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 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
- currentTarget: string;
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, currentTarget) {
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 __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
- });
209
+ return this.__visit(item);
217
210
  };
218
211
  return CPS;
219
212
  }());
@@ -107,14 +107,15 @@ var For = /** @class */ (function (_super) {
107
107
  iteratorValue = (_a.sent());
108
108
  loopState = new context_1.LoopState();
109
109
  forCtx.loopState = loopState;
110
- return [2 /*return*/, new Promise(function (resolve, _reject) {
110
+ return [2 /*return*/, new Promise(function (resolve, reject) {
111
111
  var iterator = iteratorValue[Symbol.iterator]();
112
112
  var iteratorResult = iterator.next();
113
113
  var iteration = function () { return __awaiter(_this, void 0, void 0, function () {
114
- var current;
114
+ var current, err_1;
115
115
  return __generator(this, function (_a) {
116
116
  switch (_a.label) {
117
117
  case 0:
118
+ _a.trys.push([0, 2, , 3]);
118
119
  if (iteratorResult.done) {
119
120
  resolve(default_1.default.Void);
120
121
  return [2 /*return*/];
@@ -131,7 +132,12 @@ var For = /** @class */ (function (_super) {
131
132
  }
132
133
  iteratorResult = iterator.next();
133
134
  process.nextTick(iteration);
134
- return [2 /*return*/];
135
+ return [3 /*break*/, 3];
136
+ case 2:
137
+ err_1 = _a.sent();
138
+ reject(err_1);
139
+ return [3 /*break*/, 3];
140
+ case 3: return [2 /*return*/];
135
141
  }
136
142
  });
137
143
  }); };
@@ -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 !== null)) return [3 /*break*/, 2];
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:
@@ -94,12 +94,14 @@ var While = /** @class */ (function (_super) {
94
94
  });
95
95
  loopState = new context_1.LoopState();
96
96
  whileCtx.loopState = loopState;
97
- return [2 /*return*/, new Promise(function (resolve, _reject) {
97
+ return [2 /*return*/, new Promise(function (resolve, reject) {
98
98
  var iteration = function () { return __awaiter(_this, void 0, void 0, function () {
99
- var conditionResult;
99
+ var conditionResult, err_1;
100
100
  return __generator(this, function (_a) {
101
101
  switch (_a.label) {
102
- case 0: return [4 /*yield*/, this.condition.handle(whileCtx)];
102
+ case 0:
103
+ _a.trys.push([0, 3, , 4]);
104
+ return [4 /*yield*/, this.condition.handle(whileCtx)];
103
105
  case 1:
104
106
  conditionResult = _a.sent();
105
107
  if (!conditionResult.toTruthy()) {
@@ -115,7 +117,12 @@ var While = /** @class */ (function (_super) {
115
117
  return [2 /*return*/];
116
118
  }
117
119
  process.nextTick(iteration);
118
- return [2 /*return*/];
120
+ return [3 /*break*/, 4];
121
+ case 3:
122
+ err_1 = _a.sent();
123
+ reject(err_1);
124
+ return [3 /*break*/, 4];
125
+ case 4: return [2 /*return*/];
119
126
  }
120
127
  });
121
128
  }); };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-interpreter",
3
- "version": "1.0.3",
3
+ "version": "1.1.1",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",
@@ -48,8 +48,8 @@
48
48
  "typescript": "^4.5.4"
49
49
  },
50
50
  "dependencies": {
51
- "greybel-core": "^0.3.0",
52
- "greyscript-core": "^0.2.8"
51
+ "greybel-core": "^0.3.1",
52
+ "greyscript-core": "^0.2.9"
53
53
  },
54
54
  "keywords": [
55
55
  "greyscript",