diff --git a/source/quickjs.c b/source/quickjs.c index 64e73aea..a60c2b1d 100644 --- a/source/quickjs.c +++ b/source/quickjs.c @@ -29687,8 +29687,17 @@ static cJSON *ast_parse_primary (ASTParseState *s) { cJSON *pair = cJSON_CreateObject (); /* property name */ int is_ident = (s->token_val == TOK_IDENT); - if (s->token_val == TOK_IDENT || s->token_val == TOK_STRING || s->token_val == TOK_NUMBER) { - cJSON *left = ast_parse_primary (s); + int is_keyword = (s->token_val >= TOK_FIRST_KEYWORD && s->token_val <= TOK_LAST_KEYWORD); + if (is_ident || is_keyword || s->token_val == TOK_STRING || s->token_val == TOK_NUMBER) { + cJSON *left; + if (is_keyword) { + left = ast_node (s, "name", s->token_ptr); + cjson_add_strn (left, "name", s->token_u.ident.str, s->token_u.ident.len); + ast_node_end (s, left, s->buf_ptr); + ast_next_token (s); + } else { + left = ast_parse_primary (s); + } cJSON_AddItemToObject (pair, "left", left); } else if (s->token_val == '[') { /* computed property */