@@ -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