Skip to content

Commit a56693e

Browse files
ruben-ayrapetyanegavrin
authored andcommitted
Fix syntax error check for assignment of 'eval' and 'arguments' in strict mode code.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan [email protected]
1 parent 984e269 commit a56693e

File tree

1 file changed

+44
-70
lines changed

1 file changed

+44
-70
lines changed

jerry-core/parser/js/parser.cpp

Lines changed: 44 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,11 +1000,11 @@ parse_postfix_expression (void)
10001000
return expr;
10011001
}
10021002

1003-
syntax_check_for_eval_and_arguments_in_strict_mode (expr, is_strict_mode (), tok.loc);
1004-
10051003
skip_token ();
10061004
if (token_is (TOK_DOUBLE_PLUS))
10071005
{
1006+
syntax_check_for_eval_and_arguments_in_strict_mode (expr, is_strict_mode (), tok.loc);
1007+
10081008
const operand res = dump_post_increment_res (expr);
10091009
if (!operand_is_empty (this_arg) && !operand_is_empty (prop))
10101010
{
@@ -1014,6 +1014,8 @@ parse_postfix_expression (void)
10141014
}
10151015
else if (token_is (TOK_DOUBLE_MINUS))
10161016
{
1017+
syntax_check_for_eval_and_arguments_in_strict_mode (expr, is_strict_mode (), tok.loc);
1018+
10171019
const operand res = dump_post_decrement_res (expr);
10181020
if (!operand_is_empty (this_arg) && !operand_is_empty (prop))
10191021
{
@@ -1601,112 +1603,84 @@ parse_assignment_expression (bool in_allowed)
16011603
{
16021604
return expr;
16031605
}
1604-
syntax_check_for_eval_and_arguments_in_strict_mode (expr, is_strict_mode (), tok.loc);
1606+
16051607
skip_newlines ();
1606-
switch (tok.type)
1607-
{
1608-
case TOK_EQ:
1608+
1609+
token_type tt = tok.type;
1610+
1611+
if (tt == TOK_EQ
1612+
|| tt == TOK_MULT_EQ
1613+
|| tt == TOK_DIV_EQ
1614+
|| tt == TOK_MOD_EQ
1615+
|| tt == TOK_PLUS_EQ
1616+
|| tt == TOK_MINUS_EQ
1617+
|| tt == TOK_LSHIFT_EQ
1618+
|| tt == TOK_RSHIFT_EQ
1619+
|| tt == TOK_RSHIFT_EX_EQ
1620+
|| tt == TOK_AND_EQ
1621+
|| tt == TOK_XOR_EQ
1622+
|| tt == TOK_OR_EQ)
1623+
{
1624+
syntax_check_for_eval_and_arguments_in_strict_mode (expr, is_strict_mode (), tok.loc);
1625+
skip_newlines ();
1626+
start_dumping_assignment_expression ();
1627+
const operand assign_expr = parse_assignment_expression (in_allowed);
1628+
1629+
if (tt == TOK_EQ)
16091630
{
1610-
skip_newlines ();
1611-
start_dumping_assignment_expression ();
1612-
const operand assign_expr = parse_assignment_expression (in_allowed);
16131631
expr = dump_prop_setter_or_variable_assignment_res (expr, assign_expr);
1614-
break;
16151632
}
1616-
case TOK_MULT_EQ:
1633+
else if (tt == TOK_MULT_EQ)
16171634
{
1618-
skip_newlines ();
1619-
start_dumping_assignment_expression ();
1620-
const operand assign_expr = parse_assignment_expression (in_allowed);
16211635
expr = dump_prop_setter_or_multiplication_res (expr, assign_expr);
1622-
break;
16231636
}
1624-
case TOK_DIV_EQ:
1637+
else if (tt == TOK_DIV_EQ)
16251638
{
1626-
skip_newlines ();
1627-
start_dumping_assignment_expression ();
1628-
const operand assign_expr = parse_assignment_expression (in_allowed);
16291639
expr = dump_prop_setter_or_division_res (expr, assign_expr);
1630-
break;
16311640
}
1632-
case TOK_MOD_EQ:
1641+
else if (tt == TOK_MOD_EQ)
16331642
{
1634-
skip_newlines ();
1635-
start_dumping_assignment_expression ();
1636-
const operand assign_expr = parse_assignment_expression (in_allowed);
16371643
expr = dump_prop_setter_or_remainder_res (expr, assign_expr);
1638-
break;
16391644
}
1640-
case TOK_PLUS_EQ:
1645+
else if (tt == TOK_PLUS_EQ)
16411646
{
1642-
skip_newlines ();
1643-
start_dumping_assignment_expression ();
1644-
const operand assign_expr = parse_assignment_expression (in_allowed);
16451647
expr = dump_prop_setter_or_addition_res (expr, assign_expr);
1646-
break;
16471648
}
1648-
case TOK_MINUS_EQ:
1649+
else if (tt == TOK_MINUS_EQ)
16491650
{
1650-
skip_newlines ();
1651-
start_dumping_assignment_expression ();
1652-
const operand assign_expr = parse_assignment_expression (in_allowed);
16531651
expr = dump_prop_setter_or_substraction_res (expr, assign_expr);
1654-
break;
16551652
}
1656-
case TOK_LSHIFT_EQ:
1653+
else if (tt == TOK_LSHIFT_EQ)
16571654
{
1658-
skip_newlines ();
1659-
start_dumping_assignment_expression ();
1660-
const operand assign_expr = parse_assignment_expression (in_allowed);
16611655
expr = dump_prop_setter_or_left_shift_res (expr, assign_expr);
1662-
break;
16631656
}
1664-
case TOK_RSHIFT_EQ:
1657+
else if (tt == TOK_RSHIFT_EQ)
16651658
{
1666-
skip_newlines ();
1667-
start_dumping_assignment_expression ();
1668-
const operand assign_expr = parse_assignment_expression (in_allowed);
16691659
expr = dump_prop_setter_or_right_shift_res (expr, assign_expr);
1670-
break;
16711660
}
1672-
case TOK_RSHIFT_EX_EQ:
1661+
else if (tt == TOK_RSHIFT_EX_EQ)
16731662
{
1674-
skip_newlines ();
1675-
start_dumping_assignment_expression ();
1676-
const operand assign_expr = parse_assignment_expression (in_allowed);
16771663
expr = dump_prop_setter_or_right_shift_ex_res (expr, assign_expr);
1678-
break;
16791664
}
1680-
case TOK_AND_EQ:
1665+
else if (tt == TOK_AND_EQ)
16811666
{
1682-
skip_newlines ();
1683-
start_dumping_assignment_expression ();
1684-
const operand assign_expr = parse_assignment_expression (in_allowed);
16851667
expr = dump_prop_setter_or_bitwise_and_res (expr, assign_expr);
1686-
break;
16871668
}
1688-
case TOK_XOR_EQ:
1669+
else if (tt == TOK_XOR_EQ)
16891670
{
1690-
skip_newlines ();
1691-
start_dumping_assignment_expression ();
1692-
const operand assign_expr = parse_assignment_expression (in_allowed);
16931671
expr = dump_prop_setter_or_bitwise_xor_res (expr, assign_expr);
1694-
break;
16951672
}
1696-
case TOK_OR_EQ:
1673+
else
16971674
{
1698-
skip_newlines ();
1699-
start_dumping_assignment_expression ();
1700-
const operand assign_expr = parse_assignment_expression (in_allowed);
1675+
JERRY_ASSERT (tt == TOK_OR_EQ);
17011676
expr = dump_prop_setter_or_bitwise_or_res (expr, assign_expr);
1702-
break;
1703-
}
1704-
default:
1705-
{
1706-
lexer_save_token (tok);
1707-
break;
17081677
}
17091678
}
1679+
else
1680+
{
1681+
lexer_save_token (tok);
1682+
}
1683+
17101684
return expr;
17111685
}
17121686

0 commit comments

Comments
 (0)