@@ -2,7 +2,7 @@ import { trackTurns } from './track-turns.js';
22import { makeMessageBreakpointTester } from './message-breakpoints.js' ;
33
44const { details : X , quote : q , Fail, error : makeError } = assert ;
5- const { assign, create } = Object ;
5+ const { assign, create, freeze } = Object ;
66
77/**
88 * @import { HandledPromiseConstructor } from './types.js';
@@ -171,6 +171,13 @@ const makeEGetProxyHandler = (x, HandledPromise) =>
171171 * @param {HandledPromiseConstructor } HandledPromise
172172 */
173173const makeE = HandledPromise => {
174+ // Note the use of `freeze` rather than `harden` below. This is because
175+ // `harden` now implies no-trapping, and we depend on proxies with these
176+ // almost-empty targets to remain trapping for traps `get`, `apply`, and `set`
177+ // which can still be interesting even when the target is frozen.
178+ // `get` and `has`, if not naming an own property, are still general traps,
179+ // which we rely on. `apply`, surprisingly perhaps, is free to ignore the
180+ // target's call behavior and just do its own thing instead.
174181 return harden (
175182 assign (
176183 /**
@@ -182,8 +189,12 @@ const makeE = HandledPromise => {
182189 * @param {T } x target for method/function call
183190 * @returns {ECallableOrMethods<RemoteFunctions<T>> } method/function call proxy
184191 */
185- // @ts -expect-error XXX typedef
186- x => harden ( new Proxy ( ( ) => { } , makeEProxyHandler ( x , HandledPromise ) ) ) ,
192+ x =>
193+ // @ts -expect-error XXX typedef
194+ new Proxy (
195+ freeze ( ( ) => { } ) ,
196+ makeEProxyHandler ( x , HandledPromise ) ,
197+ ) ,
187198 {
188199 /**
189200 * E.get(x) returns a proxy on which you can get arbitrary properties.
@@ -198,8 +209,9 @@ const makeE = HandledPromise => {
198209 */
199210 get : x =>
200211 // @ts -expect-error XXX typedef
201- harden (
202- new Proxy ( create ( null ) , makeEGetProxyHandler ( x , HandledPromise ) ) ,
212+ new Proxy (
213+ freeze ( create ( null ) ) ,
214+ makeEGetProxyHandler ( x , HandledPromise ) ,
203215 ) ,
204216
205217 /**
@@ -224,8 +236,9 @@ const makeE = HandledPromise => {
224236 */
225237 sendOnly : x =>
226238 // @ts -expect-error XXX typedef
227- harden (
228- new Proxy ( ( ) => { } , makeESendOnlyProxyHandler ( x , HandledPromise ) ) ,
239+ new Proxy (
240+ freeze ( ( ) => { } ) ,
241+ makeESendOnlyProxyHandler ( x , HandledPromise ) ,
229242 ) ,
230243
231244 /**
0 commit comments