Fix continue label lookup in for statements that have a private scope (#4224)

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
Dániel Bátyai 2020-09-25 10:06:19 +02:00 committed by GitHub
parent 3b7409f3a7
commit 43e03a1ac6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 7 deletions

View File

@ -2336,11 +2336,18 @@ parser_parse_continue_statement (parser_context_t *context_p) /**< context */
opcode = CBC_JUMP_FORWARD_EXIT_CONTEXT; opcode = CBC_JUMP_FORWARD_EXIT_CONTEXT;
} }
#if ENABLED (JERRY_ESNEXT)
const bool is_private_scope = (type == PARSER_STATEMENT_PRIVATE_SCOPE
|| type == PARSER_STATEMENT_PRIVATE_CONTEXT);
#else /* !ENABLED (JERRY_ESNEXT) */
const bool is_private_scope = false;
#endif /* !ENABLED (JERRY_ESNEXT) */
if (parser_statement_flags[type] & PARSER_STATM_CONTINUE_TARGET) if (parser_statement_flags[type] & PARSER_STATM_CONTINUE_TARGET)
{ {
loop_iterator = iterator; loop_iterator = iterator;
} }
else else if (!is_private_scope)
{ {
loop_iterator.current_p = NULL; loop_iterator.current_p = NULL;
} }

View File

@ -321,9 +321,6 @@
<test id="language/statements/class/name-binding/in-extends-expression-assigned.js"><reason></reason></test> <test id="language/statements/class/name-binding/in-extends-expression-assigned.js"><reason></reason></test>
<test id="language/statements/class/name-binding/in-extends-expression.js"><reason></reason></test> <test id="language/statements/class/name-binding/in-extends-expression.js"><reason></reason></test>
<test id="language/statements/class/syntax/early-errors/class-body-static-method-get-propname-prototype.js"><reason></reason></test> <test id="language/statements/class/syntax/early-errors/class-body-static-method-get-propname-prototype.js"><reason></reason></test>
<test id="language/statements/continue/labeled-continue.js"><reason></reason></test>
<test id="language/statements/continue/nested-let-bound-for-loops-labeled-continue.js"><reason></reason></test>
<test id="language/statements/continue/simple-and-labeled.js"><reason></reason></test>
<test id="language/statements/for-of/iterator-next-reference.js"><reason>ES2018 change: next method must be cached</reason></test> <test id="language/statements/for-of/iterator-next-reference.js"><reason>ES2018 change: next method must be cached</reason></test>
<test id="language/statements/for/S12.6.3_A9.1.js"><reason></reason></test> <test id="language/statements/for/S12.6.3_A9.1.js"><reason></reason></test>
<test id="language/statements/for/S12.6.3_A9.js"><reason></reason></test> <test id="language/statements/for/S12.6.3_A9.js"><reason></reason></test>

View File

@ -4200,9 +4200,6 @@
<test id="language/statements/const/dstr/obj-ptrn-rest-getter.js"><reason></reason></test> <test id="language/statements/const/dstr/obj-ptrn-rest-getter.js"><reason></reason></test>
<test id="language/statements/const/dstr/obj-ptrn-rest-skip-non-enumerable.js"><reason></reason></test> <test id="language/statements/const/dstr/obj-ptrn-rest-skip-non-enumerable.js"><reason></reason></test>
<test id="language/statements/const/dstr/obj-ptrn-rest-val-obj.js"><reason></reason></test> <test id="language/statements/const/dstr/obj-ptrn-rest-val-obj.js"><reason></reason></test>
<test id="language/statements/continue/labeled-continue.js"><reason></reason></test>
<test id="language/statements/continue/nested-let-bound-for-loops-labeled-continue.js"><reason></reason></test>
<test id="language/statements/continue/simple-and-labeled.js"><reason></reason></test>
<test id="language/statements/do-while/cptn-abrupt-empty.js"><reason></reason></test> <test id="language/statements/do-while/cptn-abrupt-empty.js"><reason></reason></test>
<test id="language/statements/do-while/cptn-normal.js"><reason></reason></test> <test id="language/statements/do-while/cptn-normal.js"><reason></reason></test>
<test id="language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js"><reason></reason></test> <test id="language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js"><reason></reason></test>