@quenk/potoo 3.1.0-0 → 3.1.1-0

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.
@@ -1,16 +1,7 @@
1
- import { Either } from '@quenk/noni/lib/data/either';
2
1
  import { Future } from '@quenk/noni/lib/control/monad/future';
3
2
  import { Context } from './system/vm/runtime/context';
4
3
  import { Message } from './message';
5
4
  import { Address } from './address';
6
- /**
7
- * Behaviour of an actor.
8
- *
9
- * Behaviours are procedures that return an
10
- * Either type indicating whether a message
11
- * was processed or rejected.
12
- */
13
- export declare type Behaviour = (m: Message) => Either<Message, void>;
14
5
  /**
15
6
  * Eff is used in various places to represent the potentially sync or async
16
7
  * side-effect of an actor operation.
@@ -1,19 +1,9 @@
1
- import { Either } from '@quenk/noni/lib/data/either';
2
1
  import { Future } from '@quenk/noni/lib/control/monad/future';
3
2
 
4
3
  import { Context } from './system/vm/runtime/context';
5
4
  import { Message } from './message';
6
5
  import { Address } from './address';
7
6
 
8
- /**
9
- * Behaviour of an actor.
10
- *
11
- * Behaviours are procedures that return an
12
- * Either type indicating whether a message
13
- * was processed or rejected.
14
- */
15
- export type Behaviour = (m: Message) => Either<Message, void>;
16
-
17
7
  /**
18
8
  * Eff is used in various places to represent the potentially sync or async
19
9
  * side-effect of an actor operation.
@@ -1,12 +1,12 @@
1
1
  import { Err } from '@quenk/noni/lib/control/error';
2
2
  import { Context } from '../system/vm/runtime/context';
3
- import { Foreign } from '../system/vm/type';
4
3
  import { System } from '../system';
5
4
  import { Address, AddressMap } from '../address';
6
5
  import { Message } from '../message';
7
6
  import { Templates, Spawnable } from '../template';
8
7
  import { Actor, Eff } from '../';
9
8
  import { Api } from './api';
9
+ import { Data } from '../system/vm/runtime/stack/frame';
10
10
  /**
11
11
  * Reference to an actor address.
12
12
  */
@@ -23,12 +23,13 @@ export declare abstract class AbstractResident implements Resident {
23
23
  system: System;
24
24
  constructor(system: System);
25
25
  self: () => string;
26
+ get platform(): import("../system/vm").Platform;
26
27
  abstract init(c: Context): Context;
27
28
  notify(): void;
28
29
  accept(_: Message): void;
29
30
  spawn(t: Spawnable): Address;
30
31
  spawnGroup(group: string | string[], tmpls: Templates): AddressMap;
31
- tell<M>(ref: Address, m: M): AbstractResident;
32
+ tell<M>(ref: Address, msg: M): AbstractResident;
32
33
  raise(e: Err): AbstractResident;
33
34
  kill(addr: Address): AbstractResident;
34
35
  exit(): void;
@@ -38,7 +39,7 @@ export declare abstract class AbstractResident implements Resident {
38
39
  /**
39
40
  * exec calls a VM function by name on behalf of this actor.
40
41
  */
41
- exec(fname: string, args: Foreign[]): void;
42
+ exec(fname: string, args: Data[]): void;
42
43
  }
43
44
  /**
44
45
  * ref produces a function for sending messages to an actor address.
@@ -11,8 +11,15 @@ var AbstractResident = /** @class */ (function () {
11
11
  this.system = system;
12
12
  this.self = getSelf(this);
13
13
  }
14
+ Object.defineProperty(AbstractResident.prototype, "platform", {
15
+ get: function () {
16
+ return this.system.getPlatform();
17
+ },
18
+ enumerable: false,
19
+ configurable: true
20
+ });
14
21
  AbstractResident.prototype.notify = function () {
15
- this.system.getPlatform().exec(this, 'notify');
22
+ this.platform.exec(this, 'notify');
16
23
  };
17
24
  AbstractResident.prototype.accept = function (_) { };
18
25
  AbstractResident.prototype.spawn = function (t) {
@@ -23,8 +30,9 @@ var AbstractResident = /** @class */ (function () {
23
30
  return record_1.map(tmpls, function (t) { return _this.spawn(type_1.isObject(t) ?
24
31
  record_1.merge(t, { group: group }) : { group: group, create: t }); });
25
32
  };
26
- AbstractResident.prototype.tell = function (ref, m) {
27
- this.exec('tell', [ref, m]);
33
+ AbstractResident.prototype.tell = function (ref, msg) {
34
+ var heap = this.platform.heap;
35
+ this.exec('tell', [heap.string(ref), heap.object(msg)]);
28
36
  return this;
29
37
  };
30
38
  AbstractResident.prototype.raise = function (e) {
@@ -33,7 +41,7 @@ var AbstractResident = /** @class */ (function () {
33
41
  };
34
42
  AbstractResident.prototype.kill = function (addr) {
35
43
  var _this = this;
36
- this.system.getPlatform().kill(this, addr).fork(function (e) { return _this.raise(e); });
44
+ this.platform.kill(this, addr).fork(function (e) { return _this.raise(e); });
37
45
  return this;
38
46
  };
39
47
  AbstractResident.prototype.exit = function () {
@@ -49,8 +57,7 @@ var AbstractResident = /** @class */ (function () {
49
57
  * exec calls a VM function by name on behalf of this actor.
50
58
  */
51
59
  AbstractResident.prototype.exec = function (fname, args) {
52
- var vm = this.system.getPlatform();
53
- vm.exec(this, fname, args);
60
+ this.platform.exec(this, fname, args);
54
61
  };
55
62
  return AbstractResident;
56
63
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ import { isObject } from '@quenk/noni/lib/data/type';
4
4
  import { Err } from '@quenk/noni/lib/control/error';
5
5
 
6
6
  import { Context } from '../system/vm/runtime/context';
7
- import { Foreign } from '../system/vm/type';
8
7
  import { System } from '../system';
9
8
  import {
10
9
  Address,
@@ -14,6 +13,7 @@ import { Message } from '../message';
14
13
  import { Templates, Spawnable } from '../template';
15
14
  import { Actor, Eff } from '../';
16
15
  import { Api } from './api';
16
+ import { Data } from '../system/vm/runtime/stack/frame';
17
17
 
18
18
  /**
19
19
  * Reference to an actor address.
@@ -39,11 +39,17 @@ export abstract class AbstractResident
39
39
 
40
40
  self = getSelf(this);
41
41
 
42
+ get platform() {
43
+
44
+ return this.system.getPlatform();
45
+
46
+ }
47
+
42
48
  abstract init(c: Context): Context;
43
49
 
44
50
  notify() {
45
51
 
46
- this.system.getPlatform().exec(this, 'notify');
52
+ this.platform.exec(this, 'notify');
47
53
 
48
54
  }
49
55
 
@@ -62,30 +68,34 @@ export abstract class AbstractResident
62
68
 
63
69
  }
64
70
 
65
- tell<M>(ref: Address, m: M): AbstractResident {
71
+ tell<M>(ref: Address, msg: M): AbstractResident {
72
+
73
+ let { heap } = this.platform;
74
+
75
+ this.exec('tell', [heap.string(ref), heap.object(msg)]);
66
76
 
67
- this.exec('tell', [ref, m]);
68
77
  return this;
69
78
 
70
79
  }
71
80
 
72
81
  raise(e: Err): AbstractResident {
73
82
 
74
- this.system.getPlatform().raise(this, e );
83
+ this.system.getPlatform().raise(this, e);
75
84
  return this;
76
85
 
77
86
  }
78
87
 
79
88
  kill(addr: Address): AbstractResident {
80
89
 
81
- this.system.getPlatform().kill(this, addr).fork(e => this.raise(e));
90
+ this.platform.kill(this, addr).fork(e => this.raise(e));
91
+
82
92
  return this;
83
93
 
84
94
  }
85
95
 
86
96
  exit(): void {
87
97
 
88
- this.kill(this.self());
98
+ this.kill(this.self());
89
99
 
90
100
  }
91
101
 
@@ -104,10 +114,9 @@ export abstract class AbstractResident
104
114
  /**
105
115
  * exec calls a VM function by name on behalf of this actor.
106
116
  */
107
- exec(fname: string, args: Foreign[]) {
117
+ exec(fname: string, args: Data[]) {
108
118
 
109
- let vm = this.system.getPlatform();
110
- vm.exec(this, fname, args);
119
+ this.platform.exec(this, fname, args);
111
120
 
112
121
  }
113
122
 
@@ -14,7 +14,7 @@ import { Thread, VMThread } from './thread';
14
14
  import { State, Threads } from './state';
15
15
  import { Script } from './script';
16
16
  import { Context } from './runtime/context';
17
- import { Frame } from './runtime/stack/frame';
17
+ import { Data, Frame } from './runtime/stack/frame';
18
18
  import { Opcode } from './runtime/op';
19
19
  import { Operand } from './runtime';
20
20
  import { Conf } from './conf';
@@ -119,7 +119,7 @@ export interface Platform extends Actor {
119
119
  * exec a function by name with the provided arguments using the actor
120
120
  * instance's thread.
121
121
  */
122
- exec(actor: Instance, funName: string, args?: Foreign[]): void;
122
+ exec(actor: Instance, funName: string, args?: Data[]): void;
123
123
  }
124
124
  /**
125
125
  * PVM (Potoo Virtual Machine) is a JavaScript implemented virtual machine that
@@ -406,7 +406,7 @@ var PVM = /** @class */ (function () {
406
406
  * If you want to immediately deliver a message, use [[sendMessage]] instead.
407
407
  */
408
408
  PVM.prototype.tell = function (ref, msg) {
409
- this.exec(this, 'tell', [ref, msg]);
409
+ this.exec(this, 'tell', [this.heap.string(ref), this.heap.object(msg)]);
410
410
  return this;
411
411
  };
412
412
  PVM.prototype.exec = function (actor, funName, args) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -60,7 +60,7 @@ import {
60
60
  } from './state';
61
61
  import { Script } from './script';
62
62
  import { Context, newContext } from './runtime/context';
63
- import { Frame } from './runtime/stack/frame';
63
+ import { Data, Frame } from './runtime/stack/frame';
64
64
  import { Opcode, toLog } from './runtime/op';
65
65
  import { Operand } from './runtime';
66
66
  import { Conf, defaults } from './conf';
@@ -198,7 +198,7 @@ export interface Platform extends Actor {
198
198
  * exec a function by name with the provided arguments using the actor
199
199
  * instance's thread.
200
200
  */
201
- exec(actor: Instance, funName: string, args?: Foreign[]): void
201
+ exec(actor: Instance, funName: string, args?: Data[]): void
202
202
 
203
203
  }
204
204
 
@@ -721,7 +721,8 @@ export class PVM implements Platform {
721
721
  */
722
722
  tell<M>(ref: Address, msg: M): PVM {
723
723
 
724
- this.exec(this, 'tell', [ref, msg]);
724
+ this.exec(this, 'tell', [this.heap.string(ref), this.heap.object(msg)]);
725
+
725
726
  return this;
726
727
 
727
728
  }
@@ -34,6 +34,27 @@ export interface Owners extends Record<FrameName> {
34
34
  * HeapLedger keeps track of objects created on the heap and their ownership.
35
35
  */
36
36
  export interface HeapLedger {
37
+ /**
38
+ * string adds a string to the heap without specifying an owner.
39
+ *
40
+ * This string will remain on the heap until it is removed or assigned an
41
+ * owner.
42
+ */
43
+ string(value: string): HeapAddress;
44
+ /**
45
+ * object adds a object to the heap without specifying an owner.
46
+ *
47
+ * This object will remain on the heap until it is removed or assigned an
48
+ * owner.
49
+ */
50
+ object(value: Foreign): HeapAddress;
51
+ /**
52
+ * fun adds a fun to the heap without specifying an owner.
53
+ *
54
+ * This fun will remain on the heap until it is removed or assigned an
55
+ * owner.
56
+ */
57
+ fun(value: FunInfo): HeapAddress;
37
58
  /**
38
59
  * addString to the heap on behalf of a frame.
39
60
  */
@@ -71,6 +92,12 @@ export interface HeapLedger {
71
92
  * provied for regular numbers or a null pointer (0) for everything else.
72
93
  */
73
94
  intern(frame: Frame, value: Type): HeapAddress;
95
+ /**
96
+ * move a HeapAddress from one owner to another.
97
+ *
98
+ * This method assumes the address is valid.
99
+ */
100
+ move(ref: HeapAddress, newOwner: FrameName): HeapAddress;
74
101
  /**
75
102
  * frameExit is called whenever a Frame has finished execution and ready
76
103
  * to return its value (if any) to its parent frame.
@@ -96,7 +123,10 @@ export declare class DefaultHeapLedger implements HeapLedger {
96
123
  owners: Owners;
97
124
  constructor(objects?: HeapMap, owners?: Owners);
98
125
  counter: number;
99
- _addItem(frame: Frame, value: Type, flag: number): number;
126
+ _addItem(name: FrameName, value: Type, flag: number): number;
127
+ string(value: string): HeapAddress;
128
+ object(value: HeapObject): HeapAddress;
129
+ fun(value: FunInfo): HeapAddress;
100
130
  addString(frame: Frame, value: string): HeapAddress;
101
131
  addObject(frame: Frame, obj: HeapObject): HeapAddress;
102
132
  addFun(frame: Frame, obj: FunInfo): HeapAddress;
@@ -105,7 +135,8 @@ export declare class DefaultHeapLedger implements HeapLedger {
105
135
  getFrameRefs(frame: Frame): HeapAddress[];
106
136
  getThreadRefs(thread: VMThread): HeapAddress[];
107
137
  intern(frame: Frame, value: Type): HeapAddress;
108
- move(ref: HeapAddress, newOwner: FrameName): void;
138
+ move(ref: HeapAddress, newOwner: FrameName): HeapAddress;
109
139
  frameExit(frame: Frame): void;
110
140
  threadExit(thread: VMThread): void;
111
141
  }
142
+ export declare const isHeapAddress: (ref: number) => boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultHeapLedger = void 0;
3
+ exports.isHeapAddress = exports.DefaultHeapLedger = void 0;
4
4
  var maybe_1 = require("@quenk/noni/lib/data/maybe");
5
5
  var record_1 = require("@quenk/noni/lib/data/record");
6
6
  var type_1 = require("@quenk/noni/lib/data/type");
@@ -17,20 +17,30 @@ var DefaultHeapLedger = /** @class */ (function () {
17
17
  this.owners = owners;
18
18
  this.counter = 0;
19
19
  }
20
- DefaultHeapLedger.prototype._addItem = function (frame, value, flag) {
20
+ DefaultHeapLedger.prototype._addItem = function (name, value, flag) {
21
21
  var addr = (this.counter++) | flag;
22
22
  this.objects[addr] = value;
23
- this.owners[addr] = frame.name;
23
+ if (name !== '')
24
+ this.owners[addr] = name;
24
25
  return addr;
25
26
  };
27
+ DefaultHeapLedger.prototype.string = function (value) {
28
+ return this._addItem('', value, frame_1.DATA_TYPE_HEAP_STRING);
29
+ };
30
+ DefaultHeapLedger.prototype.object = function (value) {
31
+ return this._addItem('', value, frame_1.DATA_TYPE_HEAP_OBJECT);
32
+ };
33
+ DefaultHeapLedger.prototype.fun = function (value) {
34
+ return this._addItem('', value, frame_1.DATA_TYPE_HEAP_FUN);
35
+ };
26
36
  DefaultHeapLedger.prototype.addString = function (frame, value) {
27
- return this._addItem(frame, value, frame_1.DATA_TYPE_HEAP_STRING);
37
+ return this._addItem(frame.name, value, frame_1.DATA_TYPE_HEAP_STRING);
28
38
  };
29
39
  DefaultHeapLedger.prototype.addObject = function (frame, obj) {
30
- return this._addItem(frame, obj, frame_1.DATA_TYPE_HEAP_OBJECT);
40
+ return this._addItem(frame.name, obj, frame_1.DATA_TYPE_HEAP_OBJECT);
31
41
  };
32
42
  DefaultHeapLedger.prototype.addFun = function (frame, obj) {
33
- return this._addItem(frame, obj, frame_1.DATA_TYPE_HEAP_FUN);
43
+ return this._addItem(frame.name, obj, frame_1.DATA_TYPE_HEAP_FUN);
34
44
  };
35
45
  DefaultHeapLedger.prototype.getString = function (ref) {
36
46
  var value = this.objects[ref];
@@ -64,10 +74,11 @@ var DefaultHeapLedger = /** @class */ (function () {
64
74
  };
65
75
  DefaultHeapLedger.prototype.move = function (ref, newOwner) {
66
76
  this.owners[ref] = newOwner;
77
+ return ref;
67
78
  };
68
79
  DefaultHeapLedger.prototype.frameExit = function (frame) {
69
80
  var _this = this;
70
- if (frame.parent.isJust() && isHeapAddress(frame.thread.rp))
81
+ if (frame.parent.isJust() && exports.isHeapAddress(frame.thread.rp))
71
82
  this.move(frame.thread.rp, frame.parent.get().name);
72
83
  this.getFrameRefs(frame).forEach(function (ref) {
73
84
  if (ref !== frame.thread.rp) {
@@ -86,7 +97,7 @@ var DefaultHeapLedger = /** @class */ (function () {
86
97
  return DefaultHeapLedger;
87
98
  }());
88
99
  exports.DefaultHeapLedger = DefaultHeapLedger;
89
- var isHeapAddress = function (ref) {
100
+ exports.isHeapAddress = function (ref) {
90
101
  var kind = ref & frame_1.DATA_MASK_TYPE;
91
102
  return (kind === frame_1.DATA_TYPE_HEAP_STRING) || (kind === frame_1.DATA_TYPE_HEAP_OBJECT);
92
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["ledger.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,30 @@ export interface Owners extends Record<FrameName> { }
57
57
  */
58
58
  export interface HeapLedger {
59
59
 
60
+ /**
61
+ * string adds a string to the heap without specifying an owner.
62
+ *
63
+ * This string will remain on the heap until it is removed or assigned an
64
+ * owner.
65
+ */
66
+ string(value: string): HeapAddress
67
+
68
+ /**
69
+ * object adds a object to the heap without specifying an owner.
70
+ *
71
+ * This object will remain on the heap until it is removed or assigned an
72
+ * owner.
73
+ */
74
+ object(value: Foreign): HeapAddress
75
+
76
+ /**
77
+ * fun adds a fun to the heap without specifying an owner.
78
+ *
79
+ * This fun will remain on the heap until it is removed or assigned an
80
+ * owner.
81
+ */
82
+ fun(value: FunInfo): HeapAddress
83
+
60
84
  /**
61
85
  * addString to the heap on behalf of a frame.
62
86
  */
@@ -102,6 +126,13 @@ export interface HeapLedger {
102
126
  */
103
127
  intern(frame: Frame, value: Type): HeapAddress
104
128
 
129
+ /**
130
+ * move a HeapAddress from one owner to another.
131
+ *
132
+ * This method assumes the address is valid.
133
+ */
134
+ move(ref: HeapAddress, newOwner: FrameName): HeapAddress
135
+
105
136
  /**
106
137
  * frameExit is called whenever a Frame has finished execution and ready
107
138
  * to return its value (if any) to its parent frame.
@@ -131,33 +162,52 @@ export class DefaultHeapLedger implements HeapLedger {
131
162
 
132
163
  counter = 0;
133
164
 
134
- _addItem(frame: Frame, value: Type, flag: number) {
165
+ _addItem(name: FrameName, value: Type, flag: number) {
135
166
 
136
167
  let addr = (this.counter++) | flag;
137
168
 
138
169
  this.objects[addr] = value;
139
170
 
140
- this.owners[addr] = frame.name;
171
+ if (name !== '')
172
+ this.owners[addr] = name;
141
173
 
142
174
  return addr;
143
175
 
144
176
  }
145
177
 
178
+ string(value: string): HeapAddress {
179
+
180
+ return this._addItem('', value, DATA_TYPE_HEAP_STRING);
181
+
182
+ }
183
+
184
+ object(value: HeapObject): HeapAddress {
185
+
186
+ return this._addItem('', value, DATA_TYPE_HEAP_OBJECT);
187
+
188
+ }
189
+
190
+ fun(value: FunInfo): HeapAddress {
191
+
192
+ return this._addItem('', value, DATA_TYPE_HEAP_FUN);
193
+
194
+ }
195
+
146
196
  addString(frame: Frame, value: string): HeapAddress {
147
197
 
148
- return this._addItem(frame, value, DATA_TYPE_HEAP_STRING);
198
+ return this._addItem(frame.name, value, DATA_TYPE_HEAP_STRING);
149
199
 
150
200
  }
151
201
 
152
202
  addObject(frame: Frame, obj: HeapObject): HeapAddress {
153
203
 
154
- return this._addItem(frame, obj, DATA_TYPE_HEAP_OBJECT);
204
+ return this._addItem(frame.name, obj, DATA_TYPE_HEAP_OBJECT);
155
205
 
156
206
  }
157
207
 
158
208
  addFun(frame: Frame, obj: FunInfo): HeapAddress {
159
209
 
160
- return this._addItem(frame, obj, DATA_TYPE_HEAP_FUN);
210
+ return this._addItem(frame.name, obj, DATA_TYPE_HEAP_FUN);
161
211
 
162
212
  }
163
213
 
@@ -208,10 +258,12 @@ export class DefaultHeapLedger implements HeapLedger {
208
258
 
209
259
  }
210
260
 
211
- move(ref: HeapAddress, newOwner: FrameName) {
261
+ move(ref: HeapAddress, newOwner: FrameName): HeapAddress {
212
262
 
213
263
  this.owners[ref] = newOwner;
214
264
 
265
+ return ref;
266
+
215
267
  }
216
268
 
217
269
  frameExit(frame: Frame) {
@@ -241,7 +293,7 @@ export class DefaultHeapLedger implements HeapLedger {
241
293
 
242
294
  }
243
295
 
244
- const isHeapAddress = (ref: number) => {
296
+ export const isHeapAddress = (ref: number) => {
245
297
 
246
298
  let kind = ref & DATA_MASK_TYPE;
247
299
 
@@ -3,10 +3,10 @@ import { Future } from '@quenk/noni/lib/control/monad/future';
3
3
  import { FunInfo } from '../script/info';
4
4
  import { Data, Frame } from '../runtime/stack/frame';
5
5
  import { Script } from '../script';
6
- import { Foreign, PTValue } from '../type';
6
+ import { PTValue } from '../type';
7
7
  import { Context } from '../runtime/context';
8
8
  import { Platform } from '../';
9
- import { ExecutionFrame } from './shared/runner';
9
+ import { Job } from './shared/runner';
10
10
  export declare const THREAD_STATE_IDLE = 0;
11
11
  export declare const THREAD_STATE_RUN = 1;
12
12
  export declare const THREAD_STATE_WAIT = 2;
@@ -90,11 +90,11 @@ export interface VMThread extends Thread {
90
90
  invokeVM(caller: Frame, func: FunInfo): void;
91
91
  /**
92
92
  * restore sets the thread's internal values using the provided
93
- * ExecutionFrame. The thread's state will be updated to THREAD_STATE_RUN.
93
+ * Job. The thread's state will be updated to THREAD_STATE_RUN.
94
94
  */
95
- restore(eframe: ExecutionFrame): void;
95
+ restore(eframe: Job): void;
96
96
  /**
97
- * processNextFrame instructs the thread to process the next stack frame
97
+ * nextFrame instructs the thread to process the next stack frame
98
98
  * in the thread's stack.
99
99
  *
100
100
  * This does not actually execute the frame but prepares the internal
@@ -103,11 +103,11 @@ export interface VMThread extends Thread {
103
103
  *
104
104
  * @param rp - The value to set the
105
105
  */
106
- processNextFrame(rp: Data): void;
106
+ nextFrame(rp: Data): void;
107
107
  /**
108
108
  * exec a function by name on this thread.
109
109
  *
110
110
  * The function must be declared in the thread's Script.
111
111
  */
112
- exec(name: string, args: Foreign[]): void;
112
+ exec(name: string, args: Data[]): void;
113
113
  }
@@ -5,10 +5,10 @@ import { Future } from '@quenk/noni/lib/control/monad/future';
5
5
  import { FunInfo } from '../script/info';
6
6
  import { Data, Frame } from '../runtime/stack/frame';
7
7
  import { Script } from '../script';
8
- import { Foreign, PTValue } from '../type';
8
+ import { PTValue } from '../type';
9
9
  import { Context } from '../runtime/context';
10
10
  import { Platform } from '../';
11
- import { ExecutionFrame } from './shared/runner';
11
+ import { Job } from './shared/runner';
12
12
 
13
13
  export const THREAD_STATE_IDLE = 0;
14
14
  export const THREAD_STATE_RUN = 1;
@@ -110,12 +110,12 @@ export interface VMThread extends Thread {
110
110
 
111
111
  /**
112
112
  * restore sets the thread's internal values using the provided
113
- * ExecutionFrame. The thread's state will be updated to THREAD_STATE_RUN.
113
+ * Job. The thread's state will be updated to THREAD_STATE_RUN.
114
114
  */
115
- restore(eframe: ExecutionFrame): void
115
+ restore(eframe: Job): void
116
116
 
117
117
  /**
118
- * processNextFrame instructs the thread to process the next stack frame
118
+ * nextFrame instructs the thread to process the next stack frame
119
119
  * in the thread's stack.
120
120
  *
121
121
  * This does not actually execute the frame but prepares the internal
@@ -124,12 +124,12 @@ export interface VMThread extends Thread {
124
124
  *
125
125
  * @param rp - The value to set the
126
126
  */
127
- processNextFrame(rp: Data): void
127
+ nextFrame(rp: Data): void
128
128
 
129
129
  /**
130
130
  * exec a function by name on this thread.
131
131
  *
132
132
  * The function must be declared in the thread's Script.
133
133
  */
134
- exec(name: string, args: Foreign[]): void
134
+ exec(name: string, args: Data[]): void
135
135
  }
@@ -4,16 +4,16 @@ import { Frame, Data, FrameName } from '../../runtime/stack/frame';
4
4
  import { Context } from '../../runtime/context';
5
5
  import { FunInfo, ForeignFunInfo } from '../../script/info';
6
6
  import { Script } from '../../script';
7
- import { Foreign, PTValue } from '../../type';
7
+ import { PTValue } from '../../type';
8
8
  import { Platform } from '../../';
9
9
  import { VMThread } from '../';
10
- import { ExecutionFrame, SharedThreadRunner } from './runner';
10
+ import { Job, SharedThreadRunner } from './runner';
11
11
  /**
12
12
  * SharedThread is used by actors that run in a shared runtime i.e. the single
13
13
  * threaded JS event loop.
14
14
  *
15
15
  * Actual code execution takes place in a SharedThreadRunner which queues up
16
- * ExecutionFrame on behalf every SharedThread in the system.
16
+ * Job on behalf every SharedThread in the system.
17
17
  */
18
18
  export declare class SharedThread implements VMThread {
19
19
  vm: Platform;
@@ -35,7 +35,7 @@ export declare class SharedThread implements VMThread {
35
35
  wait(task: Future<void>): void;
36
36
  raise(e: Err): void;
37
37
  die(): Future<void>;
38
- restore(eframe: ExecutionFrame): void;
39
- processNextFrame(rp: Data): void;
40
- exec(name: string, args?: Foreign[]): void;
38
+ restore({ fun, args }: Job): void;
39
+ nextFrame(rp: Data): void;
40
+ exec(name: string, args?: Data[]): void;
41
41
  }
@@ -41,6 +41,7 @@ var future_1 = require("@quenk/noni/lib/control/monad/future");
41
41
  var array_1 = require("@quenk/noni/lib/data/array");
42
42
  var maybe_1 = require("@quenk/noni/lib/data/maybe");
43
43
  var frame_1 = require("../../runtime/stack/frame");
44
+ var ledger_1 = require("../../runtime/heap/ledger");
44
45
  var type_1 = require("../../type");
45
46
  var __1 = require("../");
46
47
  var runner_1 = require("./runner");
@@ -49,7 +50,7 @@ var runner_1 = require("./runner");
49
50
  * threaded JS event loop.
50
51
  *
51
52
  * Actual code execution takes place in a SharedThreadRunner which queues up
52
- * ExecutionFrame on behalf every SharedThread in the system.
53
+ * Job on behalf every SharedThread in the system.
53
54
  */
54
55
  var SharedThread = /** @class */ (function () {
55
56
  function SharedThread(vm, script, runner, context) {
@@ -124,20 +125,27 @@ var SharedThread = /** @class */ (function () {
124
125
  });
125
126
  });
126
127
  };
127
- SharedThread.prototype.restore = function (eframe) {
128
- this.fstack = eframe.fstack;
129
- this.fsp = eframe.fsp;
130
- this.rp = eframe.rp;
128
+ SharedThread.prototype.restore = function (_a) {
129
+ var _this = this;
130
+ var fun = _a.fun, args = _a.args;
131
+ var frame = new frame_1.StackFrame(this.makeFrameName(fun.name), this.script, this, maybe_1.nothing(), fun.foreign ?
132
+ [op.LDN | this.script.info.indexOf(fun), op.CALL] :
133
+ fun.code.slice());
134
+ frame.data = args.map(function (arg) { return ledger_1.isHeapAddress(arg) ?
135
+ _this.vm.heap.move(arg, frame.name)
136
+ : arg; });
137
+ this.fstack = [frame];
138
+ this.fsp = 0;
139
+ this.rp = 0;
131
140
  this.state = __1.THREAD_STATE_RUN;
132
141
  };
133
- SharedThread.prototype.processNextFrame = function (rp) {
142
+ SharedThread.prototype.nextFrame = function (rp) {
134
143
  this.vm.heap.frameExit(this.fstack.pop());
135
144
  this.fsp--;
136
145
  this.rp = rp;
137
146
  this.state = __1.THREAD_STATE_IDLE;
138
147
  };
139
148
  SharedThread.prototype.exec = function (name, args) {
140
- var _this = this;
141
149
  if (args === void 0) { args = []; }
142
150
  var script = this.script;
143
151
  var fun = script.info.find(function (info) {
@@ -145,12 +153,7 @@ var SharedThread = /** @class */ (function () {
145
153
  });
146
154
  if (!fun)
147
155
  return this.raise(new errors.UnknownFunErr(name));
148
- var frame = new frame_1.StackFrame(this.makeFrameName(fun.name), script, this, maybe_1.nothing(), fun.foreign ?
149
- [op.LDN | this.script.info.indexOf(fun), op.CALL] :
150
- fun.code.slice());
151
- frame.data = args.map(function (arg) { return _this.vm.heap.intern(frame, arg); });
152
- this.runner.enqueue(new runner_1.ExecutionFrame(this, [frame]));
153
- this.runner.run();
156
+ this.runner.postJob(new runner_1.Job(this, fun, args));
154
157
  };
155
158
  return SharedThread;
156
159
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,11 @@ import { empty, tail } from '@quenk/noni/lib/data/array';
7
7
  import { just, nothing } from '@quenk/noni/lib/data/maybe';
8
8
 
9
9
  import { Frame, StackFrame, Data, FrameName } from '../../runtime/stack/frame';
10
+ import { isHeapAddress } from '../../runtime/heap/ledger';
10
11
  import { Context } from '../../runtime/context';
11
12
  import { FunInfo, ForeignFunInfo } from '../../script/info';
12
13
  import { Script } from '../../script';
13
- import { Foreign, PTValue, TYPE_FUN } from '../../type';
14
+ import { PTValue, TYPE_FUN } from '../../type';
14
15
  import { Platform } from '../../';
15
16
  import {
16
17
  VMThread,
@@ -20,14 +21,14 @@ import {
20
21
  THREAD_STATE_ERROR,
21
22
  THREAD_STATE_INVALID
22
23
  } from '../';
23
- import { ExecutionFrame, SharedThreadRunner } from './runner';
24
+ import { Job, SharedThreadRunner } from './runner';
24
25
 
25
26
  /**
26
27
  * SharedThread is used by actors that run in a shared runtime i.e. the single
27
28
  * threaded JS event loop.
28
29
  *
29
30
  * Actual code execution takes place in a SharedThreadRunner which queues up
30
- * ExecutionFrame on behalf every SharedThread in the system.
31
+ * Job on behalf every SharedThread in the system.
31
32
  */
32
33
  export class SharedThread implements VMThread {
33
34
 
@@ -138,16 +139,30 @@ export class SharedThread implements VMThread {
138
139
 
139
140
  }
140
141
 
141
- restore(eframe: ExecutionFrame) {
142
+ restore({ fun, args }: Job) {
142
143
 
143
- this.fstack = eframe.fstack;
144
- this.fsp = eframe.fsp;
145
- this.rp = eframe.rp;
144
+ let frame = new StackFrame(
145
+ this.makeFrameName(fun.name),
146
+ this.script,
147
+ this,
148
+ nothing(),
149
+ fun.foreign ?
150
+ [op.LDN | this.script.info.indexOf(fun), op.CALL] :
151
+ fun.code.slice(),
152
+ );
153
+
154
+ frame.data = args.map(arg => isHeapAddress(arg) ?
155
+ this.vm.heap.move(arg, frame.name)
156
+ : arg);
157
+
158
+ this.fstack = [frame];
159
+ this.fsp = 0;
160
+ this.rp = 0;
146
161
  this.state = THREAD_STATE_RUN;
147
162
 
148
163
  }
149
164
 
150
- processNextFrame(rp: Data) {
165
+ nextFrame(rp: Data) {
151
166
 
152
167
  this.vm.heap.frameExit(<Frame>this.fstack.pop());
153
168
  this.fsp--;
@@ -156,7 +171,7 @@ export class SharedThread implements VMThread {
156
171
 
157
172
  }
158
173
 
159
- exec(name: string, args: Foreign[] = []) {
174
+ exec(name: string, args: Data[] = []) {
160
175
 
161
176
  let { script } = this;
162
177
 
@@ -166,21 +181,7 @@ export class SharedThread implements VMThread {
166
181
  if (!fun)
167
182
  return this.raise(new errors.UnknownFunErr(name));
168
183
 
169
- let frame = new StackFrame(
170
- this.makeFrameName(fun.name),
171
- script,
172
- this,
173
- nothing(),
174
- fun.foreign ?
175
- [op.LDN | this.script.info.indexOf(fun), op.CALL] :
176
- fun.code.slice(),
177
- );
178
-
179
- frame.data = args.map(arg => this.vm.heap.intern(frame, arg));
180
-
181
- this.runner.enqueue(new ExecutionFrame(this, [frame]));
182
-
183
- this.runner.run();
184
+ this.runner.postJob(new Job(this, fun, args));
184
185
 
185
186
  }
186
187
 
@@ -1,20 +1,16 @@
1
1
  import { Platform } from '../../';
2
- import { StackFrame } from '../../runtime/stack/frame';
2
+ import { Data } from '../../runtime/stack/frame';
3
+ import { FunInfo } from '../../script/info';
3
4
  import { VMThread } from '../';
4
5
  /**
5
- * ExecutionFrame stores the state of the fstack for a VMThread.
6
- *
7
- * This is used to both trigger execution of an fstack as well as restore
8
- * execution in the shared environment. When a VMThread needs to perform an
9
- * async task for example, it's current state is saved an a new ExecutionFrame
10
- * is pushed to the runner to continue where it left off.
6
+ * Job is a request by a thread to execute VM code on its behalf to
7
+ * the SharedThreadRunner
11
8
  */
12
- export declare class ExecutionFrame {
9
+ export declare class Job {
13
10
  thread: VMThread;
14
- fstack: StackFrame[];
15
- fsp: number;
16
- rp: number;
17
- constructor(thread: VMThread, fstack?: StackFrame[], fsp?: number, rp?: number);
11
+ fun: FunInfo;
12
+ args: Data[];
13
+ constructor(thread: VMThread, fun: FunInfo, args?: Data[]);
18
14
  }
19
15
  /**
20
16
  * SharedThreadRunner allows multiple Threads to execute their code sequentially
@@ -34,17 +30,26 @@ export declare class ExecutionFrame {
34
30
  */
35
31
  export declare class SharedThreadRunner {
36
32
  vm: Platform;
37
- eframes: ExecutionFrame[];
38
- constructor(vm: Platform, eframes?: ExecutionFrame[]);
33
+ jobs: Job[];
34
+ constructor(vm: Platform, jobs?: Job[]);
39
35
  _running: boolean;
40
36
  /**
41
- * enqueue an ExecutionFrame for future execution.
37
+ * enqueue a Job for future execution.
42
38
  */
43
- enqueue(frame: ExecutionFrame): this;
39
+ enqueue(job: Job): this;
44
40
  /**
45
- * dequeue all ExecutionFrames for the provide thread effectively ending its
41
+ * dequeue all Jobs for the provide thread effectively ending its
46
42
  * execution.
47
43
  */
48
44
  dequeue(thread: VMThread): void;
45
+ /**
46
+ * postJob enqueues a Job for execution triggering the run() loop immediately
47
+ * if not already running.
48
+ */
49
+ postJob(job: Job): void;
50
+ /**
51
+ * run the Job processing loop until there are no more Jobs to process in
52
+ * the queue.
53
+ */
49
54
  run(): void;
50
55
  }
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SharedThreadRunner = exports.ExecutionFrame = void 0;
3
+ exports.SharedThreadRunner = exports.Job = void 0;
4
4
  var array_1 = require("@quenk/noni/lib/data/array");
5
5
  var op_1 = require("../../runtime/op");
6
6
  var runtime_1 = require("../../runtime");
7
7
  var __1 = require("../");
8
8
  /**
9
- * ExecutionFrame stores the state of the fstack for a VMThread.
10
- *
11
- * This is used to both trigger execution of an fstack as well as restore
12
- * execution in the shared environment. When a VMThread needs to perform an
13
- * async task for example, it's current state is saved an a new ExecutionFrame
14
- * is pushed to the runner to continue where it left off.
9
+ * Job is a request by a thread to execute VM code on its behalf to
10
+ * the SharedThreadRunner
15
11
  */
16
- var ExecutionFrame = /** @class */ (function () {
17
- function ExecutionFrame(thread, fstack, fsp, rp) {
18
- if (fstack === void 0) { fstack = []; }
19
- if (fsp === void 0) { fsp = 0; }
20
- if (rp === void 0) { rp = 0; }
12
+ var Job = /** @class */ (function () {
13
+ function Job(thread, fun, args) {
14
+ if (args === void 0) { args = []; }
21
15
  this.thread = thread;
22
- this.fstack = fstack;
23
- this.fsp = fsp;
24
- this.rp = rp;
16
+ this.fun = fun;
17
+ this.args = args;
25
18
  }
26
- return ExecutionFrame;
19
+ return Job;
27
20
  }());
28
- exports.ExecutionFrame = ExecutionFrame;
21
+ exports.Job = Job;
29
22
  /**
30
23
  * SharedThreadRunner allows multiple Threads to execute their code sequentially
31
24
  * in a single JS event loop.
@@ -43,36 +36,48 @@ exports.ExecutionFrame = ExecutionFrame;
43
36
  * of a shared event loop.
44
37
  */
45
38
  var SharedThreadRunner = /** @class */ (function () {
46
- function SharedThreadRunner(vm, eframes) {
47
- if (eframes === void 0) { eframes = []; }
39
+ function SharedThreadRunner(vm, jobs) {
40
+ if (jobs === void 0) { jobs = []; }
48
41
  this.vm = vm;
49
- this.eframes = eframes;
42
+ this.jobs = jobs;
50
43
  this._running = false;
51
44
  }
52
45
  /**
53
- * enqueue an ExecutionFrame for future execution.
46
+ * enqueue a Job for future execution.
54
47
  */
55
- SharedThreadRunner.prototype.enqueue = function (frame) {
56
- this.eframes.push(frame);
48
+ SharedThreadRunner.prototype.enqueue = function (job) {
49
+ this.jobs.push(job);
57
50
  return this;
58
51
  };
59
52
  /**
60
- * dequeue all ExecutionFrames for the provide thread effectively ending its
53
+ * dequeue all Jobs for the provide thread effectively ending its
61
54
  * execution.
62
55
  */
63
56
  SharedThreadRunner.prototype.dequeue = function (thread) {
64
- this.eframes = this.eframes.filter(function (frame) { return frame.thread !== thread; });
57
+ this.jobs = this.jobs.filter(function (job) { return job.thread !== thread; });
58
+ };
59
+ /**
60
+ * postJob enqueues a Job for execution triggering the run() loop immediately
61
+ * if not already running.
62
+ */
63
+ SharedThreadRunner.prototype.postJob = function (job) {
64
+ this.enqueue(job);
65
+ this.run();
65
66
  };
67
+ /**
68
+ * run the Job processing loop until there are no more Jobs to process in
69
+ * the queue.
70
+ */
66
71
  SharedThreadRunner.prototype.run = function () {
67
72
  if (this._running)
68
73
  return;
69
74
  this._running = true;
70
- var eframe;
71
- while (eframe = this.eframes.find(function (frame) {
72
- return frame.thread.state === __1.THREAD_STATE_IDLE;
75
+ var job;
76
+ while (job = this.jobs.find(function (job) {
77
+ return job.thread.state === __1.THREAD_STATE_IDLE;
73
78
  })) {
74
- var thread = eframe.thread;
75
- thread.restore(eframe);
79
+ var thread = job.thread;
80
+ thread.restore(job);
76
81
  while (!array_1.empty(thread.fstack)) {
77
82
  var sp = thread.fsp;
78
83
  var frame = thread.fstack[sp];
@@ -100,12 +105,12 @@ var SharedThreadRunner = /** @class */ (function () {
100
105
  // and handle other threads.
101
106
  break;
102
107
  if (sp === thread.fsp)
103
- thread.processNextFrame(frame.data.pop() || 0);
108
+ thread.nextFrame(frame.data.pop() || 0);
104
109
  }
105
110
  if (array_1.empty(thread.fstack))
106
111
  // The thread's frame stack is empty, meaning all execution is
107
- // complete. Remove the eframe from the queue.
108
- this.eframes = array_1.remove(this.eframes, eframe);
112
+ // complete. Remove the job from the queue.
113
+ this.jobs = array_1.remove(this.jobs, job);
109
114
  }
110
115
  this._running = false;
111
116
  };
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["runner.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { empty, remove } from '@quenk/noni/lib/data/array';
2
2
 
3
3
  import { Platform } from '../../';
4
- import { Frame, StackFrame, Data } from '../../runtime/stack/frame';
4
+ import { Frame, Data } from '../../runtime/stack/frame';
5
5
  import { handlers } from '../../runtime/op';
6
6
  import { OPCODE_MASK, OPERAND_MASK } from '../../runtime';
7
+ import { FunInfo } from '../../script/info';
7
8
  import {
8
9
  THREAD_STATE_IDLE,
9
10
  THREAD_STATE_RUN,
@@ -12,20 +13,15 @@ import {
12
13
  } from '../';
13
14
 
14
15
  /**
15
- * ExecutionFrame stores the state of the fstack for a VMThread.
16
- *
17
- * This is used to both trigger execution of an fstack as well as restore
18
- * execution in the shared environment. When a VMThread needs to perform an
19
- * async task for example, it's current state is saved an a new ExecutionFrame
20
- * is pushed to the runner to continue where it left off.
16
+ * Job is a request by a thread to execute VM code on its behalf to
17
+ * the SharedThreadRunner
21
18
  */
22
- export class ExecutionFrame {
19
+ export class Job {
23
20
 
24
21
  constructor(
25
22
  public thread: VMThread,
26
- public fstack: StackFrame[] = [],
27
- public fsp = 0,
28
- public rp = 0) { }
23
+ public fun: FunInfo,
24
+ public args: Data[] = []) { }
29
25
 
30
26
  }
31
27
 
@@ -49,44 +45,60 @@ export class SharedThreadRunner {
49
45
 
50
46
  constructor(
51
47
  public vm: Platform,
52
- public eframes: ExecutionFrame[] = []) { }
48
+ public jobs: Job[] = []) { }
53
49
 
54
50
  _running = false;
55
51
 
56
52
  /**
57
- * enqueue an ExecutionFrame for future execution.
53
+ * enqueue a Job for future execution.
58
54
  */
59
- enqueue(frame: ExecutionFrame) {
55
+ enqueue(job: Job) {
60
56
 
61
- this.eframes.push(frame);
57
+ this.jobs.push(job);
62
58
 
63
59
  return this;
64
60
 
65
61
  }
66
62
 
67
63
  /**
68
- * dequeue all ExecutionFrames for the provide thread effectively ending its
64
+ * dequeue all Jobs for the provide thread effectively ending its
69
65
  * execution.
70
66
  */
71
67
  dequeue(thread: VMThread) {
72
68
 
73
- this.eframes = this.eframes.filter(frame => frame.thread !== thread);
69
+ this.jobs = this.jobs.filter(job => job.thread !== thread);
70
+
71
+ }
72
+
73
+ /**
74
+ * postJob enqueues a Job for execution triggering the run() loop immediately
75
+ * if not already running.
76
+ */
77
+ postJob(job: Job) {
78
+
79
+ this.enqueue(job);
80
+
81
+ this.run();
74
82
 
75
83
  }
76
84
 
85
+ /**
86
+ * run the Job processing loop until there are no more Jobs to process in
87
+ * the queue.
88
+ */
77
89
  run() {
78
90
 
79
91
  if (this._running) return;
80
92
 
81
93
  this._running = true;
82
94
 
83
- let eframe;
84
- while (eframe = this.eframes.find(frame =>
85
- frame.thread.state === THREAD_STATE_IDLE)) {
95
+ let job;
96
+ while (job = this.jobs.find(job =>
97
+ job.thread.state === THREAD_STATE_IDLE)) {
86
98
 
87
- let thread = eframe.thread;
99
+ let thread = job.thread;
88
100
 
89
- thread.restore(eframe);
101
+ thread.restore(job);
90
102
 
91
103
  while (!empty(thread.fstack)) {
92
104
 
@@ -125,14 +137,14 @@ export class SharedThreadRunner {
125
137
  break;
126
138
 
127
139
  if (sp === thread.fsp)
128
- thread.processNextFrame(<Data>frame.data.pop() || 0);
140
+ thread.nextFrame(<Data>frame.data.pop() || 0);
129
141
 
130
142
  }
131
143
 
132
144
  if (empty(thread.fstack))
133
145
  // The thread's frame stack is empty, meaning all execution is
134
- // complete. Remove the eframe from the queue.
135
- this.eframes = remove(this.eframes, eframe);
146
+ // complete. Remove the job from the queue.
147
+ this.jobs = remove(this.jobs, job);
136
148
 
137
149
  }
138
150
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenk/potoo",
3
- "version": "3.1.0-0",
3
+ "version": "3.1.1-0",
4
4
  "description": "Message passing virtual machine.",
5
5
  "main": "lib/index.js",
6
6
  "types": "./lib/index.d.ts",