From 9e8d27816100d02a420102b449e67a54134fdb4a Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 21 Nov 2023 19:24:15 +0100 Subject: [PATCH] Use ReferenceError from right realm/context (#107) The "this is not initialized" ReferenceError for a class C defined in context B but instantiated in context A should be an instance of the ReferenceError from A, not B. --- quickjs.c | 9 ++++++--- test262_errors.txt | 2 -- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/quickjs.c b/quickjs.c index 5529b0e..948e75f 100644 --- a/quickjs.c +++ b/quickjs.c @@ -15112,7 +15112,8 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, idx = get_u16(pc); pc += 2; if (unlikely(JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceErrorUninitialized2(ctx, b, idx, FALSE); + JS_ThrowReferenceErrorUninitialized2(caller_ctx, b, idx, + FALSE); goto exception; } sp[0] = JS_DupValue(ctx, var_buf[idx]); @@ -15125,7 +15126,8 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, idx = get_u16(pc); pc += 2; if (unlikely(JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceErrorUninitialized2(ctx, b, idx, FALSE); + JS_ThrowReferenceErrorUninitialized2(caller_ctx, b, idx, + FALSE); goto exception; } set_value(ctx, &var_buf[idx], sp[-1]); @@ -15138,7 +15140,8 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, idx = get_u16(pc); pc += 2; if (unlikely(!JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceError(ctx, "'this' can be initialized only once"); + JS_ThrowReferenceError(caller_ctx, + "'this' can be initialized only once"); goto exception; } set_value(ctx, &var_buf[idx], sp[-1]); diff --git a/test262_errors.txt b/test262_errors.txt index bb0a206..d4c7450 100644 --- a/test262_errors.txt +++ b/test262_errors.txt @@ -5,8 +5,6 @@ test262/test/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-brok test262/test/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js:34: strict mode: TypeError: $DONE() not called test262/test/built-ins/AsyncGeneratorPrototype/return/return-suspendedYield-broken-promise-try-catch.js:39: TypeError: $DONE() not called test262/test/built-ins/AsyncGeneratorPrototype/return/return-suspendedYield-broken-promise-try-catch.js:39: strict mode: TypeError: $DONE() not called -test262/test/built-ins/Function/internals/Construct/derived-this-uninitialized-realm.js:20: Test262Error: Expected a ReferenceError but got a different error constructor with the same name -test262/test/built-ins/Function/internals/Construct/derived-this-uninitialized-realm.js:20: strict mode: Test262Error: Expected a ReferenceError but got a different error constructor with the same name test262/test/built-ins/RegExp/lookahead-quantifier-match-groups.js:27: Test262Error: Expected [a, abc] and [a, undefined] to have the same contents. ? quantifier test262/test/built-ins/RegExp/lookahead-quantifier-match-groups.js:27: strict mode: Test262Error: Expected [a, abc] and [a, undefined] to have the same contents. ? quantifier test262/test/built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-no-throw.js:30: TypeError: out-of-bound numeric index (Testing with Float64Array.)