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 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 "\"".concat(this.value.toString(), "\"");
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.isCustomList)(a) || (0, typer_1.isCustomList)(b)) {
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
- return [2 /*return*/, (0, typer_1.cast)(exports.OPERATIONS[node.operator](left, right))];
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();
@@ -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
  }
@@ -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;
@@ -117,7 +117,7 @@ var BodyOperation = /** @class */ (function (_super) {
117
117
  _d.sent();
118
118
  _d.label = 8;
119
119
  case 8:
120
- if (isEOL())
120
+ if (isEOL() || operationContext.processState.exit)
121
121
  return [3 /*break*/, 10];
122
122
  _d.label = 9;
123
123
  case 9:
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
- value = Object.entries(value).reduce(function (result, _a) {
88
- var _b;
89
- var _c = __read(_a, 2), key = _c[0], item = _c[1];
90
- return __assign(__assign({}, result), (_b = {}, _b[key] = (0, exports.cast)(item), _b));
91
- }, {});
92
- return new map_1.default(value);
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-interpreter",
3
- "version": "0.1.3",
3
+ "version": "0.1.7",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",