11import { globalVariable } from "./find-global.js" ;
22import { ref } from "./types.js" ;
33
4- const SLOT_BITS = 22 ;
4+ const SLOT_BITS = 24 ;
55const SLOT_MASK = ( 1 << SLOT_BITS ) - 1 ;
66const GEN_MASK = ( 1 << ( 32 - SLOT_BITS ) ) - 1 ;
77
@@ -17,6 +17,7 @@ export class JSObjectSpace {
1717 this . _stateBySlot = [ ] ;
1818 this . _freeSlotStack = [ ] ;
1919
20+ // Note: 0 is preserved for invalid references, 1 is preserved for globalThis
2021 this . _values [ 0 ] = undefined ;
2122 this . _values [ 1 ] = globalVariable ;
2223 this . _slotByValue . set ( globalVariable , 1 ) ;
@@ -95,17 +96,17 @@ export class JSObjectSpace {
9596 const slot = reference & SLOT_MASK ;
9697 if ( slot === 0 )
9798 throw new ReferenceError (
98- " Attempted to use invalid reference " + reference ,
99+ ` Attempted to use invalid reference ${ reference } ` ,
99100 ) ;
100101 const state = this . _stateBySlot [ slot ] ;
101102 if ( state === undefined || ( state & SLOT_MASK ) === 0 ) {
102103 throw new ReferenceError (
103- " Attempted to use invalid reference " + reference ,
104+ ` Attempted to use invalid reference ${ reference } ` ,
104105 ) ;
105106 }
106107 if ( state >>> SLOT_BITS !== reference >>> SLOT_BITS ) {
107108 throw new ReferenceError (
108- " Attempted to use stale reference " + reference ,
109+ ` Attempted to use stale reference ${ reference } ` ,
109110 ) ;
110111 }
111112 return state ;
0 commit comments