@@ -542,7 +542,9 @@ jsp_start_parse_function_scope (jsp_operand_t func_name,
542542
543543 skip_token ();
544544
545- const jsp_operand_t func = rewrite_varg_header_set_args_count (formal_parameters_num, varg_header_pos);
545+ const jsp_operand_t func = is_function_expression ? tmp_operand () : empty_operand ();
546+
547+ rewrite_varg_header_set_args_count (func, formal_parameters_num, varg_header_pos);
546548
547549 dump_function_end_for_rewrite ();
548550
@@ -1041,7 +1043,11 @@ static jsp_operand_t
10411043jsp_finish_call_dump (uint32_t args_num,
10421044 vm_instr_counter_t header_pos)
10431045{
1044- return rewrite_varg_header_set_args_count (args_num, header_pos);
1046+ jsp_operand_t ret = tmp_operand ();
1047+
1048+ rewrite_varg_header_set_args_count (ret, args_num, header_pos);
1049+
1050+ return ret;
10451051} /* jsp_finish_call_dump */
10461052
10471053/*
@@ -1067,7 +1073,11 @@ static jsp_operand_t __attr_unused___
10671073jsp_finish_construct_dump (uint32_t args_num,
10681074 vm_instr_counter_t header_pos)
10691075{
1070- return rewrite_varg_header_set_args_count (args_num, header_pos);
1076+ jsp_operand_t ret = tmp_operand ();
1077+
1078+ rewrite_varg_header_set_args_count (ret, args_num, header_pos);
1079+
1080+ return ret;
10711081} /* jsp_finish_construct_dump */
10721082
10731083static lit_cpointer_t
@@ -1545,7 +1555,7 @@ jsp_parse_source_element_list (void)
15451555
15461556 if (scope_type == SCOPE_TYPE_EVAL)
15471557 {
1548- dump_undefined_assignment (eval_ret_operand ( ));
1558+ dump_undefined_assignment (jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_EVAL_RET ));
15491559 }
15501560
15511561 state_p->state = JSP_STATE_SOURCE_ELEMENTS;
@@ -1661,7 +1671,7 @@ jsp_parse_source_element_list (void)
16611671 }
16621672 case TOK_KW_THIS:
16631673 {
1664- state_p->u .expression .operand = this_operand ( );
1674+ state_p->u .expression .operand = jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_THIS_BINDING );
16651675 break ;
16661676 }
16671677 case TOK_KW_NEW:
@@ -1899,7 +1909,9 @@ jsp_parse_source_element_list (void)
18991909 uint32_t list_len = state_p->u .expression .u .varg_sequence .list_length ;
19001910 vm_instr_counter_t header_pos = state_p->u .expression .u .varg_sequence .header_pos ;
19011911
1902- state_p->u .expression .operand = rewrite_varg_header_set_args_count (list_len, header_pos);
1912+ state_p->u .expression .operand = tmp_operand ();
1913+
1914+ rewrite_varg_header_set_args_count (state_p->u .expression .operand , list_len, header_pos);
19031915
19041916 state_p->state = JSP_STATE_EXPR_MEMBER;
19051917 state_p->is_list_in_process = false ;
@@ -1961,7 +1973,8 @@ jsp_parse_source_element_list (void)
19611973 uint32_t list_len = state_p->u .expression .u .varg_sequence .list_length ;
19621974 vm_instr_counter_t header_pos = state_p->u .expression .u .varg_sequence .header_pos ;
19631975
1964- state_p->u .expression .operand = rewrite_varg_header_set_args_count (list_len, header_pos);
1976+ state_p->u .expression .operand = tmp_operand ();
1977+ rewrite_varg_header_set_args_count (state_p->u .expression .operand , list_len, header_pos);
19651978
19661979 state_p->state = JSP_STATE_EXPR_MEMBER;
19671980 state_p->is_list_in_process = false ;
@@ -2127,9 +2140,13 @@ jsp_parse_source_element_list (void)
21272140
21282141 current_token_must_be_check_and_skip_it (TOK_CLOSE_SQUARE);
21292142
2130- subexpr_operand = dump_get_value_if_ref (subexpr_operand,
2131- subexpr_prop_name_operand,
2132- is_subexpr_value_based_reference);
2143+ /*
2144+ * FIXME:
2145+ * evaluation order - change to dump_get_value_if_ref
2146+ */
2147+ subexpr_operand = dump_get_value_if_value_based_ref (subexpr_operand,
2148+ subexpr_prop_name_operand,
2149+ is_subexpr_value_based_reference);
21332150
21342151 state_p->u .expression .prop_name_operand = subexpr_operand;
21352152 state_p->is_value_based_reference = true ;
@@ -2220,9 +2237,13 @@ jsp_parse_source_element_list (void)
22202237
22212238 current_token_must_be (TOK_CLOSE_SQUARE);
22222239
2223- subexpr_operand = dump_get_value_if_ref (subexpr_operand,
2224- subexpr_prop_name_operand,
2225- is_subexpr_value_based_reference);
2240+ /*
2241+ * FIXME:
2242+ * evaluation order - change to dump_get_value_if_ref
2243+ */
2244+ subexpr_operand = dump_get_value_if_value_based_ref (subexpr_operand,
2245+ subexpr_prop_name_operand,
2246+ is_subexpr_value_based_reference);
22262247 state_p->u .expression .prop_name_operand = subexpr_operand;
22272248 state_p->is_value_based_reference = true ;
22282249 }
@@ -2637,6 +2658,15 @@ jsp_parse_source_element_list (void)
26372658 }
26382659 else
26392660 {
2661+ if (subexpr_operand.is_literal_operand ())
2662+ {
2663+ jsp_operand_t reg = tmp_operand ();
2664+
2665+ dump_string_assignment (reg, subexpr_operand.get_literal ());
2666+
2667+ subexpr_operand = reg;
2668+ }
2669+
26402670 dump_delete_prop (state_p->u .expression .operand ,
26412671 subexpr_operand,
26422672 subexpr_prop_name_operand);
@@ -4096,7 +4126,7 @@ jsp_parse_source_element_list (void)
40964126
40974127 seek_token (state_p->u .statement .u .iterational .u .loop_for_in .u .body_loc );
40984128
4099- jsp_operand_t for_in_special_reg = jsp_create_operand_for_in_special_reg ( );
4129+ jsp_operand_t for_in_special_reg = jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_FOR_IN_PROPERTY_NAME );
41004130
41014131 if (!state_p->is_var_decl_no_in )
41024132 {
@@ -4188,7 +4218,11 @@ jsp_parse_source_element_list (void)
41884218 current_token_must_be (TOK_COLON);
41894219
41904220 jsp_operand_t switch_expr = state_p->u .statement .u .switch_statement .expr ;
4191- vm_instr_counter_t jmp_oc = dump_case_clause_check_for_rewrite (switch_expr, case_expr);
4221+
4222+ const jsp_operand_t cond = tmp_operand ();
4223+ dump_equal_value_type (cond, switch_expr, case_expr);
4224+
4225+ vm_instr_counter_t jmp_oc = dump_case_clause_check_for_rewrite (cond);
41924226 skip_token ();
41934227
41944228 jsp_state_t tmp_state = *state_p;
@@ -4468,7 +4502,8 @@ jsp_parse_source_element_list (void)
44684502
44694503 if (serializer_get_scope ()->type == SCOPE_TYPE_EVAL)
44704504 {
4471- dump_variable_assignment (eval_ret_operand (), expr);
4505+ dump_variable_assignment (jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_EVAL_RET),
4506+ expr);
44724507 }
44734508
44744509 JSP_COMPLETE_STATEMENT_PARSE ();
@@ -4595,7 +4630,7 @@ parser_parse_program (const jerry_api_char_t *source_p, /**< source code buffer
45954630
45964631 if (scope_type == SCOPE_TYPE_EVAL)
45974632 {
4598- dump_retval (eval_ret_operand ( ));
4633+ dump_retval (jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_EVAL_RET ));
45994634 }
46004635 else
46014636 {
0 commit comments