mirror of
https://github.com/bellard/quickjs.git
synced 2024-11-22 05:38:11 +08:00
Improve class parser (#289)
- accept `class P { async = 1 }}` - accept `class P { static = 1 }}` etc. - Fixes #261
This commit is contained in:
parent
d9c699f528
commit
0c8fecab23
12
quickjs.c
12
quickjs.c
@ -22381,7 +22381,7 @@ static int __exception js_parse_property_name(JSParseState *s,
|
|||||||
goto fail1;
|
goto fail1;
|
||||||
if (s->token.val == ':' || s->token.val == ',' ||
|
if (s->token.val == ':' || s->token.val == ',' ||
|
||||||
s->token.val == '}' || s->token.val == '(' ||
|
s->token.val == '}' || s->token.val == '(' ||
|
||||||
s->token.val == '=' ) {
|
s->token.val == '=') {
|
||||||
is_non_reserved_ident = TRUE;
|
is_non_reserved_ident = TRUE;
|
||||||
goto ident_found;
|
goto ident_found;
|
||||||
}
|
}
|
||||||
@ -22397,7 +22397,8 @@ static int __exception js_parse_property_name(JSParseState *s,
|
|||||||
if (next_token(s))
|
if (next_token(s))
|
||||||
goto fail1;
|
goto fail1;
|
||||||
if (s->token.val == ':' || s->token.val == ',' ||
|
if (s->token.val == ':' || s->token.val == ',' ||
|
||||||
s->token.val == '}' || s->token.val == '(') {
|
s->token.val == '}' || s->token.val == '(' ||
|
||||||
|
s->token.val == '=') {
|
||||||
is_non_reserved_ident = TRUE;
|
is_non_reserved_ident = TRUE;
|
||||||
goto ident_found;
|
goto ident_found;
|
||||||
}
|
}
|
||||||
@ -23081,7 +23082,12 @@ static __exception int js_parse_class(JSParseState *s, BOOL is_class_expr,
|
|||||||
goto fail;
|
goto fail;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
is_static = (s->token.val == TOK_STATIC);
|
is_static = FALSE;
|
||||||
|
if (s->token.val == TOK_STATIC) {
|
||||||
|
int next = peek_token(s, TRUE);
|
||||||
|
if (!(next == ';' || next == '}' || next == '(' || next == '='))
|
||||||
|
is_static = TRUE;
|
||||||
|
}
|
||||||
prop_type = -1;
|
prop_type = -1;
|
||||||
if (is_static) {
|
if (is_static) {
|
||||||
if (next_token(s))
|
if (next_token(s))
|
||||||
|
@ -335,11 +335,13 @@ function test_class()
|
|||||||
assert(S.x === 42);
|
assert(S.x === 42);
|
||||||
assert(S.y === 42);
|
assert(S.y === 42);
|
||||||
assert(S.z === 42);
|
assert(S.z === 42);
|
||||||
|
|
||||||
class P {
|
class P {
|
||||||
get = () => "123"
|
get = () => "123";
|
||||||
|
static() { return 42; }
|
||||||
}
|
}
|
||||||
assert(new P().get() === "123");
|
assert(new P().get() === "123");
|
||||||
|
assert(new P().static() === 42);
|
||||||
};
|
};
|
||||||
|
|
||||||
function test_template()
|
function test_template()
|
||||||
|
Loading…
Reference in New Issue
Block a user