Improve error handling (#297)
* Improve error handling - throw RangeError for invalid string length - throw RangeError for stack overflow with updated message - fix case for `BigInt` error messages - refine stack check for `next_token` and `json_next_token` - throw SyntaxError for too many variables, arguments, parameters... - v8.js: disable v8 specific tests - v8.js: disable Realm object tests - v8.js: disable MODULE tests - v8.js: disable RegExp static properties tests - use more precise error messages - reorder property lookup in `js_obj_to_desc()` according to ECMA - set global object's [Symbol.toStringTag] to "global" - fix error message for duplicate parameter name in strict mode
This commit is contained in:
parent
f2a91e86c7
commit
aaa208ac8f
4 changed files with 88 additions and 381 deletions
137
quickjs.c
137
quickjs.c
|
@ -3589,7 +3589,7 @@ static no_inline int string_buffer_realloc(StringBuffer *s, int new_len, int c)
|
|||
return -1;
|
||||
|
||||
if (new_len > JS_STRING_LEN_MAX) {
|
||||
JS_ThrowInternalError(s->ctx, "string too long");
|
||||
JS_ThrowRangeError(s->ctx, "invalid string length");
|
||||
return string_buffer_set_error(s);
|
||||
}
|
||||
new_size = min_int(max_int(new_len, s->size * 3 / 2), JS_STRING_LEN_MAX);
|
||||
|
@ -3859,7 +3859,7 @@ JSValue JS_NewStringLen(JSContext *ctx, const char *buf, size_t buf_len)
|
|||
p++;
|
||||
len1 = p - p_start;
|
||||
if (len1 > JS_STRING_LEN_MAX)
|
||||
return JS_ThrowInternalError(ctx, "string too long");
|
||||
return JS_ThrowRangeError(ctx, "invalid string length");
|
||||
if (p == p_end) {
|
||||
/* ASCII string */
|
||||
return js_new_string8(ctx, (const uint8_t *)buf, buf_len);
|
||||
|
@ -4154,7 +4154,7 @@ static JSValue JS_ConcatString1(JSContext *ctx,
|
|||
|
||||
len = p1->len + p2->len;
|
||||
if (len > JS_STRING_LEN_MAX)
|
||||
return JS_ThrowInternalError(ctx, "string too long");
|
||||
return JS_ThrowRangeError(ctx, "invalid string length");
|
||||
is_wide_char = p1->is_wide_char | p2->is_wide_char;
|
||||
p = js_alloc_string(ctx, len, is_wide_char);
|
||||
if (!p)
|
||||
|
@ -6758,7 +6758,7 @@ JSValue JS_ThrowOutOfMemory(JSContext *ctx)
|
|||
|
||||
static JSValue JS_ThrowStackOverflow(JSContext *ctx)
|
||||
{
|
||||
return JS_ThrowInternalError(ctx, "stack overflow");
|
||||
return JS_ThrowRangeError(ctx, "Maximum call stack size exceeded");
|
||||
}
|
||||
|
||||
static JSValue JS_ThrowTypeErrorNotAnObject(JSContext *ctx)
|
||||
|
@ -6774,7 +6774,7 @@ static JSValue JS_ThrowTypeErrorNotASymbol(JSContext *ctx)
|
|||
static JSValue JS_ThrowReferenceErrorNotDefined(JSContext *ctx, JSAtom name)
|
||||
{
|
||||
char buf[ATOM_GET_STR_BUF_SIZE];
|
||||
return JS_ThrowReferenceError(ctx, "'%s' is not defined",
|
||||
return JS_ThrowReferenceError(ctx, "%s is not defined",
|
||||
JS_AtomGetStr(ctx, buf, sizeof(buf), name));
|
||||
}
|
||||
|
||||
|
@ -10332,7 +10332,7 @@ static JSValue JS_ToNumberHintFree(JSContext *ctx, JSValue val,
|
|||
case JS_TAG_BIG_INT:
|
||||
if (flag != TON_FLAG_NUMERIC) {
|
||||
JS_FreeValue(ctx, val);
|
||||
return JS_ThrowTypeError(ctx, "cannot convert bigint to number");
|
||||
return JS_ThrowTypeError(ctx, "cannot convert BigInt to number");
|
||||
}
|
||||
ret = val;
|
||||
break;
|
||||
|
@ -11870,7 +11870,7 @@ static JSValue JS_StringToBigIntErr(JSContext *ctx, JSValue val)
|
|||
{
|
||||
val = JS_StringToBigInt(ctx, val);
|
||||
if (JS_VALUE_IS_NAN(val))
|
||||
return JS_ThrowSyntaxError(ctx, "invalid bigint literal");
|
||||
return JS_ThrowSyntaxError(ctx, "invalid BigInt literal");
|
||||
return val;
|
||||
}
|
||||
|
||||
|
@ -11912,7 +11912,7 @@ static bf_t *JS_ToBigIntFree(JSContext *ctx, bf_t *buf, JSValue val)
|
|||
default:
|
||||
fail:
|
||||
JS_FreeValue(ctx, val);
|
||||
JS_ThrowTypeError(ctx, "cannot convert to bigint");
|
||||
JS_ThrowTypeError(ctx, "cannot convert to BigInt");
|
||||
return NULL;
|
||||
}
|
||||
return r;
|
||||
|
@ -12037,7 +12037,7 @@ static int js_unary_arith_bigint(JSContext *ctx,
|
|||
JSValue res;
|
||||
|
||||
if (op == OP_plus) {
|
||||
JS_ThrowTypeError(ctx, "bigint argument with unary +");
|
||||
JS_ThrowTypeError(ctx, "BigInt argument with unary +");
|
||||
JS_FreeValue(ctx, op1);
|
||||
return -1;
|
||||
}
|
||||
|
@ -12515,7 +12515,7 @@ static no_inline __exception int js_binary_logic_slow(JSContext *ctx,
|
|||
if (tag1 != tag2) {
|
||||
JS_FreeValue(ctx, op1);
|
||||
JS_FreeValue(ctx, op2);
|
||||
JS_ThrowTypeError(ctx, "both operands must be bigint");
|
||||
JS_ThrowTypeError(ctx, "both operands must be BigInt");
|
||||
goto exception;
|
||||
} else if (js_binary_arith_bigint(ctx, op, sp - 2, op1, op2)) {
|
||||
goto exception;
|
||||
|
@ -12873,7 +12873,7 @@ static no_inline int js_shr_slow(JSContext *ctx, JSValue *sp)
|
|||
|
||||
if ((JS_VALUE_GET_TAG(op1) == JS_TAG_BIG_INT ||
|
||||
JS_VALUE_GET_TAG(op2) == JS_TAG_BIG_INT)) {
|
||||
JS_ThrowTypeError(ctx, "bigint operands are forbidden for >>>");
|
||||
JS_ThrowTypeError(ctx, "BigInt operands are forbidden for >>>");
|
||||
JS_FreeValue(ctx, op1);
|
||||
JS_FreeValue(ctx, op2);
|
||||
goto exception;
|
||||
|
@ -18968,8 +18968,9 @@ static __exception int next_token(JSParseState *s)
|
|||
BOOL ident_has_escape;
|
||||
JSAtom atom;
|
||||
|
||||
if (js_check_stack_overflow(s->ctx->rt, 0)) {
|
||||
return js_parse_error(s, "stack overflow");
|
||||
if (js_check_stack_overflow(s->ctx->rt, 1000)) {
|
||||
JS_ThrowStackOverflow(s->ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free_token(s, &s->token);
|
||||
|
@ -19488,8 +19489,9 @@ static __exception int json_next_token(JSParseState *s)
|
|||
int c;
|
||||
JSAtom atom;
|
||||
|
||||
if (js_check_stack_overflow(s->ctx->rt, 0)) {
|
||||
return js_parse_error(s, "stack overflow");
|
||||
if (js_check_stack_overflow(s->ctx->rt, 1000)) {
|
||||
JS_ThrowStackOverflow(s->ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free_token(s, &s->token);
|
||||
|
@ -20068,7 +20070,9 @@ static int add_var(JSContext *ctx, JSFunctionDef *fd, JSAtom name)
|
|||
|
||||
/* the local variable indexes are currently stored on 16 bits */
|
||||
if (fd->var_count >= JS_MAX_LOCAL_VARS) {
|
||||
JS_ThrowInternalError(ctx, "too many local variables");
|
||||
// XXX: add_var() should take JSParseState *s and use js_parse_error
|
||||
JS_ThrowSyntaxError(ctx, "too many variables declared (only %d allowed)",
|
||||
JS_MAX_LOCAL_VARS - 1);
|
||||
return -1;
|
||||
}
|
||||
if (js_resize_array(ctx, (void **)&fd->vars, sizeof(fd->vars[0]),
|
||||
|
@ -20148,7 +20152,9 @@ static int add_arg(JSContext *ctx, JSFunctionDef *fd, JSAtom name)
|
|||
|
||||
/* the local variable indexes are currently stored on 16 bits */
|
||||
if (fd->arg_count >= JS_MAX_LOCAL_VARS) {
|
||||
JS_ThrowInternalError(ctx, "too many arguments");
|
||||
// XXX: add_arg() should take JSParseState *s and use js_parse_error
|
||||
JS_ThrowSyntaxError(ctx, "too many parameters in function definition (only %d allowed)",
|
||||
JS_MAX_LOCAL_VARS - 1);
|
||||
return -1;
|
||||
}
|
||||
if (js_resize_array(ctx, (void **)&fd->args, sizeof(fd->args[0]),
|
||||
|
@ -22171,7 +22177,7 @@ static int js_parse_check_duplicate_parameter(JSParseState *s, JSAtom name)
|
|||
return 0;
|
||||
|
||||
duplicate:
|
||||
return js_parse_error(s, "duplicate parameter names not allowed in this context");
|
||||
return js_parse_error(s, "Duplicate parameter name not allowed in this context");
|
||||
}
|
||||
|
||||
static JSAtom js_parse_destructuring_var(JSParseState *s, int tok, int is_arg)
|
||||
|
@ -23049,7 +23055,8 @@ static __exception int js_parse_postfix_expr(JSParseState *s, int parse_flags)
|
|||
arg_count = 0;
|
||||
while (s->token.val != ')') {
|
||||
if (arg_count >= 65535) {
|
||||
return js_parse_error(s, "Too many call arguments");
|
||||
return js_parse_error(s, "Too many arguments in function call (only %d allowed)",
|
||||
65535 - 1);
|
||||
}
|
||||
if (s->token.val == TOK_ELLIPSIS)
|
||||
break;
|
||||
|
@ -23421,10 +23428,8 @@ static __exception int js_parse_unary(JSParseState *s, int parse_flags)
|
|||
regarding the precedence of prefix operators and the
|
||||
postifx exponential, ES7 specifies that -2**2 is a
|
||||
syntax error. */
|
||||
if (parse_flags & PF_POW_FORBIDDEN) {
|
||||
JS_ThrowSyntaxError(s->ctx, "unparenthesized unary expression can't appear on the left-hand side of '**'");
|
||||
return -1;
|
||||
}
|
||||
if (parse_flags & PF_POW_FORBIDDEN)
|
||||
return js_parse_error(s, "unparenthesized unary expression can't appear on the left-hand side of '**'");
|
||||
if (next_token(s))
|
||||
return -1;
|
||||
if (js_parse_unary(s, PF_POW_ALLOWED))
|
||||
|
@ -27683,7 +27688,9 @@ static int add_closure_var(JSContext *ctx, JSFunctionDef *s,
|
|||
|
||||
/* the closure variable indexes are currently stored on 16 bits */
|
||||
if (s->closure_var_count >= JS_MAX_LOCAL_VARS) {
|
||||
JS_ThrowInternalError(ctx, "too many closure variables");
|
||||
// XXX: add_closure_var() should take JSParseState *s and use js_parse_error
|
||||
JS_ThrowSyntaxError(ctx, "too many closure variables used (only %d allowed)",
|
||||
JS_MAX_LOCAL_VARS - 1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -28468,6 +28475,7 @@ static int resolve_scope_private_field1(JSContext *ctx,
|
|||
}
|
||||
}
|
||||
/* XXX: no line number info */
|
||||
// XXX: resolve_scope_private_field1() should take JSParseState *s and use js_parse_error_atom
|
||||
JS_ThrowSyntaxErrorAtom(ctx, "undefined private field '%s'",
|
||||
var_name);
|
||||
return -1;
|
||||
|
@ -30886,6 +30894,7 @@ static int add_module_variables(JSContext *ctx, JSFunctionDef *fd)
|
|||
if (me->export_type == JS_EXPORT_TYPE_LOCAL) {
|
||||
idx = find_closure_var(ctx, fd, me->local_name);
|
||||
if (idx < 0) {
|
||||
// XXX: add_module_variables() should take JSParseState *s and use js_parse_error_atom
|
||||
JS_ThrowSyntaxErrorAtom(ctx, "exported variable '%s' does not exist",
|
||||
me->local_name);
|
||||
return -1;
|
||||
|
@ -31269,7 +31278,7 @@ static int js_parse_function_check_names(JSParseState *s, JSFunctionDef *fd,
|
|||
return 0;
|
||||
|
||||
duplicate:
|
||||
return js_parse_error(s, "duplicate argument names not allowed in this context");
|
||||
return js_parse_error(s, "Duplicate parameter name not allowed in this context");
|
||||
}
|
||||
|
||||
/* create a function to initialize class fields */
|
||||
|
@ -31553,6 +31562,8 @@ static __exception int js_parse_function_decl2(JSParseState *s,
|
|||
goto fail;
|
||||
}
|
||||
if (fd->has_parameter_expressions) {
|
||||
if (js_parse_check_duplicate_parameter(s, name))
|
||||
goto fail;
|
||||
if (define_var(s, fd, name, JS_VAR_DEF_LET) < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
@ -32330,7 +32341,7 @@ static const char * const bc_tag_str[] = {
|
|||
"string",
|
||||
"object",
|
||||
"array",
|
||||
"bigint",
|
||||
"BigInt",
|
||||
"template",
|
||||
"function",
|
||||
"module",
|
||||
|
@ -32591,7 +32602,7 @@ static int JS_WriteBigInt(BCWriterState *s, JSValue obj)
|
|||
e = a->expn;
|
||||
e = (e * 2) | a->sign;
|
||||
if (e < INT32_MIN || e > INT32_MAX) {
|
||||
JS_ThrowInternalError(s->ctx, "bigint exponent is too large");
|
||||
JS_ThrowRangeError(s->ctx, "maximum BigInt size exceeded");
|
||||
return -1;
|
||||
}
|
||||
bc_put_sleb128(s, e);
|
||||
|
@ -32611,7 +32622,7 @@ static int JS_WriteBigInt(BCWriterState *s, JSValue obj)
|
|||
i++;
|
||||
len = (a->len - i) * sizeof(limb_t) + n1;
|
||||
if (len > INT32_MAX) {
|
||||
JS_ThrowInternalError(s->ctx, "bigint is too large");
|
||||
JS_ThrowRangeError(s->ctx, "maximum BigInt size exceeded");
|
||||
return -1;
|
||||
}
|
||||
bc_put_leb128(s, len);
|
||||
|
@ -33469,7 +33480,7 @@ static JSValue JS_ReadBigInt(BCReaderState *s)
|
|||
goto fail;
|
||||
bc_read_trace(s, "len=%" PRId64 "\n", (int64_t)len);
|
||||
if (len == 0) {
|
||||
JS_ThrowInternalError(s->ctx, "invalid bigint length");
|
||||
JS_ThrowRangeError(s->ctx, "maximum BigInt size exceeded");
|
||||
goto fail;
|
||||
}
|
||||
l = (len + sizeof(limb_t) - 1) / sizeof(limb_t);
|
||||
|
@ -34620,7 +34631,7 @@ static JSValue JS_ToObject(JSContext *ctx, JSValue val)
|
|||
default:
|
||||
case JS_TAG_NULL:
|
||||
case JS_TAG_UNDEFINED:
|
||||
return JS_ThrowTypeError(ctx, "cannot convert to object");
|
||||
return JS_ThrowTypeError(ctx, "Cannot convert undefined or null to object");
|
||||
case JS_TAG_OBJECT:
|
||||
case JS_TAG_EXCEPTION:
|
||||
return js_dup(val);
|
||||
|
@ -34665,13 +34676,21 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
|
|||
int flags;
|
||||
|
||||
if (!JS_IsObject(desc)) {
|
||||
JS_ThrowTypeErrorNotAnObject(ctx);
|
||||
JS_ThrowTypeError(ctx, "Property description must be an object");
|
||||
return -1;
|
||||
}
|
||||
flags = 0;
|
||||
val = JS_UNDEFINED;
|
||||
getter = JS_UNDEFINED;
|
||||
setter = JS_UNDEFINED;
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_enumerable)) {
|
||||
JSValue prop = JS_GetProperty(ctx, desc, JS_ATOM_enumerable);
|
||||
if (JS_IsException(prop))
|
||||
goto fail;
|
||||
flags |= JS_PROP_HAS_ENUMERABLE;
|
||||
if (JS_ToBoolFree(ctx, prop))
|
||||
flags |= JS_PROP_ENUMERABLE;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_configurable)) {
|
||||
JSValue prop = JS_GetProperty(ctx, desc, JS_ATOM_configurable);
|
||||
if (JS_IsException(prop))
|
||||
|
@ -34680,6 +34699,12 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
|
|||
if (JS_ToBoolFree(ctx, prop))
|
||||
flags |= JS_PROP_CONFIGURABLE;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_value)) {
|
||||
flags |= JS_PROP_HAS_VALUE;
|
||||
val = JS_GetProperty(ctx, desc, JS_ATOM_value);
|
||||
if (JS_IsException(val))
|
||||
goto fail;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_writable)) {
|
||||
JSValue prop = JS_GetProperty(ctx, desc, JS_ATOM_writable);
|
||||
if (JS_IsException(prop))
|
||||
|
@ -34688,26 +34713,12 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
|
|||
if (JS_ToBoolFree(ctx, prop))
|
||||
flags |= JS_PROP_WRITABLE;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_enumerable)) {
|
||||
JSValue prop = JS_GetProperty(ctx, desc, JS_ATOM_enumerable);
|
||||
if (JS_IsException(prop))
|
||||
goto fail;
|
||||
flags |= JS_PROP_HAS_ENUMERABLE;
|
||||
if (JS_ToBoolFree(ctx, prop))
|
||||
flags |= JS_PROP_ENUMERABLE;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_value)) {
|
||||
flags |= JS_PROP_HAS_VALUE;
|
||||
val = JS_GetProperty(ctx, desc, JS_ATOM_value);
|
||||
if (JS_IsException(val))
|
||||
goto fail;
|
||||
}
|
||||
if (JS_HasProperty(ctx, desc, JS_ATOM_get)) {
|
||||
flags |= JS_PROP_HAS_GET;
|
||||
getter = JS_GetProperty(ctx, desc, JS_ATOM_get);
|
||||
if (JS_IsException(getter) ||
|
||||
!(JS_IsUndefined(getter) || JS_IsFunction(ctx, getter))) {
|
||||
JS_ThrowTypeError(ctx, "invalid getter");
|
||||
JS_ThrowTypeError(ctx, "Getter must be a function");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
@ -34716,7 +34727,7 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
|
|||
setter = JS_GetProperty(ctx, desc, JS_ATOM_set);
|
||||
if (JS_IsException(setter) ||
|
||||
!(JS_IsUndefined(setter) || JS_IsFunction(ctx, setter))) {
|
||||
JS_ThrowTypeError(ctx, "invalid setter");
|
||||
JS_ThrowTypeError(ctx, "Setter must be a function");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
@ -34764,7 +34775,7 @@ static __exception int JS_ObjectDefineProperties(JSContext *ctx,
|
|||
int ret = -1;
|
||||
|
||||
if (!JS_IsObject(obj)) {
|
||||
JS_ThrowTypeErrorNotAnObject(ctx);
|
||||
JS_ThrowTypeError(ctx, "Object.defineProperties called on non-object");
|
||||
return -1;
|
||||
}
|
||||
desc = JS_UNDEFINED;
|
||||
|
@ -34774,6 +34785,9 @@ static __exception int JS_ObjectDefineProperties(JSContext *ctx,
|
|||
p = JS_VALUE_GET_OBJ(props);
|
||||
if (JS_GetOwnPropertyNamesInternal(ctx, &atoms, &len, p, JS_GPN_ENUM_ONLY | JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK) < 0)
|
||||
goto exception;
|
||||
// XXX: ECMA specifies that all descriptions should be validated before
|
||||
// modifying the object. This would require allocating an array
|
||||
// JSPropertyDescriptor and use 2 separate loops.
|
||||
for(i = 0; i < len; i++) {
|
||||
JS_FreeValue(ctx, desc);
|
||||
desc = JS_GetProperty(ctx, props, atoms[i].atom);
|
||||
|
@ -34823,7 +34837,7 @@ static JSValue js_object_create(JSContext *ctx, JSValue this_val,
|
|||
|
||||
proto = argv[0];
|
||||
if (!JS_IsObject(proto) && !JS_IsNull(proto))
|
||||
return JS_ThrowTypeError(ctx, "not a prototype");
|
||||
return JS_ThrowTypeError(ctx, "object prototype may only be an Object or null");
|
||||
obj = JS_NewObjectProto(ctx, proto);
|
||||
if (JS_IsException(obj))
|
||||
return JS_EXCEPTION;
|
||||
|
@ -35966,7 +35980,9 @@ static JSValue *build_arg_list(JSContext *ctx, uint32_t *plen,
|
|||
if (js_get_length32(ctx, &len, array_arg))
|
||||
return NULL;
|
||||
if (len > JS_MAX_LOCAL_VARS) {
|
||||
JS_ThrowInternalError(ctx, "too many arguments");
|
||||
// XXX: check for stack overflow?
|
||||
JS_ThrowRangeError(ctx, "too many arguments in function call (only %d allowed)",
|
||||
JS_MAX_LOCAL_VARS);
|
||||
return NULL;
|
||||
}
|
||||
/* avoid allocating 0 bytes */
|
||||
|
@ -39420,7 +39436,7 @@ static JSValue js_string_includes(JSContext *ctx, JSValue this_val,
|
|||
ret = js_is_regexp(ctx, argv[0]);
|
||||
if (ret) {
|
||||
if (ret > 0)
|
||||
JS_ThrowTypeError(ctx, "regex not supported");
|
||||
JS_ThrowTypeError(ctx, "regexp not supported");
|
||||
goto fail;
|
||||
}
|
||||
v = JS_ToString(ctx, argv[0]);
|
||||
|
@ -39982,7 +39998,7 @@ static JSValue js_string_pad(JSContext *ctx, JSValue this_val,
|
|||
}
|
||||
}
|
||||
if (n > JS_STRING_LEN_MAX) {
|
||||
JS_ThrowInternalError(ctx, "string too long");
|
||||
JS_ThrowRangeError(ctx, "invalid string length");
|
||||
goto fail2;
|
||||
}
|
||||
if (string_buffer_init(ctx, b, n))
|
||||
|
@ -40045,7 +40061,7 @@ static JSValue js_string_repeat(JSContext *ctx, JSValue this_val,
|
|||
if (len == 0 || n == 1)
|
||||
return str;
|
||||
if (val * len > JS_STRING_LEN_MAX) {
|
||||
JS_ThrowInternalError(ctx, "string too long");
|
||||
JS_ThrowRangeError(ctx, "invalid string length");
|
||||
goto fail;
|
||||
}
|
||||
if (string_buffer_init2(ctx, b, n * len, p->is_wide_char))
|
||||
|
@ -42490,7 +42506,7 @@ static JSValue json_parse_value(JSParseState *s)
|
|||
default:
|
||||
def_token:
|
||||
if (s->token.val == TOK_EOF) {
|
||||
js_parse_error(s, "unexpected end of input");
|
||||
js_parse_error(s, "Unexpected end of JSON input");
|
||||
} else {
|
||||
js_parse_error(s, "unexpected token: '%.*s'",
|
||||
(int)(s->buf_ptr - s->token.ptr), s->token.ptr);
|
||||
|
@ -42735,7 +42751,7 @@ static int js_json_to_str(JSContext *ctx, JSONStringifyContext *jsc,
|
|||
JS_FreeValue(ctx, val);
|
||||
return ret;
|
||||
} else if (cl == JS_CLASS_BIG_INT) {
|
||||
JS_ThrowTypeError(ctx, "bigint are forbidden in JSON.stringify");
|
||||
JS_ThrowTypeError(ctx, "BigInt are forbidden in JSON.stringify");
|
||||
goto exception;
|
||||
}
|
||||
v = js_array_includes(ctx, jsc->stack, 1, &val);
|
||||
|
@ -42865,7 +42881,7 @@ static int js_json_to_str(JSContext *ctx, JSONStringifyContext *jsc,
|
|||
concat_value:
|
||||
return string_buffer_concat_value_free(jsc->b, val);
|
||||
case JS_TAG_BIG_INT:
|
||||
JS_ThrowTypeError(ctx, "bigint are forbidden in JSON.stringify");
|
||||
JS_ThrowTypeError(ctx, "BigInt are forbidden in JSON.stringify");
|
||||
goto exception;
|
||||
default:
|
||||
JS_FreeValue(ctx, val);
|
||||
|
@ -46765,6 +46781,7 @@ static const JSCFunctionListEntry js_global_funcs[] = {
|
|||
JS_PROP_DOUBLE_DEF("Infinity", 1.0 / 0.0, 0 ),
|
||||
JS_PROP_DOUBLE_DEF("NaN", NAN, 0 ),
|
||||
JS_PROP_UNDEFINED_DEF("undefined", 0 ),
|
||||
JS_PROP_STRING_DEF("[Symbol.toStringTag]", "global", JS_PROP_CONFIGURABLE ),
|
||||
};
|
||||
|
||||
/* Date */
|
||||
|
@ -47922,7 +47939,7 @@ static JSValue JS_ToBigIntCtorFree(JSContext *ctx, JSValue val)
|
|||
a = JS_ToBigInt1(ctx, &a_s, val);
|
||||
if (!bf_is_finite(a)) {
|
||||
JS_FreeValue(ctx, val);
|
||||
val = JS_ThrowRangeError(ctx, "cannot convert NaN or Infinity to bigint");
|
||||
val = JS_ThrowRangeError(ctx, "cannot convert NaN or Infinity to BigInt");
|
||||
} else {
|
||||
JSValue val1 = JS_NewBigInt(ctx);
|
||||
bf_t *r;
|
||||
|
@ -47940,7 +47957,7 @@ static JSValue JS_ToBigIntCtorFree(JSContext *ctx, JSValue val)
|
|||
val = JS_ThrowOutOfMemory(ctx);
|
||||
} else if (ret & BF_ST_INEXACT) {
|
||||
JS_FreeValue(ctx, val1);
|
||||
val = JS_ThrowRangeError(ctx, "cannot convert to bigint: not an integer");
|
||||
val = JS_ThrowRangeError(ctx, "cannot convert to BigInt: not an integer");
|
||||
} else {
|
||||
val = JS_CompactBigInt(ctx, val1);
|
||||
}
|
||||
|
@ -47961,7 +47978,7 @@ static JSValue JS_ToBigIntCtorFree(JSContext *ctx, JSValue val)
|
|||
case JS_TAG_UNDEFINED:
|
||||
default:
|
||||
JS_FreeValue(ctx, val);
|
||||
return JS_ThrowTypeError(ctx, "cannot convert to bigint");
|
||||
return JS_ThrowTypeError(ctx, "cannot convert to BigInt");
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
@ -47987,7 +48004,7 @@ static JSValue js_thisBigIntValue(JSContext *ctx, JSValue this_val)
|
|||
return js_dup(p->u.object_data);
|
||||
}
|
||||
}
|
||||
return JS_ThrowTypeError(ctx, "not a bigint");
|
||||
return JS_ThrowTypeError(ctx, "not a BigInt");
|
||||
}
|
||||
|
||||
static JSValue js_bigint_toString(JSContext *ctx, JSValue this_val,
|
||||
|
|
|
@ -955,9 +955,9 @@ function test_proxy_is_array()
|
|||
/* Without ASAN */
|
||||
assert(Array.isArray(r));
|
||||
} catch(e) {
|
||||
/* With ASAN expect InternalError "stack overflow" to be raised */
|
||||
if (e instanceof InternalError) {
|
||||
assert(e.message, "stack overflow", "Stack overflow error was not raised")
|
||||
/* With ASAN expect RangeError "Maximum call stack size exceeded" to be raised */
|
||||
if (e instanceof RangeError) {
|
||||
assert(e.message, "Maximum call stack size exceeded", "Stack overflow error was not raised")
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
|
|
7
v8.js
7
v8.js
|
@ -6,13 +6,18 @@ const tweak = realpath("v8-tweak.js")
|
|||
const dir = "test262/implementation-contributed/v8/mjsunit"
|
||||
|
||||
const exclude = [
|
||||
"arguments-indirect.js", // implementation-defined
|
||||
"array-concat.js", // slow
|
||||
"array-isarray.js", // unstable output due to stack overflow
|
||||
"ascii-regexp-subject.js", // slow
|
||||
"asm-directive.js", // v8 specific
|
||||
"disallow-codegen-from-strings.js", // --disallow-code-generation-from-strings
|
||||
"cyclic-array-to-string.js", // unstable output due to stack overflow
|
||||
"error-tostring.js", // unstable output due to stack overflow
|
||||
"regexp.js", // invalid, legitimate early SyntaxError
|
||||
"regexp-capture-3.js", // slow
|
||||
"regexp-indexof.js", // deprecated RegExp.lastMatch etc.
|
||||
"regexp-static.js", // deprecated RegExp static properties.
|
||||
"string-replace.js", // unstable output
|
||||
|
||||
"mjsunit-assertion-error.js",
|
||||
|
@ -31,6 +36,8 @@ for (const file of files) {
|
|||
if (exclude.includes(file)) continue
|
||||
const source = std.loadFile(dir + "/" + file)
|
||||
if (/^(im|ex)port/m.test(source)) continue // TODO support modules
|
||||
if (source.includes('Realm.create()')) continue // TODO support Realm object
|
||||
if (source.includes('// MODULE')) continue // TODO support modules
|
||||
if (source.includes('// Files:')) continue // TODO support includes
|
||||
// exclude tests that use V8 intrinsics like %OptimizeFunctionOnNextCall
|
||||
if (source.includes ("--allow-natives-syntax")) continue
|
||||
|
|
319
v8.txt
319
v8.txt
|
@ -8,21 +8,9 @@
|
|||
=== arguments-call-apply.js
|
||||
=== arguments-enum.js
|
||||
=== arguments-escape.js
|
||||
=== arguments-indirect.js
|
||||
Failure: expected <"object"> found <"undefined">
|
||||
Failure: expected <false> found <true>
|
||||
TypeError: cannot read property 'length' of undefined
|
||||
at g (arguments-indirect.js:47:19)
|
||||
at f1 (arguments-indirect.js:29:3)
|
||||
at <eval> (arguments-indirect.js:53:1)
|
||||
|
||||
=== arguments-lazy.js
|
||||
=== arguments-load-across-eval.js
|
||||
=== arguments-read-and-assignment.js
|
||||
=== array-constructor.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (array-constructor.js:98:9)
|
||||
|
||||
=== array-elements-from-array-prototype-chain.js
|
||||
=== array-elements-from-array-prototype.js
|
||||
=== array-elements-from-object-prototype.js
|
||||
|
@ -36,7 +24,7 @@ ReferenceError: 'Realm' is not defined
|
|||
=== array-join-nesting.js
|
||||
=== array-join-nonarray-length-getter-side-effects.js
|
||||
=== array-join.js
|
||||
InternalError: stack overflow
|
||||
RangeError: Maximum call stack size exceeded
|
||||
at join (native)
|
||||
at toString (native)
|
||||
at join (native)
|
||||
|
@ -80,10 +68,6 @@ Failure (Error message): expected <"7 is not a function"> found <"not a function
|
|||
=== array-tostring.js
|
||||
=== array-unshift.js
|
||||
=== arrow-with.js
|
||||
=== asm-directive.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (asm-directive.js:5:1)
|
||||
|
||||
=== async-stack-traces-prepare-stacktrace-1.js
|
||||
=== async-stack-traces-prepare-stacktrace-2.js
|
||||
Failure:
|
||||
|
@ -99,15 +83,7 @@ async function two(x) {
|
|||
=== async-stack-traces-prepare-stacktrace-3.js
|
||||
=== async-stack-traces-prepare-stacktrace-4.js
|
||||
=== big-array-literal.js
|
||||
Object <Error(SyntaxError: stack overflow)> is not an instance of <RangeError> but of <SyntaxError>
|
||||
Failure: expected <true> found <false>
|
||||
Object <Error(SyntaxError: stack overflow)> is not an instance of <RangeError> but of <SyntaxError>
|
||||
Failure: expected <true> found <false>
|
||||
=== big-object-literal.js
|
||||
Object <Error(SyntaxError: stack overflow)> is not an instance of <RangeError> but of <SyntaxError>
|
||||
Failure: expected <true> found <false>
|
||||
Object <Error(SyntaxError: stack overflow)> is not an instance of <RangeError> but of <SyntaxError>
|
||||
Failure: expected <true> found <false>
|
||||
=== binary-op-newspace.js
|
||||
=== binary-operation-overwrite.js
|
||||
=== bit-not.js
|
||||
|
@ -118,10 +94,6 @@ Failure: expected <true> found <false>
|
|||
=== bool-concat.js
|
||||
=== boolean.js
|
||||
=== break.js
|
||||
=== call-cross-realm.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (call-cross-realm.js:5:1)
|
||||
|
||||
=== call-non-function-call.js
|
||||
=== call-non-function.js
|
||||
=== call-stub.js
|
||||
|
@ -147,15 +119,7 @@ TypeError: not a function
|
|||
|
||||
=== constant-folding.js
|
||||
=== context-variable-assignments.js
|
||||
=== contextual-calls.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (contextual-calls.js:28:14)
|
||||
|
||||
=== copy-on-write-assert.js
|
||||
=== cross-realm-filtering.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (cross-realm-filtering.js:5:14)
|
||||
|
||||
=== cyrillic.js
|
||||
Failure (7): expected <true> found <false>
|
||||
Failure (8): expected <true> found <false>
|
||||
|
@ -195,123 +159,17 @@ Failure (May 25 2008 1:30( )AM (PM) is not NaN.): expected <true> found <false>
|
|||
=== delete-vars-from-eval.js
|
||||
=== delete.js
|
||||
=== deserialize-reference.js
|
||||
=== disallow-codegen-from-strings.js
|
||||
Did not throw exception
|
||||
Did not throw exception
|
||||
Did not throw exception
|
||||
=== do-not-strip-fc.js
|
||||
=== dont-enum-array-holes.js
|
||||
=== dont-reinit-global-var.js
|
||||
=== double-equals.js
|
||||
=== dtoa.js
|
||||
=== duplicate-parameters.js
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
<output elided>
|
||||
=== eagerly-parsed-lazily-compiled-functions.js
|
||||
=== elements-transition-and-store.js
|
||||
=== empirical_max_arraybuffer.js
|
||||
=== enumeration-order.js
|
||||
=== error-accessors.js
|
||||
Failure: expected <"x is not defined"> found <"'x' is not defined">
|
||||
Failure: expected <"x is not defined"> found <"'x' is not defined">
|
||||
=== error-constructors.js
|
||||
=== error-tostring-omit.js
|
||||
Failure: expected <true> found <false>
|
||||
|
@ -609,12 +467,10 @@ expected:
|
|||
found:
|
||||
"invalid character in a JSON string"
|
||||
=== json-parser-recursive.js
|
||||
Object <Error(SyntaxError: stack overflow)> is not an instance of <RangeError> but of <SyntaxError>
|
||||
=== json-replacer-number-wrapper-tostring.js
|
||||
=== json-replacer-order.js
|
||||
=== json-stringify-holder.js
|
||||
=== json-stringify-recursive.js
|
||||
Object <Error(InternalError: stack overflow)> is not an instance of <RangeError> but of <InternalError>
|
||||
Did not throw exception
|
||||
Did not throw exception
|
||||
=== json-stringify-stack.js
|
||||
|
@ -639,10 +495,6 @@ found:
|
|||
=== keyed-array-call.js
|
||||
=== keyed-call-generic.js
|
||||
=== keyed-call-ic.js
|
||||
Failure: expected <"[object global]"> found <"[object Object]">
|
||||
Failure: expected <"[object global]"> found <"[object Object]">
|
||||
Failure: expected <"[object global]"> found <"[object Object]">
|
||||
Failure: expected <"[object global]"> found <"[object Object]">
|
||||
=== keyed-ic.js
|
||||
=== keyed-storage-extend.js
|
||||
=== keywords-and-reserved_words.js
|
||||
|
@ -655,19 +507,11 @@ Failure: expected <"[object global]"> found <"[object Object]">
|
|||
=== load-callback-from-value-classic.js
|
||||
=== local-load-from-eval.js
|
||||
=== logical.js
|
||||
=== lookup-behind-property.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (lookup-behind-property.js:5:9)
|
||||
|
||||
=== math-exp-precision.js
|
||||
=== math-sqrt.js
|
||||
=== md5.js
|
||||
=== megamorphic-callbacks.js
|
||||
=== mod.js
|
||||
=== modules-error-trace.js
|
||||
=== modules-preparse.js
|
||||
=== modules-this.js
|
||||
Failure: expected <undefined> found <Object()>
|
||||
=== mul-exhaustive-part1.js
|
||||
=== mul-exhaustive-part10.js
|
||||
=== mul-exhaustive-part2.js
|
||||
|
@ -709,26 +553,10 @@ Failure: expected <true> found <false>
|
|||
=== object-create.js
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <1> found <0>
|
||||
Failure: expected <3> found <1>
|
||||
Failure: expected <0> found <2>
|
||||
Failure: expected <2> found <3>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
=== object-define-properties.js
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <undefined> found <1>
|
||||
=== object-freeze-global.js
|
||||
=== object-get-own-property-names.js
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
=== object-is.js
|
||||
=== object-literal-conversions.js
|
||||
=== object-literal-gc.js
|
||||
|
@ -756,10 +584,6 @@ Failure (printErr should be defined): expected <"function"> found <"undefined">
|
|||
=== prototype.js
|
||||
=== random-bit-correlations.js
|
||||
=== readonly-accessor.js
|
||||
=== realm-property-access.js
|
||||
ReferenceError: 'Realm' is not defined
|
||||
at <eval> (realm-property-access.js:5:9)
|
||||
|
||||
=== receiver-in-with-calls.js
|
||||
=== regexp-UC16.js
|
||||
=== regexp-cache-replace.js
|
||||
|
@ -778,43 +602,6 @@ SyntaxError: too many captures
|
|||
at RegExp (native)
|
||||
at <eval> (regexp-global.js:169:36)
|
||||
|
||||
=== regexp-indexof.js
|
||||
Failure (lastMatch): expected <"abc"> found <undefined>
|
||||
Failure (leftContext): expected <"xxx"> found <undefined>
|
||||
Failure (rightContext): expected <"xxxabcxxx"> found <undefined>
|
||||
Failure (lastMatch): expected <"abc"> found <undefined>
|
||||
Failure (leftContext): expected <"xxxabcxxx"> found <undefined>
|
||||
Failure (rightContext): expected <"xxx"> found <undefined>
|
||||
Failure (lastMatch): expected <"abc"> found <undefined>
|
||||
Failure (leftContext): expected <"xxxabab"> found <undefined>
|
||||
Failure (rightContext): expected <"xxxabcxxx"> found <undefined>
|
||||
Failure (lastMatch): expected <"abc"> found <undefined>
|
||||
Failure (leftContext): expected <"abcabc"> found <undefined>
|
||||
Failure (rightContext): expected <""> found <undefined>
|
||||
Failure (lastMatch): expected <"aba"> found <undefined>
|
||||
Failure (leftContext): expected <"abab"> found <undefined>
|
||||
Failure (rightContext): expected <"ba"> found <undefined>
|
||||
Failure (lastMatch): expected <"foo"> found <undefined>
|
||||
Failure (leftContext): expected <"ofooofoooofo"> found <undefined>
|
||||
Failure (rightContext): expected <"ofo"> found <undefined>
|
||||
Failure (lastMatch): expected <""> found <undefined>
|
||||
Failure (leftContext): expected <""> found <undefined>
|
||||
Failure (rightContext): expected <"xxx"> found <undefined>
|
||||
Failure (lastMatch): expected <"ab"> found <undefined>
|
||||
Failure (leftContext): expected <"xyzzy"> found <undefined>
|
||||
Failure (rightContext): expected <"xyzzzyacxyzzy"> found <undefined>
|
||||
Failure (lastMatch): expected <"ac"> found <undefined>
|
||||
Failure (leftContext): expected <"xyzzyabxyzzy"> found <undefined>
|
||||
Failure (rightContext): expected <"xyzzy"> found <undefined>
|
||||
Failure (lastMatch): expected <""> found <undefined>
|
||||
Failure (leftContext): expected <"aba"> found <undefined>
|
||||
Failure (rightContext): expected <""> found <undefined>
|
||||
Failure (lastMatch): expected <""> found <undefined>
|
||||
Failure (leftContext): expected <"baba"> found <undefined>
|
||||
Failure (rightContext): expected <""> found <undefined>
|
||||
Failure (lastMatch): expected <""> found <undefined>
|
||||
Failure (leftContext): expected <"bab"> found <undefined>
|
||||
Failure (rightContext): expected <""> found <undefined>
|
||||
=== regexp-lastIndex.js
|
||||
=== regexp-lookahead.js
|
||||
=== regexp-loop-capture.js
|
||||
|
@ -858,107 +645,6 @@ TypeError: regexp must have the 'g' flag
|
|||
=== regexp-sort.js
|
||||
=== regexp-stack-overflow.js
|
||||
=== regexp-standalones.js
|
||||
=== regexp-static.js
|
||||
Failure: expected <"abc123.456def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <"abc"> found <undefined>
|
||||
Failure: expected <"def"> found <undefined>
|
||||
Failure: expected <"abc123.456def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <"abc"> found <undefined>
|
||||
Failure: expected <"def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <undefined>
|
||||
Failure: expected <"123"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <"123.456"> found <"fisk">
|
||||
Failure: expected <"ghi789.012jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <"ghi"> found <undefined>
|
||||
Failure: expected <"jkl"> found <undefined>
|
||||
Failure: expected <"ghi789.012jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <"ghi"> found <undefined>
|
||||
Failure: expected <"jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <"fisk">
|
||||
Failure: expected <"789"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <"abc123.456def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <"abc"> found <undefined>
|
||||
Failure: expected <"def"> found <undefined>
|
||||
Failure: expected <"abc123.456def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <"abc"> found <undefined>
|
||||
Failure: expected <"def"> found <undefined>
|
||||
Failure: expected <"123.456"> found <"fisk">
|
||||
Failure: expected <"123"> found <undefined>
|
||||
Failure: expected <"456"> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <"ghi789.012jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <"ghi"> found <undefined>
|
||||
Failure: expected <"jkl"> found <undefined>
|
||||
Failure: expected <"ghi789.012jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <"ghi"> found <undefined>
|
||||
Failure: expected <"jkl"> found <undefined>
|
||||
Failure: expected <"789.012"> found <"fisk">
|
||||
Failure: expected <"789"> found <undefined>
|
||||
Failure: expected <"012"> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <""> found <undefined>
|
||||
Failure: expected <"dddd"> found <"fiskfiskfiskfisk">
|
||||
Failure (lastParen): expected <""> found <undefined>
|
||||
Failure ($1): expected <""> found <"fisk">
|
||||
Failure ($2): expected <""> found <undefined>
|
||||
Failure ($1 in $3 setup): expected <"x"> found <"fisk">
|
||||
Failure ($3): expected <""> found <undefined>
|
||||
Failure ($1 in $4 setup): expected <"x"> found <"fisk">
|
||||
Failure ($2 in $4 setup): expected <"x"> found <undefined>
|
||||
Failure ($4): expected <""> found <undefined>
|
||||
Failure ($1 in $5 setup): expected <"x"> found <"fisk">
|
||||
Failure ($2 in $5 setup): expected <"x"> found <undefined>
|
||||
Failure ($3 in $5 setup): expected <"x"> found <undefined>
|
||||
Failure ($5): expected <""> found <undefined>
|
||||
Failure ($1 in $6 setup): expected <"x"> found <"fisk">
|
||||
Failure ($2 in $6 setup): expected <"x"> found <undefined>
|
||||
Failure ($3 in $6 setup): expected <"x"> found <undefined>
|
||||
Failure ($4 in $6 setup): expected <"x"> found <undefined>
|
||||
Failure ($6): expected <""> found <undefined>
|
||||
Failure ($1 in $7 setup): expected <"x"> found <"fisk">
|
||||
Failure ($2 in $7 setup): expected <"x"> found <undefined>
|
||||
Failure ($3 in $7 setup): expected <"x"> found <undefined>
|
||||
Failure ($4 in $7 setup): expected <"x"> found <undefined>
|
||||
<output elided>
|
||||
=== regexp-string-methods.js
|
||||
=== regress-regexp-functional-replace-slow.js
|
||||
=== result-table-max.js
|
||||
|
@ -1029,7 +715,6 @@ TypeError: not a function
|
|||
at <eval> (stack-traces-custom.js:20:21)
|
||||
|
||||
=== stack-traces-overflow.js
|
||||
Object <Error(InternalError: stack overflow)> is not an instance of <RangeError> but of <InternalError>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <true> found <false>
|
||||
Failure: expected <undefined> found <"">
|
||||
|
@ -1298,7 +983,6 @@ Failure (Capture-Global-nocapture-2): expected <""> found <undefined>
|
|||
<output elided>
|
||||
=== string-normalize.js
|
||||
=== string-oom-concat.js
|
||||
Object <Error(InternalError: string too long)> is not an instance of <RangeError> but of <InternalError>
|
||||
=== string-pad.js
|
||||
=== string-replace-gc.js
|
||||
=== string-replace-one-char.js
|
||||
|
@ -1413,7 +1097,6 @@ Failure (RegExp.$1): expected <"regexp"> found <undefined>
|
|||
=== this-in-callbacks.js
|
||||
=== this-property-assignment.js
|
||||
=== this.js
|
||||
Failure: expected <"[object global]"> found <"[object Object]">
|
||||
=== throw-and-catch-function.js
|
||||
=== throw-exception-for-null-access.js
|
||||
=== to-precision.js
|
||||
|
|
Loading…
Reference in a new issue