greybel-interpreter 0.5.4 → 0.5.5

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.
@@ -5,6 +5,7 @@ export declare class CustomListIterator implements Iterator<any> {
5
5
  constructor(value: any);
6
6
  next(): IteratorResult<any>;
7
7
  }
8
+ export declare function itemAtIndex(list: any[], n: number): number;
8
9
  export default class CustomList extends CustomObjectType {
9
10
  static intrinsics: Map<string, Function>;
10
11
  value: any[];
@@ -13,7 +14,6 @@ export default class CustomList extends CustomObjectType {
13
14
  [Symbol.iterator](): CustomListIterator;
14
15
  concat(list: CustomList): CustomList;
15
16
  slice: (a: CustomLiteralType, b: CustomLiteralType) => CustomList;
16
- toIndex(value: string): number | null;
17
17
  set(path: any[], value: any): Promise<void>;
18
18
  get(path: any[]): Promise<any>;
19
19
  getCallable(path: any[]): Promise<Callable>;
@@ -76,7 +76,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
76
76
  return to.concat(ar || Array.prototype.slice.call(from));
77
77
  };
78
78
  Object.defineProperty(exports, "__esModule", { value: true });
79
- exports.CustomListIterator = void 0;
79
+ exports.itemAtIndex = exports.CustomListIterator = void 0;
80
80
  var operation_1 = require("../types/operation");
81
81
  var custom_type_1 = require("../types/custom-type");
82
82
  var CustomListIterator = /** @class */ (function () {
@@ -101,6 +101,15 @@ var CustomListIterator = /** @class */ (function () {
101
101
  return CustomListIterator;
102
102
  }());
103
103
  exports.CustomListIterator = CustomListIterator;
104
+ function itemAtIndex(list, n) {
105
+ n = Math.trunc(n) || 0;
106
+ if (n < 0)
107
+ n += list.length;
108
+ if (n < 0 || n >= list.length)
109
+ return -1;
110
+ return n;
111
+ }
112
+ exports.itemAtIndex = itemAtIndex;
104
113
  var CustomList = /** @class */ (function (_super) {
105
114
  __extends(CustomList, _super);
106
115
  function CustomList(value) {
@@ -120,51 +129,34 @@ var CustomList = /** @class */ (function (_super) {
120
129
  CustomList.prototype.concat = function (list) {
121
130
  return new CustomList(this.value.concat(list.value));
122
131
  };
123
- CustomList.prototype.toIndex = function (value) {
124
- var me = this;
125
- var casted = Number(value);
126
- var result = casted < 0 ? me.value.length + casted : casted;
127
- if (result < 0) {
128
- return null;
129
- }
130
- return result;
131
- };
132
132
  CustomList.prototype.set = function (path, value) {
133
133
  return __awaiter(this, void 0, void 0, function () {
134
- var me, traversalPath, refs, last, current, origin, index, setterIndex;
134
+ var me, traversalPath, refs, last, current, indexResult, sub, lastIndex;
135
135
  return __generator(this, function (_a) {
136
136
  me = this;
137
137
  traversalPath = [].concat(path);
138
138
  refs = me.value;
139
139
  last = traversalPath.pop();
140
140
  current = traversalPath.shift();
141
- origin = refs;
142
141
  if (current != null) {
143
- index = me.toIndex(current);
144
- if (origin.hasOwnProperty(index)) {
145
- origin = origin[index];
146
- if (origin instanceof custom_type_1.CustomObjectType) {
147
- return [2 /*return*/, origin.set(traversalPath.concat([last]), value)];
142
+ indexResult = itemAtIndex(refs, Number(current));
143
+ if (refs.hasOwnProperty(indexResult)) {
144
+ sub = refs[indexResult];
145
+ if (sub instanceof custom_type_1.CustomObjectType) {
146
+ return [2 /*return*/, sub.set(traversalPath.concat([last]), value)];
148
147
  }
149
148
  }
150
- else {
151
- throw new Error("Cannot set path ".concat(path.join('.')));
152
- }
149
+ throw new Error("Cannot set path ".concat(path.join('.')));
153
150
  }
154
- if (origin) {
155
- setterIndex = me.toIndex(last);
156
- if (!origin.hasOwnProperty(setterIndex)) {
157
- throw new Error("Index error (list index ".concat(setterIndex, " out of range)"));
158
- }
159
- if (value instanceof operation_1.FunctionOperationBase) {
160
- origin[setterIndex] = value.fork(me);
161
- }
162
- else {
163
- origin[setterIndex] = value;
164
- }
151
+ lastIndex = itemAtIndex(refs, Number(last));
152
+ if (!refs.hasOwnProperty(lastIndex)) {
153
+ throw new Error("Index error (list index ".concat(lastIndex, " out of range)"));
154
+ }
155
+ if (value instanceof operation_1.FunctionOperationBase) {
156
+ refs[lastIndex] = value.fork(me);
165
157
  }
166
158
  else {
167
- throw new Error("Cannot set path ".concat(path.join('.')));
159
+ refs[lastIndex] = value;
168
160
  }
169
161
  return [2 /*return*/];
170
162
  });
@@ -172,7 +164,7 @@ var CustomList = /** @class */ (function (_super) {
172
164
  };
173
165
  CustomList.prototype.get = function (path) {
174
166
  return __awaiter(this, void 0, void 0, function () {
175
- var me, traversalPath, refs, current, currentValue, origin, index;
167
+ var me, traversalPath, refs, current, currentIndex, sub;
176
168
  return __generator(this, function (_a) {
177
169
  me = this;
178
170
  if (path.length === 0) {
@@ -181,46 +173,48 @@ var CustomList = /** @class */ (function (_super) {
181
173
  traversalPath = [].concat(path);
182
174
  refs = me.value;
183
175
  current = traversalPath.shift();
184
- currentValue = current.valueOf();
185
- origin = refs;
186
- if (currentValue != null) {
187
- index = me.toIndex(current);
188
- if (origin.hasOwnProperty(index)) {
189
- origin = origin[index];
190
- if (traversalPath.length > 0 && origin instanceof custom_type_1.CustomObjectType) {
191
- return [2 /*return*/, origin.get(traversalPath)];
176
+ if (current != null) {
177
+ currentIndex = itemAtIndex(refs, Number(current));
178
+ if (refs.hasOwnProperty(currentIndex)) {
179
+ sub = refs[currentIndex];
180
+ if (traversalPath.length > 0 && sub instanceof custom_type_1.CustomObjectType) {
181
+ return [2 /*return*/, sub.get(traversalPath)];
182
+ }
183
+ if (traversalPath.length === 0) {
184
+ return [2 /*return*/, sub];
192
185
  }
193
186
  }
194
- else if (path.length === 1 && CustomList.intrinsics.has(currentValue)) {
195
- return [2 /*return*/, CustomList.intrinsics.get(currentValue).bind(null, me)];
187
+ else if (path.length === 1 && CustomList.intrinsics.has(current)) {
188
+ return [2 /*return*/, CustomList.intrinsics.get(current).bind(null, me)];
196
189
  }
197
190
  else {
198
191
  throw new Error("Cannot get path ".concat(path.join('.')));
199
192
  }
200
193
  }
201
- else {
202
- return [2 /*return*/, null];
203
- }
204
- return [2 /*return*/, origin];
194
+ return [2 /*return*/, null];
205
195
  });
206
196
  });
207
197
  };
208
198
  CustomList.prototype.getCallable = function (path) {
209
199
  return __awaiter(this, void 0, void 0, function () {
210
- var me, traversalPath, refs, current, origin, context, index;
200
+ var me, traversalPath, refs, current, currentIndex, sub;
211
201
  return __generator(this, function (_a) {
212
202
  me = this;
213
203
  traversalPath = [].concat(path);
214
204
  refs = me.value;
215
205
  current = traversalPath.shift();
216
- origin = refs;
217
206
  if (current != null) {
218
- index = me.toIndex(current);
219
- if (origin.hasOwnProperty(index)) {
220
- context = origin;
221
- origin = origin[index];
222
- if (origin instanceof custom_type_1.CustomObjectType) {
223
- return [2 /*return*/, origin.getCallable(traversalPath)];
207
+ currentIndex = itemAtIndex(refs, Number(current));
208
+ if (refs.hasOwnProperty(currentIndex)) {
209
+ sub = refs[currentIndex];
210
+ if (sub instanceof custom_type_1.CustomObjectType) {
211
+ return [2 /*return*/, sub.getCallable(traversalPath)];
212
+ }
213
+ if (traversalPath.length === 0) {
214
+ return [2 /*return*/, Promise.resolve({
215
+ origin: sub,
216
+ context: me
217
+ })];
224
218
  }
225
219
  }
226
220
  else if (path.length === 1 && CustomList.intrinsics.has(current)) {
@@ -234,14 +228,15 @@ var CustomList = /** @class */ (function (_super) {
234
228
  }
235
229
  }
236
230
  return [2 /*return*/, {
237
- origin: origin,
238
- context: context
231
+ origin: refs,
232
+ context: me
239
233
  }];
240
234
  });
241
235
  });
242
236
  };
243
237
  CustomList.prototype.callMethod = function (method) {
244
238
  var _a;
239
+ var _b;
245
240
  var args = [];
246
241
  for (var _i = 1; _i < arguments.length; _i++) {
247
242
  args[_i - 1] = arguments[_i];
@@ -250,16 +245,16 @@ var CustomList = /** @class */ (function (_super) {
250
245
  throw new Error('Unexpected method length');
251
246
  }
252
247
  var me = this;
253
- var member = method[0].valueOf();
248
+ var member = (_b = method[0]) === null || _b === void 0 ? void 0 : _b.toString();
254
249
  if (CustomList.isNumber(member)) {
255
- var index = me.toIndex(member);
256
- if (!me.value.hasOwnProperty(index)) {
250
+ var memberIndex = itemAtIndex(me.value, Number(member));
251
+ if (!me.value.hasOwnProperty(memberIndex)) {
257
252
  return null;
258
253
  }
259
254
  if (method.length > 1) {
260
- return (_a = me.value[index]).callMethod.apply(_a, __spreadArray([method.slice(1)], __read(args), false));
255
+ return (_a = me.value[memberIndex]).callMethod.apply(_a, __spreadArray([method.slice(1)], __read(args), false));
261
256
  }
262
- return me.value[index];
257
+ return me.value[memberIndex];
263
258
  }
264
259
  if (!CustomList.intrinsics.has(member)) {
265
260
  throw new Error("Cannot access ".concat(member, " in list"));
@@ -93,28 +93,22 @@ var CustomMap = /** @class */ (function (_super) {
93
93
  var refs = me.value;
94
94
  var last = traversalPath.pop();
95
95
  var current = traversalPath.shift();
96
- var origin = refs;
97
96
  if (current != null) {
98
- if (origin.has(current)) {
99
- origin = origin.get(current);
100
- if (origin instanceof custom_type_1.CustomObjectType) {
101
- return origin.set(traversalPath.concat(last), value);
97
+ if (refs.has(current)) {
98
+ var sub = refs.get(current);
99
+ if (sub instanceof custom_type_1.CustomObjectType) {
100
+ return sub.set(traversalPath.concat(last), value);
102
101
  }
103
102
  }
104
103
  else {
105
104
  throw new Error("Cannot set path ".concat(path.join('.')));
106
105
  }
107
106
  }
108
- if (origin) {
109
- if (value instanceof operation_1.FunctionOperationBase) {
110
- origin.set(last, value.fork(me));
111
- }
112
- else {
113
- origin.set(last, value);
114
- }
107
+ if (value instanceof operation_1.FunctionOperationBase) {
108
+ refs.set(last, value.fork(me));
115
109
  }
116
110
  else {
117
- throw new Error("Cannot set path ".concat(path.join('.')));
111
+ refs.set(last, value);
118
112
  }
119
113
  };
120
114
  CustomMap.prototype.get = function (path) {
@@ -125,40 +119,47 @@ var CustomMap = /** @class */ (function (_super) {
125
119
  var traversalPath = [].concat(path);
126
120
  var refs = me.value;
127
121
  var current = traversalPath.shift();
128
- var currentValue = current.valueOf();
129
- var origin = refs;
130
- if (currentValue != null) {
131
- if (origin.has(currentValue)) {
132
- origin = origin.get(currentValue);
133
- if (traversalPath.length > 0 && origin instanceof custom_type_1.CustomObjectType) {
134
- return origin.get(traversalPath);
122
+ if (current != null) {
123
+ if (refs.has(current)) {
124
+ var sub = refs.get(current);
125
+ if (traversalPath.length > 0 && sub instanceof custom_type_1.CustomObjectType) {
126
+ return sub.get(traversalPath);
127
+ }
128
+ if (traversalPath.length === 0) {
129
+ return sub;
135
130
  }
136
131
  }
137
- else if (path.length === 1 && CustomMap.intrinsics.has(currentValue)) {
138
- return Promise.resolve(CustomMap.intrinsics.get(currentValue).bind(null, me));
132
+ else if (path.length === 1 && CustomMap.intrinsics.has(current)) {
133
+ return Promise.resolve(CustomMap.intrinsics.get(current).bind(null, me));
139
134
  }
140
135
  else {
141
136
  throw new Error("Cannot get path ".concat(path.join('.')));
142
137
  }
143
138
  }
144
- else {
145
- return null;
146
- }
147
- return Promise.resolve(origin);
139
+ return Promise.resolve(null);
148
140
  };
149
141
  CustomMap.prototype.getCallable = function (path) {
150
142
  var me = this;
143
+ if (path.length === 0) {
144
+ return Promise.resolve({
145
+ origin: me.value,
146
+ context: me
147
+ });
148
+ }
151
149
  var traversalPath = [].concat(path);
152
150
  var refs = me.value;
153
151
  var current = traversalPath.shift();
154
- var origin = refs;
155
- var context;
156
152
  if (current != null) {
157
- if (origin.has(current)) {
158
- context = origin;
159
- origin = origin.get(current);
160
- if (origin instanceof custom_type_1.CustomObjectType) {
161
- return origin.getCallable(traversalPath);
153
+ if (refs.has(current)) {
154
+ var sub = refs.get(current);
155
+ if (sub instanceof custom_type_1.CustomObjectType) {
156
+ return sub.getCallable(traversalPath);
157
+ }
158
+ if (traversalPath.length === 0) {
159
+ return Promise.resolve({
160
+ origin: sub,
161
+ context: me
162
+ });
162
163
  }
163
164
  }
164
165
  else if (path.length === 1 && CustomMap.intrinsics.has(current)) {
@@ -171,13 +172,11 @@ var CustomMap = /** @class */ (function (_super) {
171
172
  throw new Error("Cannot get path ".concat(path.join('.')));
172
173
  }
173
174
  }
174
- return Promise.resolve({
175
- origin: origin,
176
- context: context
177
- });
175
+ return Promise.resolve(null);
178
176
  };
179
177
  CustomMap.prototype.callMethod = function (method) {
180
178
  var _a;
179
+ var _b;
181
180
  var args = [];
182
181
  for (var _i = 1; _i < arguments.length; _i++) {
183
182
  args[_i - 1] = arguments[_i];
@@ -186,7 +185,7 @@ var CustomMap = /** @class */ (function (_super) {
186
185
  throw new Error('Unexpected method length');
187
186
  }
188
187
  var me = this;
189
- var key = method[0].valueOf();
188
+ var key = (_b = method[0]) === null || _b === void 0 ? void 0 : _b.toString();
190
189
  if (method.length > 1) {
191
190
  if (me.value.has(key)) {
192
191
  return (_a = me.value.get(key)).callMethod.apply(_a, __spreadArray([method.slice(1)], __read(args), false));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-interpreter",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",