diff --git a/jerry-core/parser/js/js-parser-statm.c b/jerry-core/parser/js/js-parser-statm.c index d2c6c6669..c5ba6124f 100644 --- a/jerry-core/parser/js/js-parser-statm.c +++ b/jerry-core/parser/js/js-parser-statm.c @@ -1350,15 +1350,26 @@ parser_parse_for_statement_start (parser_context_t *context_p) /**< context */ parser_emit_cbc_ext (context_p, is_for_in ? CBC_EXT_FOR_IN_GET_NEXT : CBC_EXT_FOR_OF_GET_NEXT); + parser_pattern_flags_t flags = (PARSER_PATTERN_BINDING | PARSER_PATTERN_TARGET_ON_STACK); + if (context_p->next_scanner_info_p->source_p == (context_p->source_p + 1)) { - JERRY_ASSERT (context_p->next_scanner_info_p->type == SCANNER_TYPE_INITIALIZER); + if (context_p->next_scanner_info_p->type == SCANNER_TYPE_INITIALIZER) + { + scanner_release_next (context_p, sizeof (scanner_location_info_t)); + } + else + { + JERRY_ASSERT (context_p->next_scanner_info_p->type == SCANNER_TYPE_LITERAL_FLAGS); + if (context_p->next_scanner_info_p->u8_arg & SCANNER_LITERAL_OBJECT_HAS_REST) + { + flags |= PARSER_PATTERN_HAS_REST_ELEMENT; + } - scanner_release_next (context_p, sizeof (scanner_location_info_t)); + scanner_release_next (context_p, sizeof (scanner_info_t)); + } } - parser_pattern_flags_t flags = (PARSER_PATTERN_BINDING | PARSER_PATTERN_TARGET_ON_STACK); - if (token_type == LEXER_KEYW_LET) { flags |= PARSER_PATTERN_LET; diff --git a/tests/jerry/es.next/object-pattern2.js b/tests/jerry/es.next/object-pattern2.js index 6a667c116..b0c46ff20 100644 --- a/tests/jerry/es.next/object-pattern2.js +++ b/tests/jerry/es.next/object-pattern2.js @@ -135,3 +135,25 @@ function f8() { rest_compare(b, ["0", "C", "1", "D"]) } f8() + +function f9() { + var counter = 0; + + for (const { ...rest} in { B: "AA", C: 6.25 }) { + switch (counter) { + case 0: { + /* rest === { '0': 'B' } */ + assert(rest['0'] === 'B'); + break; + } + case 1: { + /* rest === { '0': 'C' } */ + assert(rest['0'] == 'C'); + break; + } + } + counter++; + } + assert(counter === 2); +} +f9() diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml index 98810d77a..619e7b1c0 100644 --- a/tests/test262-esnext-excludelist.xml +++ b/tests/test262-esnext-excludelist.xml @@ -7489,31 +7489,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - -