diff --git a/src/shared/atomic-bool.ts b/src/shared/atomic-bool.ts index c2c586c..3cf5a90 100644 --- a/src/shared/atomic-bool.ts +++ b/src/shared/atomic-bool.ts @@ -39,7 +39,7 @@ export class AtomicBool { return Atomics.compareExchange(this.view, 0, expected ? 1 : 0, replacement ? 1 : 0) !== 0; } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicBool', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-int16.ts b/src/shared/atomic-int16.ts index f9daa6a..0a1a3af 100644 --- a/src/shared/atomic-int16.ts +++ b/src/shared/atomic-int16.ts @@ -47,7 +47,7 @@ export class AtomicInt16 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicInt16', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-int32.ts b/src/shared/atomic-int32.ts index b7ca131..adc4d03 100644 --- a/src/shared/atomic-int32.ts +++ b/src/shared/atomic-int32.ts @@ -47,7 +47,7 @@ export class AtomicInt32 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicInt32', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-int64.ts b/src/shared/atomic-int64.ts index 1a7f5c6..b325034 100644 --- a/src/shared/atomic-int64.ts +++ b/src/shared/atomic-int64.ts @@ -47,7 +47,7 @@ export class AtomicInt64 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicInt64', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-int8.ts b/src/shared/atomic-int8.ts index 8be016b..9cea8f8 100644 --- a/src/shared/atomic-int8.ts +++ b/src/shared/atomic-int8.ts @@ -47,7 +47,7 @@ export class AtomicInt8 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicInt8', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-uint16.ts b/src/shared/atomic-uint16.ts index 3986261..33951f9 100644 --- a/src/shared/atomic-uint16.ts +++ b/src/shared/atomic-uint16.ts @@ -47,7 +47,7 @@ export class AtomicUint16 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicUint16', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-uint32.ts b/src/shared/atomic-uint32.ts index 81141e7..9382fbc 100644 --- a/src/shared/atomic-uint32.ts +++ b/src/shared/atomic-uint32.ts @@ -47,7 +47,7 @@ export class AtomicUint32 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicUint32', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-uint64.ts b/src/shared/atomic-uint64.ts index 9871850..60ce3ab 100644 --- a/src/shared/atomic-uint64.ts +++ b/src/shared/atomic-uint64.ts @@ -47,7 +47,7 @@ export class AtomicUint64 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicUint64', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/atomic-uint8.ts b/src/shared/atomic-uint8.ts index a7adf32..c8711e3 100644 --- a/src/shared/atomic-uint8.ts +++ b/src/shared/atomic-uint8.ts @@ -47,7 +47,7 @@ export class AtomicUint8 { return Atomics.compareExchange(this.view, 0, expected, replacement); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'AtomicUint8', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/mutex.ts b/src/shared/mutex.ts index a74770c..0c0cd14 100644 --- a/src/shared/mutex.ts +++ b/src/shared/mutex.ts @@ -45,7 +45,7 @@ export class Mutex { Atomics.notify(this.view, 0, 1); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'Mutex', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } diff --git a/src/shared/reconstruct.ts b/src/shared/reconstruct.ts index 371f935..d1bc37c 100644 --- a/src/shared/reconstruct.ts +++ b/src/shared/reconstruct.ts @@ -1,4 +1,4 @@ -const SYNC = Symbol.for('moroutine.sync'); +const SHARED = Symbol.for('moroutine.shared'); const registry = new Map unknown>(); @@ -7,17 +7,17 @@ export function registerSync(tag: string, ctor: new (buffer: SharedArrayBuffer, } export function serializeArg(arg: unknown): unknown { - if (typeof arg === 'object' && arg !== null && SYNC in arg) { - const sync = (arg as { [key: symbol]: () => { tag: string; buffer: SharedArrayBuffer; byteOffset: number } })[SYNC](); - return { __sync__: sync.tag, buffer: sync.buffer, byteOffset: sync.byteOffset }; + if (typeof arg === 'object' && arg !== null && SHARED in arg) { + const shared = (arg as { [key: symbol]: () => { tag: string; buffer: SharedArrayBuffer; byteOffset: number } })[SHARED](); + return { __shared__: shared.tag, buffer: shared.buffer, byteOffset: shared.byteOffset }; } return arg; } export function deserializeArg(arg: unknown): unknown { - if (typeof arg === 'object' && arg !== null && '__sync__' in arg) { - const data = arg as { __sync__: string; buffer: SharedArrayBuffer; byteOffset: number }; - const ctor = registry.get(data.__sync__); + if (typeof arg === 'object' && arg !== null && '__shared__' in arg) { + const data = arg as { __shared__: string; buffer: SharedArrayBuffer; byteOffset: number }; + const ctor = registry.get(data.__shared__); if (ctor) return new ctor(data.buffer, data.byteOffset); } return arg; diff --git a/src/shared/rwlock.ts b/src/shared/rwlock.ts index 1f103c3..848fead 100644 --- a/src/shared/rwlock.ts +++ b/src/shared/rwlock.ts @@ -87,7 +87,7 @@ export class RwLock { Atomics.notify(this.view, 0, +Infinity); } - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'RwLock', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } }