mirror of
https://github.com/bellard/quickjs.git
synced 2025-09-30 15:04:24 +03:00
fixed destructuring parsing: do it only in assignment expressions
This commit is contained in:
27
quickjs.c
27
quickjs.c
@@ -24653,20 +24653,12 @@ static __exception int js_parse_postfix_expr(JSParseState *s, int parse_flags)
|
||||
break;
|
||||
case '{':
|
||||
case '[':
|
||||
{
|
||||
int skip_bits;
|
||||
if (js_parse_skip_parens_token(s, &skip_bits, FALSE) == '=') {
|
||||
if (js_parse_destructuring_element(s, 0, 0, FALSE, skip_bits & SKIP_HAS_ELLIPSIS, TRUE, FALSE) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
if (s->token.val == '{') {
|
||||
if (js_parse_object_literal(s))
|
||||
return -1;
|
||||
} else {
|
||||
if (js_parse_array_literal(s))
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (s->token.val == '{') {
|
||||
if (js_parse_object_literal(s))
|
||||
return -1;
|
||||
} else {
|
||||
if (js_parse_array_literal(s))
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case TOK_NEW:
|
||||
@@ -25639,7 +25631,7 @@ static __exception int js_parse_cond_expr(JSParseState *s, int parse_flags)
|
||||
/* allowed parse_flags: PF_IN_ACCEPTED */
|
||||
static __exception int js_parse_assign_expr2(JSParseState *s, int parse_flags)
|
||||
{
|
||||
int opcode, op, scope;
|
||||
int opcode, op, scope, skip_bits;
|
||||
JSAtom name0 = JS_ATOM_NULL;
|
||||
JSAtom name;
|
||||
|
||||
@@ -25816,6 +25808,11 @@ static __exception int js_parse_assign_expr2(JSParseState *s, int parse_flags)
|
||||
return js_parse_function_decl(s, JS_PARSE_FUNC_ARROW,
|
||||
JS_FUNC_NORMAL, JS_ATOM_NULL,
|
||||
s->token.ptr);
|
||||
} else if ((s->token.val == '{' || s->token.val == '[') &&
|
||||
js_parse_skip_parens_token(s, &skip_bits, FALSE) == '=') {
|
||||
if (js_parse_destructuring_element(s, 0, 0, FALSE, skip_bits & SKIP_HAS_ELLIPSIS, TRUE, FALSE) < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
next:
|
||||
if (s->token.val == TOK_IDENT) {
|
||||
|
Reference in New Issue
Block a user