@@ -70,9 +70,10 @@ function build(
70
70
/** Map vat slot strings -> in-vat object references. */
71
71
const slotToVal = new Map ( ) ;
72
72
73
- /** Map disavowed Presences to the Error which kills the vat if you try to
74
- * talk to them */
75
- const disavowedPresences = new WeakMap ( ) ;
73
+ /** Remember disavowed Presences which will kill the vat if you try to talk
74
+ * to them */
75
+ const disavowedPresences = new WeakSet ( ) ;
76
+ const disavowalError = harden ( Error ( `this Presence has been disavowed` ) ) ;
76
77
77
78
const importedPromisesByPromiseID = new Map ( ) ;
78
79
let nextExportID = 1 ;
@@ -89,11 +90,10 @@ function build(
89
90
applyMethod ( o , prop , args , returnedP ) {
90
91
// Support: o~.[prop](...args) remote method invocation
91
92
lsdebug ( `makeImportedPresence handler.applyMethod (${ slot } )` ) ;
92
- const err = disavowedPresences . get ( o ) ;
93
- if ( err ) {
93
+ if ( disavowedPresences . has ( o ) ) {
94
94
// eslint-disable-next-line no-use-before-define
95
- exitVatWithFailure ( err ) ;
96
- throw err ;
95
+ exitVatWithFailure ( disavowalError ) ;
96
+ throw disavowalError ;
97
97
}
98
98
// eslint-disable-next-line no-use-before-define
99
99
return queueMessage ( slot , prop , args , returnedP ) ;
@@ -273,11 +273,10 @@ function build(
273
273
if ( isPromise ( val ) ) {
274
274
slot = exportPromise ( val ) ;
275
275
} else {
276
- const err = disavowedPresences . get ( val ) ;
277
- if ( err ) {
276
+ if ( disavowedPresences . has ( val ) ) {
278
277
// eslint-disable-next-line no-use-before-define
279
- exitVatWithFailure ( err ) ;
280
- throw err ; // cannot reference a disavowed object
278
+ exitVatWithFailure ( disavowalError ) ;
279
+ throw disavowalError ; // cannot reference a disavowed object
281
280
}
282
281
assert . equal ( passStyleOf ( val ) , REMOTE_STYLE ) ;
283
282
slot = exportPassByPresence ( ) ;
@@ -641,8 +640,7 @@ function build(
641
640
assert . equal ( allocatedByVat , false , X `attempt to disavow an export` ) ;
642
641
valToSlot . delete ( presence ) ;
643
642
slotToVal . delete ( slot ) ;
644
- const err = harden ( Error ( `this Presence has been disavowed` ) ) ;
645
- disavowedPresences . set ( presence , err ) ;
643
+ disavowedPresences . add ( presence ) ;
646
644
647
645
syscall . dropImports ( [ slot ] ) ;
648
646
}
@@ -659,22 +657,18 @@ function build(
659
657
assert ( ! didRoot ) ;
660
658
didRoot = true ;
661
659
662
- const disavowPowers = { } ;
660
+ const vpow = {
661
+ D,
662
+ exitVat,
663
+ exitVatWithFailure,
664
+ ...vatPowers ,
665
+ } ;
663
666
if ( enableDisavow ) {
664
- disavowPowers . disavow = disavow ;
667
+ vpow . disavow = disavow ;
665
668
}
666
669
667
670
// here we finally invoke the vat code, and get back the root object
668
- const rootObject = buildRootObject (
669
- harden ( {
670
- D,
671
- exitVat,
672
- exitVatWithFailure,
673
- ...disavowPowers ,
674
- ...vatPowers ,
675
- } ) ,
676
- harden ( vatParameters ) ,
677
- ) ;
671
+ const rootObject = buildRootObject ( harden ( vpow ) , harden ( vatParameters ) ) ;
678
672
assert . equal ( passStyleOf ( rootObject ) , REMOTE_STYLE ) ;
679
673
680
674
const rootSlot = makeVatSlot ( 'object' , true , 0n ) ;
0 commit comments