Skip to content

Commit 1033ec4

Browse files
Merge pull request jerryscript-project#22 from ruben-ayrapetyan/experiments-dev
Move registers allocation to parser.cpp (first stage) and temporary turn of evaluation of Identifier in squares (to be fixed later)
2 parents d1ff9d1 + a8e2305 commit 1033ec4

File tree

3 files changed

+65
-79
lines changed

3 files changed

+65
-79
lines changed

jerry-core/parser/js/opcodes-dumper.cpp

Lines changed: 11 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -503,29 +503,6 @@ literal_operand (lit_cpointer_t lit_cp)
503503
return jsp_operand_t::make_lit_operand (lit_cp);
504504
}
505505

506-
/**
507-
* Creates operand for eval's return value
508-
*
509-
* @return constructed operand
510-
*/
511-
jsp_operand_t
512-
eval_ret_operand (void)
513-
{
514-
return jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_EVAL_RET);
515-
} /* eval_ret_operand */
516-
517-
/**
518-
* Creates operand for taking iterator value (next property name)
519-
* from for-in instr handler.
520-
*
521-
* @return constructed operand
522-
*/
523-
jsp_operand_t
524-
jsp_create_operand_for_in_special_reg (void)
525-
{
526-
return jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_FOR_IN_PROPERTY_NAME);
527-
} /* jsp_create_operand_for_in_special_reg */
528-
529506
bool
530507
operand_is_empty (jsp_operand_t op)
531508
{
@@ -777,8 +754,9 @@ dump_varg_header_for_rewrite (varg_list_type vlt, jsp_operand_t obj)
777754
return pos;
778755
}
779756

780-
jsp_operand_t
781-
rewrite_varg_header_set_args_count (size_t args_count,
757+
void
758+
rewrite_varg_header_set_args_count (jsp_operand_t ret,
759+
size_t args_count,
782760
vm_instr_counter_t pos)
783761
{
784762
/*
@@ -803,11 +781,10 @@ rewrite_varg_header_set_args_count (size_t args_count,
803781
"No more than 255 formal parameters / arguments are currently supported",
804782
LIT_ITERATOR_POS_ZERO);
805783
}
806-
const jsp_operand_t res = tmp_operand ();
807784
om.op.data.func_expr_n.arg_list = (vm_idx_t) args_count;
808-
om.op.data.func_expr_n.lhs = res.get_idx ();
785+
om.op.data.func_expr_n.lhs = ret.get_idx ();
809786
serializer_rewrite_op_meta (pos, om);
810-
return res;
787+
break;
811788
}
812789
case VM_OP_FUNC_DECL_N:
813790
{
@@ -819,7 +796,8 @@ rewrite_varg_header_set_args_count (size_t args_count,
819796
}
820797
om.op.data.func_decl_n.arg_list = (vm_idx_t) args_count;
821798
serializer_rewrite_op_meta (pos, om);
822-
return empty_operand ();
799+
JERRY_ASSERT (ret.is_empty_operand ());
800+
break;
823801
}
824802
case VM_OP_ARRAY_DECL:
825803
case VM_OP_OBJ_DECL:
@@ -830,12 +808,11 @@ rewrite_varg_header_set_args_count (size_t args_count,
830808
"No more than 65535 formal parameters are currently supported",
831809
LIT_ITERATOR_POS_ZERO);
832810
}
833-
const jsp_operand_t res = tmp_operand ();
834811
om.op.data.obj_decl.list_1 = (vm_idx_t) (args_count >> 8);
835812
om.op.data.obj_decl.list_2 = (vm_idx_t) (args_count & 0xffu);
836-
om.op.data.obj_decl.lhs = res.get_idx ();
813+
om.op.data.obj_decl.lhs = ret.get_idx ();
837814
serializer_rewrite_op_meta (pos, om);
838-
return res;
815+
break;
839816
}
840817
default:
841818
{
@@ -970,12 +947,6 @@ rewrite_function_end (vm_instr_counter_t pos)
970947
serializer_rewrite_op_meta (pos, function_end_op_meta);
971948
}
972949

973-
jsp_operand_t
974-
this_operand (void)
975-
{
976-
return jsp_operand_t::make_reg_operand (VM_REG_SPECIAL_THIS_BINDING);
977-
}
978-
979950
void
980951
dump_unary_plus (jsp_operand_t res, jsp_operand_t obj)
981952
{
@@ -1005,19 +976,6 @@ dump_delete_prop (jsp_operand_t res,
1005976
jsp_operand_t base,
1006977
jsp_operand_t prop_name)
1007978
{
1008-
if (prop_name.is_literal_operand ())
1009-
{
1010-
/*
1011-
* TODO:
1012-
* Introduce delete_prop instruction that accepts property name as a literal-represented string
1013-
*/
1014-
1015-
jsp_operand_t tmp = tmp_operand ();
1016-
dump_string_assignment (tmp, prop_name.get_literal ());
1017-
1018-
prop_name = tmp;
1019-
}
1020-
1021979
dump_triple_address (VM_OP_DELETE_PROP, res, base, prop_name);
1022980
}
1023981

@@ -1406,15 +1364,12 @@ start_dumping_case_clauses (void)
14061364
}
14071365

14081366
vm_instr_counter_t
1409-
dump_case_clause_check_for_rewrite (jsp_operand_t switch_expr, jsp_operand_t case_expr)
1367+
dump_case_clause_check_for_rewrite (jsp_operand_t cond)
14101368
{
1411-
const jsp_operand_t res = tmp_operand ();
1412-
dump_triple_address (VM_OP_EQUAL_VALUE_TYPE, res, switch_expr, case_expr);
1413-
14141369
vm_instr_counter_t jmp_oc = serializer_get_current_instr_counter ();
14151370

14161371
dump_triple_address (VM_OP_IS_TRUE_JMP_DOWN,
1417-
res,
1372+
cond,
14181373
jsp_operand_t::make_unknown_operand (),
14191374
jsp_operand_t::make_unknown_operand ());
14201375

jerry-core/parser/js/opcodes-dumper.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,6 @@ typedef enum __attr_packed___
345345

346346
jsp_operand_t empty_operand (void);
347347
jsp_operand_t literal_operand (lit_cpointer_t);
348-
jsp_operand_t eval_ret_operand (void);
349-
jsp_operand_t jsp_create_operand_for_in_special_reg (void);
350348
jsp_operand_t tmp_operand (void);
351349
bool operand_is_empty (jsp_operand_t);
352350

@@ -377,7 +375,7 @@ void dump_null_assignment (jsp_operand_t);
377375
void dump_variable_assignment (jsp_operand_t, jsp_operand_t);
378376

379377
vm_instr_counter_t dump_varg_header_for_rewrite (varg_list_type, jsp_operand_t);
380-
jsp_operand_t rewrite_varg_header_set_args_count (size_t, vm_instr_counter_t);
378+
void rewrite_varg_header_set_args_count (jsp_operand_t, size_t, vm_instr_counter_t);
381379
void dump_call_additional_info (opcode_call_flags_t, jsp_operand_t);
382380
void dump_varg (jsp_operand_t);
383381

@@ -390,8 +388,6 @@ void dump_prop_setter (jsp_operand_t, jsp_operand_t, jsp_operand_t);
390388
void dump_function_end_for_rewrite (void);
391389
void rewrite_function_end (vm_instr_counter_t);
392390

393-
jsp_operand_t this_operand (void);
394-
395391
void dump_unary_plus (jsp_operand_t, jsp_operand_t);
396392
void dump_unary_minus (jsp_operand_t, jsp_operand_t);
397393
void dump_bitwise_not (jsp_operand_t, jsp_operand_t);
@@ -430,7 +426,7 @@ vm_instr_counter_t rewrite_simple_or_nested_jump_and_get_next (vm_instr_counter_
430426
void dump_continue_iterations_check (vm_instr_counter_t, jsp_operand_t);
431427

432428
void start_dumping_case_clauses (void);
433-
vm_instr_counter_t dump_case_clause_check_for_rewrite (jsp_operand_t, jsp_operand_t);
429+
vm_instr_counter_t dump_case_clause_check_for_rewrite (jsp_operand_t);
434430
vm_instr_counter_t dump_default_clause_check_for_rewrite (void);
435431
void rewrite_case_clause (vm_instr_counter_t);
436432
void rewrite_default_clause (vm_instr_counter_t);

jerry-core/parser/js/parser.cpp

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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
10411043
jsp_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___
10671073
jsp_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

10731083
static 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

Comments
 (0)