@@ -2,7 +2,7 @@ import { trackTurns } from './track-turns.js';
2
2
import { makeMessageBreakpointTester } from './message-breakpoints.js' ;
3
3
4
4
const { details : X , quote : q , Fail, error : makeError } = assert ;
5
- const { assign, create } = Object ;
5
+ const { assign, create, freeze } = Object ;
6
6
7
7
/**
8
8
* @import { HandledPromiseConstructor } from './types.js';
@@ -171,6 +171,13 @@ const makeEGetProxyHandler = (x, HandledPromise) =>
171
171
* @param {HandledPromiseConstructor } HandledPromise
172
172
*/
173
173
const 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.
174
181
return harden (
175
182
assign (
176
183
/**
@@ -182,8 +189,12 @@ const makeE = HandledPromise => {
182
189
* @param {T } x target for method/function call
183
190
* @returns {ECallableOrMethods<RemoteFunctions<T>> } method/function call proxy
184
191
*/
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
+ ) ,
187
198
{
188
199
/**
189
200
* E.get(x) returns a proxy on which you can get arbitrary properties.
@@ -198,8 +209,9 @@ const makeE = HandledPromise => {
198
209
*/
199
210
get : x =>
200
211
// @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 ) ,
203
215
) ,
204
216
205
217
/**
@@ -224,8 +236,9 @@ const makeE = HandledPromise => {
224
236
*/
225
237
sendOnly : x =>
226
238
// @ts -expect-error XXX typedef
227
- harden (
228
- new Proxy ( ( ) => { } , makeESendOnlyProxyHandler ( x , HandledPromise ) ) ,
239
+ new Proxy (
240
+ freeze ( ( ) => { } ) ,
241
+ makeESendOnlyProxyHandler ( x , HandledPromise ) ,
229
242
) ,
230
243
231
244
/**
0 commit comments