greybel-interpreter 0.1.3 → 0.1.7
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/context.d.ts +5 -0
- package/dist/context.js +5 -1
- package/dist/custom-types/string.js +1 -1
- package/dist/expressions/logical-and-binary.js +7 -3
- package/dist/interpreter.d.ts +3 -1
- package/dist/interpreter.js +9 -0
- package/dist/operations/body.js +1 -1
- package/dist/typer.js +13 -17
- package/package.json +1 -1
package/dist/context.d.ts
CHANGED
|
@@ -39,6 +39,9 @@ export declare class Debugger {
|
|
|
39
39
|
interact(operationContext: OperationContext, item: Operation | Expression): void;
|
|
40
40
|
run(code: string): Promise<void>;
|
|
41
41
|
}
|
|
42
|
+
export interface OperationContextProcessState {
|
|
43
|
+
exit: boolean;
|
|
44
|
+
}
|
|
42
45
|
export interface OperationContextOptions {
|
|
43
46
|
isProtected?: boolean;
|
|
44
47
|
type?: string;
|
|
@@ -46,6 +49,7 @@ export interface OperationContextOptions {
|
|
|
46
49
|
previous?: OperationContext;
|
|
47
50
|
debugger?: Debugger;
|
|
48
51
|
cps?: CPS;
|
|
52
|
+
processState?: OperationContextProcessState;
|
|
49
53
|
}
|
|
50
54
|
export declare class OperationContext {
|
|
51
55
|
debugger: Debugger;
|
|
@@ -56,6 +60,7 @@ export declare class OperationContext {
|
|
|
56
60
|
isProtected: boolean;
|
|
57
61
|
memory: Map<string, any>;
|
|
58
62
|
cps: CPS | null;
|
|
63
|
+
processState: OperationContextProcessState;
|
|
59
64
|
constructor(options: OperationContextOptions);
|
|
60
65
|
valueOf(): Map<string, any>;
|
|
61
66
|
extend(map: Map<string, any>): OperationContext;
|
package/dist/context.js
CHANGED
|
@@ -312,6 +312,9 @@ var OperationContext = /** @class */ (function () {
|
|
|
312
312
|
me.memory = new Map();
|
|
313
313
|
me.debugger = options.debugger || new Debugger();
|
|
314
314
|
me.cps = options.cps;
|
|
315
|
+
me.processState = options.processState || {
|
|
316
|
+
exit: false
|
|
317
|
+
};
|
|
315
318
|
}
|
|
316
319
|
OperationContext.prototype.valueOf = function () {
|
|
317
320
|
return this.scope.valueOf();
|
|
@@ -381,7 +384,8 @@ var OperationContext = /** @class */ (function () {
|
|
|
381
384
|
type: type,
|
|
382
385
|
state: state,
|
|
383
386
|
debugger: me.debugger,
|
|
384
|
-
cps: me.cps
|
|
387
|
+
cps: me.cps,
|
|
388
|
+
processState: me.processState
|
|
385
389
|
});
|
|
386
390
|
if (me.type === ContextType.FUNCTION || me.type === ContextType.GLOBAL) {
|
|
387
391
|
opc.scope.refs.set('locals', opc.scope);
|
|
@@ -120,7 +120,7 @@ var CustomString = /** @class */ (function (_super) {
|
|
|
120
120
|
return me.value.length === 0 ? null : me.value;
|
|
121
121
|
};
|
|
122
122
|
CustomString.prototype.toString = function () {
|
|
123
|
-
return
|
|
123
|
+
return this.value;
|
|
124
124
|
};
|
|
125
125
|
CustomString.prototype.fork = function () {
|
|
126
126
|
return new CustomString(this.value);
|
|
@@ -71,7 +71,10 @@ var multiplyString = function (a, b) {
|
|
|
71
71
|
exports.multiplyString = multiplyString;
|
|
72
72
|
exports.OPERATIONS = (_a = {},
|
|
73
73
|
_a[greybel_core_1.Operator.Plus] = function (a, b) {
|
|
74
|
-
if ((0, typer_1.
|
|
74
|
+
if ((0, typer_1.isCustomMap)(a) && (0, typer_1.isCustomMap)(b)) {
|
|
75
|
+
return a.extend(b.value);
|
|
76
|
+
}
|
|
77
|
+
else if ((0, typer_1.isCustomList)(a) && (0, typer_1.isCustomList)(b)) {
|
|
75
78
|
return a.concat(b);
|
|
76
79
|
}
|
|
77
80
|
var aVal = (0, typer_1.isCustomString)(a) ? (a.valueOf() || '') : (0, exports.toPrimitive)(a);
|
|
@@ -140,7 +143,7 @@ var LogicalAndBinaryExpression = /** @class */ (function (_super) {
|
|
|
140
143
|
return value.get(operationContext);
|
|
141
144
|
};
|
|
142
145
|
var evaluate = function (node) { return __awaiter(_this, void 0, void 0, function () {
|
|
143
|
-
var left, right, _a;
|
|
146
|
+
var left, right, _a, result;
|
|
144
147
|
return __generator(this, function (_b) {
|
|
145
148
|
switch (_b.label) {
|
|
146
149
|
case 0:
|
|
@@ -156,7 +159,8 @@ var LogicalAndBinaryExpression = /** @class */ (function (_super) {
|
|
|
156
159
|
return [4 /*yield*/, resolve(node.right)];
|
|
157
160
|
case 3:
|
|
158
161
|
right = _b.sent();
|
|
159
|
-
|
|
162
|
+
result = exports.OPERATIONS[node.operator](left, right);
|
|
163
|
+
return [2 /*return*/, (0, typer_1.cast)(Number.isNaN(result) ? null : result)];
|
|
160
164
|
case 4: return [4 /*yield*/, resolve(node.left)];
|
|
161
165
|
case 5:
|
|
162
166
|
left = _b.sent();
|
package/dist/interpreter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Debugger } from './context';
|
|
1
|
+
import { OperationContext, Debugger } from './context';
|
|
2
2
|
import { ResourceHandler } from './resource';
|
|
3
3
|
export interface InterpreterOptions {
|
|
4
4
|
target?: string;
|
|
@@ -15,6 +15,8 @@ export default class Interpreter {
|
|
|
15
15
|
params: any[];
|
|
16
16
|
resourceHandler: ResourceHandler;
|
|
17
17
|
debugger: Debugger;
|
|
18
|
+
context: OperationContext | null;
|
|
18
19
|
constructor(options: InterpreterOptions);
|
|
19
20
|
digest(): Promise<any>;
|
|
21
|
+
exit(): void;
|
|
20
22
|
}
|
package/dist/interpreter.js
CHANGED
|
@@ -17,6 +17,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
17
17
|
me.debugger = options.debugger || new context_1.Debugger();
|
|
18
18
|
me.api = options.api || new Map();
|
|
19
19
|
me.params = options.params || [];
|
|
20
|
+
me.context = null;
|
|
20
21
|
if (options.target) {
|
|
21
22
|
me.target = options.target;
|
|
22
23
|
me.code = me.resourceHandler.get(options.target);
|
|
@@ -44,12 +45,20 @@ var Interpreter = /** @class */ (function () {
|
|
|
44
45
|
});
|
|
45
46
|
mainContext.extend(me.api);
|
|
46
47
|
mainContext.scope.refs.set('params', (0, typer_1.cast)(me.params));
|
|
48
|
+
me.context = mainContext;
|
|
47
49
|
return topOperation.run(mainContext)
|
|
48
50
|
.catch(function (err) {
|
|
49
51
|
console.error(err);
|
|
50
52
|
throw err;
|
|
51
53
|
});
|
|
52
54
|
};
|
|
55
|
+
Interpreter.prototype.exit = function () {
|
|
56
|
+
var me = this;
|
|
57
|
+
if (me.context == null) {
|
|
58
|
+
throw new Error('Unexpected exit signal.');
|
|
59
|
+
}
|
|
60
|
+
me.context.processState.exit = true;
|
|
61
|
+
};
|
|
53
62
|
return Interpreter;
|
|
54
63
|
}());
|
|
55
64
|
exports.default = Interpreter;
|
package/dist/operations/body.js
CHANGED
package/dist/typer.js
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __read = (this && this.__read) || function (o, n) {
|
|
14
3
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
4
|
if (!m) return o;
|
|
@@ -84,12 +73,19 @@ var cast = function (value) {
|
|
|
84
73
|
value = value.map(exports.cast);
|
|
85
74
|
return new list_1.default(value);
|
|
86
75
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
76
|
+
var result_1 = new Map();
|
|
77
|
+
if (value instanceof Map) {
|
|
78
|
+
value.forEach(function (item, key) {
|
|
79
|
+
result_1.set(key, (0, exports.cast)(item));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
Object.entries(value).forEach(function (_a) {
|
|
84
|
+
var _b = __read(_a, 2), key = _b[0], item = _b[1];
|
|
85
|
+
result_1.set(key, (0, exports.cast)(item));
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return new map_1.default(result_1);
|
|
93
89
|
}
|
|
94
90
|
else if (type === 'function') {
|
|
95
91
|
return value;
|