Skip to content

Commit 48c7a52

Browse files
rekmarksclaude
andcommitted
refactor(ocap-kernel): add KernelOneResolution type for kernel-space promise resolutions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 38ad049 commit 48c7a52

5 files changed

Lines changed: 19 additions & 15 deletions

File tree

packages/ocap-kernel/src/KernelQueue.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
import type { VatOneResolution } from '@agoric/swingset-liveslots';
21
import type { CapData } from '@endo/marshal';
32
import { makePromiseKit } from '@endo/promise-kit';
43

54
import { processGCActionSet } from './garbage-collection/garbage-collection.ts';
65
import { kser } from './liveslots/kernel-marshal.ts';
76
import type { KernelStore } from './store/index.ts';
8-
import { insistKRef } from './types.ts';
97
import type {
108
CrankResult,
119
EndpointId,
1210
KRef,
1311
KernelMessage,
12+
KernelOneResolution,
1413
RunQueueItem,
1514
RunQueueItemNotify,
1615
RunQueueItemSend,
@@ -323,14 +322,11 @@ export class KernelQueue {
323322
*/
324323
resolvePromises(
325324
endpointId: EndpointId | 'kernel' | undefined,
326-
resolutions: VatOneResolution[],
325+
resolutions: KernelOneResolution[],
327326
immediate = true,
328327
): void {
329328
for (const resolution of resolutions) {
330-
const [kpidRaw, rejected, dataRaw] = resolution;
331-
insistKRef(kpidRaw);
332-
const kpid = kpidRaw;
333-
const data = dataRaw as CapData<KRef>;
329+
const [kpid, rejected, data] = resolution;
334330

335331
this.#kernelStore.incrementRefCount(kpid, 'resolve|kpid');
336332
for (const slot of data.slots || []) {

packages/ocap-kernel/src/KernelServiceManager.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,6 @@ export class KernelServiceManager {
153153
const { methargs, result } = message;
154154
const [method, args] = kunser(methargs) as [string, unknown[]];
155155
assert.typeof(method, 'string');
156-
if (result) {
157-
assert.typeof(result, 'string');
158-
}
159156
assert(Array.isArray(args));
160157

161158
// Use E() so this works for both local objects and remote presences

packages/ocap-kernel/src/remotes/kernel/RemoteHandle.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import type {
1616
KRef,
1717
EndpointHandle,
1818
EndpointMessage,
19+
KernelOneResolution,
1920
CrankResult,
2021
} from '../../types.ts';
2122
import { insistKRef, insistERef } from '../../types.ts';
@@ -752,7 +753,7 @@ export class RemoteHandle implements EndpointHandle {
752753
}
753754
case 'notify': {
754755
const [, resolutions] = params;
755-
const kResolutions: VatOneResolution[] = resolutions.map(
756+
const kResolutions: KernelOneResolution[] = resolutions.map(
756757
(resolution) => {
757758
const [rpid, rejected, data] = resolution;
758759
insistERef(rpid);

packages/ocap-kernel/src/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ export const VatOneResolutionStruct = tuple([
159159
CapDataStruct,
160160
]);
161161

162+
/**
163+
* A single kernel-space promise resolution: [promiseKRef, rejected, data].
164+
* Kernel-space counterpart of Agoric's `VatOneResolution`.
165+
*/
166+
export type KernelOneResolution = [KRef, boolean, CapData<KRef>];
167+
162168
// Kernel-space message: refs are KRefs
163169
export const KernelCapDataStruct = object({
164170
body: string(),

packages/ocap-kernel/src/vats/VatSyscall.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type {
22
SwingSetCapData,
3-
VatOneResolution,
43
VatSyscallObject,
54
VatSyscallResult,
65
} from '@agoric/swingset-liveslots';
@@ -14,7 +13,12 @@ import {
1413
import type { KernelQueue } from '../KernelQueue.ts';
1514
import { makeError } from '../liveslots/kernel-marshal.ts';
1615
import type { KernelStore } from '../store/index.ts';
17-
import type { KernelMessage, VatId, KRef } from '../types.ts';
16+
import type {
17+
KernelMessage,
18+
KernelOneResolution,
19+
VatId,
20+
KRef,
21+
} from '../types.ts';
1822

1923
type VatSyscallProps = {
2024
vatId: VatId;
@@ -91,7 +95,7 @@ export class VatSyscall {
9195
*
9296
* @param resolutions - One or more promise resolutions.
9397
*/
94-
#handleSyscallResolve(resolutions: VatOneResolution[]): void {
98+
#handleSyscallResolve(resolutions: KernelOneResolution[]): void {
9599
const immediate = !this.#kernelStore.isInCrank();
96100
this.#kernelQueue.resolvePromises(this.vatId, resolutions, immediate);
97101
}
@@ -193,7 +197,7 @@ export class VatSyscall {
193197
this.#logger?.log(
194198
`@@@@ ${vatId} syscall resolve ${JSON.stringify(resolutions)}`,
195199
);
196-
this.#handleSyscallResolve(resolutions as VatOneResolution[]);
200+
this.#handleSyscallResolve(resolutions as KernelOneResolution[]);
197201
break;
198202
}
199203
case 'exit': {

0 commit comments

Comments
 (0)