Support let identifier in non-strict mode. (#3427)

This code adds a lot of checks and complexity to the code.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2019-12-10 14:32:08 +01:00
committed by Dániel Bátyai
parent 6cc9848afc
commit 531f1e9687
13 changed files with 449 additions and 81 deletions
+9 -2
View File
@@ -2348,7 +2348,7 @@ parser_pattern_form_assignment (parser_context_t *context_p, /**< context */
uint8_t assign_opcode = CBC_ASSIGN_SET_IDENT;
if (flags & PARSER_PATTERN_LEXICAL
if (flags & (PARSER_PATTERN_LEXICAL | PARSER_PATTERN_LOCAL)
&& context_p->lit_object.index < PARSER_REGISTER_START)
{
assign_opcode = CBC_ASSIGN_LET_CONST;
@@ -2410,6 +2410,7 @@ parser_pattern_process_nested_pattern (parser_context_t *context_p, /**< context
| PARSER_PATTERN_TARGET_ON_STACK
| (flags & (PARSER_PATTERN_BINDING
| PARSER_PATTERN_LEXICAL
| PARSER_PATTERN_LOCAL
| PARSER_PATTERN_REST_ELEMENT)));
if (context_p->next_scanner_info_p->source_p == context_p->source_p)
@@ -2458,6 +2459,13 @@ parser_pattern_process_assignment (parser_context_t *context_p, /**< context */
lexer_construct_literal_object (context_p, &context_p->token.lit_location, LEXER_IDENT_LITERAL);
if (flags & PARSER_PATTERN_LEXICAL
&& !(context_p->status_flags & PARSER_IS_STRICT)
&& lexer_literal_object_is_identifier (context_p, "let", 3))
{
parser_raise_error (context_p, PARSER_ERR_LEXICAL_LET_BINDING);
}
if (context_p->next_scanner_info_p->source_p == context_p->source_p)
{
JERRY_ASSERT (context_p->next_scanner_info_p->type == SCANNER_TYPE_ERR_REDECLARED);
@@ -2472,7 +2480,6 @@ parser_pattern_process_assignment (parser_context_t *context_p, /**< context */
}
context_p->lit_object.literal_p->status_flags |= LEXER_FLAG_FUNCTION_ARGUMENT;
}
#if ENABLED (JERRY_ES2015_MODULE_SYSTEM)
parser_module_append_export_name (context_p);
#endif /* ENABLED (JERRY_ES2015_MODULE_SYSTEM) */