greybel-interpreter 0.1.4 → 0.1.8
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/list.js +2 -2
- package/dist/custom-types/map.js +2 -2
- package/dist/custom-types/string.js +1 -1
- package/dist/interpreter.d.ts +3 -1
- package/dist/interpreter.js +9 -0
- package/dist/operations/body.js +1 -1
- package/dist/typer.js +11 -7
- 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);
|
|
@@ -195,7 +195,7 @@ var CustomList = /** @class */ (function (_super) {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
else if (path.length === 1 && CustomList.intrinsics.has(currentValue)) {
|
|
198
|
-
return [2 /*return*/, CustomList.intrinsics.get(currentValue)];
|
|
198
|
+
return [2 /*return*/, CustomList.intrinsics.get(currentValue).bind(null, me)];
|
|
199
199
|
}
|
|
200
200
|
else {
|
|
201
201
|
throw new Error("Cannot get path ".concat(path.join('.')));
|
|
@@ -228,7 +228,7 @@ var CustomList = /** @class */ (function (_super) {
|
|
|
228
228
|
}
|
|
229
229
|
else if (path.length === 1 && CustomList.intrinsics.has(current)) {
|
|
230
230
|
return [2 /*return*/, {
|
|
231
|
-
origin: CustomList.intrinsics.get(current),
|
|
231
|
+
origin: CustomList.intrinsics.get(current).bind(null, me),
|
|
232
232
|
context: me
|
|
233
233
|
}];
|
|
234
234
|
}
|
package/dist/custom-types/map.js
CHANGED
|
@@ -180,7 +180,7 @@ var CustomMap = /** @class */ (function (_super) {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
else if (path.length === 1 && CustomMap.intrinsics.has(currentValue)) {
|
|
183
|
-
return [2 /*return*/, CustomMap.intrinsics.get(currentValue)];
|
|
183
|
+
return [2 /*return*/, CustomMap.intrinsics.get(currentValue).bind(null, me)];
|
|
184
184
|
}
|
|
185
185
|
else {
|
|
186
186
|
throw new Error("Cannot get path ".concat(path.join('.')));
|
|
@@ -212,7 +212,7 @@ var CustomMap = /** @class */ (function (_super) {
|
|
|
212
212
|
}
|
|
213
213
|
else if (path.length === 1 && CustomMap.intrinsics.has(current)) {
|
|
214
214
|
return [2 /*return*/, {
|
|
215
|
-
origin: CustomMap.intrinsics.get(current),
|
|
215
|
+
origin: CustomMap.intrinsics.get(current).bind(null, me),
|
|
216
216
|
context: me
|
|
217
217
|
}];
|
|
218
218
|
}
|
|
@@ -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);
|
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
|
@@ -73,14 +73,18 @@ var cast = function (value) {
|
|
|
73
73
|
value = value.map(exports.cast);
|
|
74
74
|
return new list_1.default(value);
|
|
75
75
|
}
|
|
76
|
-
else if (value instanceof Map) {
|
|
77
|
-
return new map_1.default(value);
|
|
78
|
-
}
|
|
79
76
|
var result_1 = new Map();
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
+
}
|
|
84
88
|
return new map_1.default(result_1);
|
|
85
89
|
}
|
|
86
90
|
else if (type === 'function') {
|