fixed test262: derived-this-uninitialized-realm.js
This commit is contained in:
parent
bd0b7048de
commit
24aa7ba4f0
3 changed files with 28 additions and 6 deletions
|
@ -172,6 +172,7 @@ DEF(set_loc_uninitialized, 3, 0, 0, loc)
|
||||||
DEF( get_loc_check, 3, 0, 1, loc)
|
DEF( get_loc_check, 3, 0, 1, loc)
|
||||||
DEF( put_loc_check, 3, 1, 0, loc) /* must come after get_loc_check */
|
DEF( put_loc_check, 3, 1, 0, loc) /* must come after get_loc_check */
|
||||||
DEF( put_loc_check_init, 3, 1, 0, loc)
|
DEF( put_loc_check_init, 3, 1, 0, loc)
|
||||||
|
DEF(get_loc_checkthis, 3, 0, 1, loc)
|
||||||
DEF(get_var_ref_check, 3, 0, 1, var_ref)
|
DEF(get_var_ref_check, 3, 0, 1, var_ref)
|
||||||
DEF(put_var_ref_check, 3, 1, 0, var_ref) /* must come after get_var_ref_check */
|
DEF(put_var_ref_check, 3, 1, 0, var_ref) /* must come after get_var_ref_check */
|
||||||
DEF(put_var_ref_check_init, 3, 1, 0, var_ref)
|
DEF(put_var_ref_check_init, 3, 1, 0, var_ref)
|
||||||
|
@ -271,6 +272,8 @@ def( leave_scope, 3, 0, 0, u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
|
|
||||||
def( label, 5, 0, 0, label) /* emitted in phase 1, removed in phase 3 */
|
def( label, 5, 0, 0, label) /* emitted in phase 1, removed in phase 3 */
|
||||||
|
|
||||||
|
/* the following opcodes must be in the same order as the 'with_x' and
|
||||||
|
get_var_undef, get_var and put_var opcodes */
|
||||||
def(scope_get_var_undef, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
def(scope_get_var_undef, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
def( scope_get_var, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
def( scope_get_var, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
def( scope_put_var, 7, 1, 0, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
def( scope_put_var, 7, 1, 0, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
|
@ -278,6 +281,7 @@ def(scope_delete_var, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase
|
||||||
def( scope_make_ref, 11, 0, 2, atom_label_u16) /* emitted in phase 1, removed in phase 2 */
|
def( scope_make_ref, 11, 0, 2, atom_label_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
def( scope_get_ref, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
def( scope_get_ref, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
def(scope_put_var_init, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
def(scope_put_var_init, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */
|
||||||
|
def(scope_get_var_checkthis, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2, only used to return 'this' in derived class constructors */
|
||||||
def(scope_get_private_field, 7, 1, 1, atom_u16) /* obj -> value, emitted in phase 1, removed in phase 2 */
|
def(scope_get_private_field, 7, 1, 1, atom_u16) /* obj -> value, emitted in phase 1, removed in phase 2 */
|
||||||
def(scope_get_private_field2, 7, 1, 2, atom_u16) /* obj -> obj value, emitted in phase 1, removed in phase 2 */
|
def(scope_get_private_field2, 7, 1, 2, atom_u16) /* obj -> obj value, emitted in phase 1, removed in phase 2 */
|
||||||
def(scope_put_private_field, 7, 2, 0, atom_u16) /* obj value ->, emitted in phase 1, removed in phase 2 */
|
def(scope_put_private_field, 7, 2, 0, atom_u16) /* obj value ->, emitted in phase 1, removed in phase 2 */
|
||||||
|
|
28
quickjs.c
28
quickjs.c
|
@ -16976,6 +16976,19 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
|
||||||
sp++;
|
sp++;
|
||||||
}
|
}
|
||||||
BREAK;
|
BREAK;
|
||||||
|
CASE(OP_get_loc_checkthis):
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
idx = get_u16(pc);
|
||||||
|
pc += 2;
|
||||||
|
if (unlikely(JS_IsUninitialized(var_buf[idx]))) {
|
||||||
|
JS_ThrowReferenceErrorUninitialized2(caller_ctx, b, idx, FALSE);
|
||||||
|
goto exception;
|
||||||
|
}
|
||||||
|
sp[0] = JS_DupValue(ctx, var_buf[idx]);
|
||||||
|
sp++;
|
||||||
|
}
|
||||||
|
BREAK;
|
||||||
CASE(OP_put_loc_check):
|
CASE(OP_put_loc_check):
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
|
@ -25770,9 +25783,9 @@ static void emit_return(JSParseState *s, BOOL hasval)
|
||||||
label_return = -1;
|
label_return = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: if this is not initialized, should throw the
|
/* The error should be raised in the caller context, so we use
|
||||||
ReferenceError in the caller realm */
|
a specific opcode */
|
||||||
emit_op(s, OP_scope_get_var);
|
emit_op(s, OP_scope_get_var_checkthis);
|
||||||
emit_atom(s, JS_ATOM_this);
|
emit_atom(s, JS_ATOM_this);
|
||||||
emit_u16(s, 0);
|
emit_u16(s, 0);
|
||||||
|
|
||||||
|
@ -30109,6 +30122,7 @@ static int resolve_scope_var(JSContext *ctx, JSFunctionDef *s,
|
||||||
case OP_scope_get_ref:
|
case OP_scope_get_ref:
|
||||||
dbuf_putc(bc, OP_undefined);
|
dbuf_putc(bc, OP_undefined);
|
||||||
/* fall thru */
|
/* fall thru */
|
||||||
|
case OP_scope_get_var_checkthis:
|
||||||
case OP_scope_get_var_undef:
|
case OP_scope_get_var_undef:
|
||||||
case OP_scope_get_var:
|
case OP_scope_get_var:
|
||||||
case OP_scope_put_var:
|
case OP_scope_put_var:
|
||||||
|
@ -30134,7 +30148,12 @@ static int resolve_scope_var(JSContext *ctx, JSFunctionDef *s,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (s->vars[var_idx].is_lexical) {
|
if (s->vars[var_idx].is_lexical) {
|
||||||
dbuf_putc(bc, OP_get_loc_check);
|
if (op == OP_scope_get_var_checkthis) {
|
||||||
|
/* only used for 'this' return in derived class constructors */
|
||||||
|
dbuf_putc(bc, OP_get_loc_checkthis);
|
||||||
|
} else {
|
||||||
|
dbuf_putc(bc, OP_get_loc_check);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dbuf_putc(bc, OP_get_loc);
|
dbuf_putc(bc, OP_get_loc);
|
||||||
}
|
}
|
||||||
|
@ -31279,6 +31298,7 @@ static __exception int resolve_variables(JSContext *ctx, JSFunctionDef *s)
|
||||||
dbuf_putc(&bc_out, op);
|
dbuf_putc(&bc_out, op);
|
||||||
dbuf_put_u16(&bc_out, s->scopes[scope].first + 1);
|
dbuf_put_u16(&bc_out, s->scopes[scope].first + 1);
|
||||||
break;
|
break;
|
||||||
|
case OP_scope_get_var_checkthis:
|
||||||
case OP_scope_get_var_undef:
|
case OP_scope_get_var_undef:
|
||||||
case OP_scope_get_var:
|
case OP_scope_get_var:
|
||||||
case OP_scope_put_var:
|
case OP_scope_put_var:
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
test262/test/annexB/language/eval-code/direct/script-decl-lex-collision-in-sloppy-mode.js:13: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
|
test262/test/annexB/language/eval-code/direct/script-decl-lex-collision-in-sloppy-mode.js:13: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
|
||||||
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: 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/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/RegExp/unicode_full_case_folding.js:20: Test262Error: \u0390 does not match \u1fd3
|
test262/test/built-ins/RegExp/unicode_full_case_folding.js:20: Test262Error: \u0390 does not match \u1fd3
|
||||||
|
|
Loading…
Reference in a new issue