@@ -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,7 +171,14 @@ const makeEGetProxyHandler = (x, HandledPromise) =>
171
171
* @param {HandledPromiseConstructor } HandledPromise
172
172
*/
173
173
const makeE = HandledPromise => {
174
- return harden (
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.
181
+ return freeze (
175
182
assign (
176
183
/**
177
184
* E(x) returns a proxy on which you can call arbitrary methods. Each of these
@@ -183,7 +190,7 @@ const makeE = HandledPromise => {
183
190
* @returns {ECallableOrMethods<RemoteFunctions<T>> } method/function call proxy
184
191
*/
185
192
// @ts -expect-error XXX typedef
186
- x => harden ( new Proxy ( ( ) => { } , makeEProxyHandler ( x , HandledPromise ) ) ) ,
193
+ x => freeze ( new Proxy ( ( ) => { } , makeEProxyHandler ( x , HandledPromise ) ) ) ,
187
194
{
188
195
/**
189
196
* E.get(x) returns a proxy on which you can get arbitrary properties.
@@ -198,7 +205,7 @@ const makeE = HandledPromise => {
198
205
*/
199
206
get : x =>
200
207
// @ts -expect-error XXX typedef
201
- harden (
208
+ freeze (
202
209
new Proxy ( create ( null ) , makeEGetProxyHandler ( x , HandledPromise ) ) ,
203
210
) ,
204
211
@@ -224,7 +231,7 @@ const makeE = HandledPromise => {
224
231
*/
225
232
sendOnly : x =>
226
233
// @ts -expect-error XXX typedef
227
- harden (
234
+ freeze (
228
235
new Proxy ( ( ) => { } , makeESendOnlyProxyHandler ( x , HandledPromise ) ) ,
229
236
) ,
230
237
0 commit comments