From 5b2b04f5f9035294f3893c66ae144e9baa678e3c Mon Sep 17 00:00:00 2001 From: "e.gavrin" Date: Thu, 21 Aug 2014 15:46:17 +0400 Subject: [PATCH] Various opcode's refinements: obj[0,1, 2, n]->obj_decl, array[0, 1, 2, n]->array_decl, func_expr[0, 1, n]->removed, varg[1_end, 2_end, 3_end, 3]->varg_list. --- src/libcoreint/opcode-structures.h | 95 ++++-------------------------- src/libcoreint/opcodes.c | 58 +++++------------- src/libcoreint/opcodes.h | 22 ++----- src/libjsparser/parser.c | 58 +++++++++++------- src/liboptimizer/pretty-printer.c | 24 ++------ 5 files changed, 73 insertions(+), 184 deletions(-) diff --git a/src/libcoreint/opcode-structures.h b/src/libcoreint/opcode-structures.h index 0e0b29905..45fcba1ce 100644 --- a/src/libcoreint/opcode-structures.h +++ b/src/libcoreint/opcode-structures.h @@ -307,22 +307,11 @@ OP_CODE_DECL (call_n, T_IDX_IDX_IDX, name_lit_idx, arg1_lit_idx) -/** a = new name (); */ -OP_CODE_DECL (construct_0, T_IDX_IDX, - lhs, - name_lit_idx) - -/** a = new name (arg1); */ -OP_CODE_DECL (construct_1, T_IDX_IDX_IDX, +/** a = new name (arg_list */ +OP_CODE_DECL (construct_decl, T_IDX_IDX_IDX, lhs, name_lit_idx, - arg1_lit_idx) - -/** a = new name (arg1, ... */ -OP_CODE_DECL (construct_n, T_IDX_IDX_IDX, - lhs, - name_lit_idx, - arg1_lit_idx) + arg_list) /** name (); */ OP_CODE_DECL (func_decl_0, T_IDX, @@ -345,40 +334,8 @@ OP_CODE_DECL (func_decl_n, T_IDX_IDX_IDX, arg1_lit_idx, arg2_lit_idx) -/** a = name (); */ -OP_CODE_DECL (func_expr_0, T_IDX_IDX, - lhs, - name_lit_idx) - -/** a = name (arg1); */ -OP_CODE_DECL (func_expr_1, T_IDX_IDX_IDX, - lhs, - name_lit_idx, - arg1_lit_idx) - -/** a = name (arg1, ... */ -OP_CODE_DECL (func_expr_n, T_IDX_IDX_IDX, - lhs, - name_lit_idx, - arg1_lit_idx) - -/** ..., arg1); */ -OP_CODE_DECL (varg_1_end, T_IDX, - arg1_lit_idx) - -/** ..., arg1, arg2); */ -OP_CODE_DECL (varg_2_end, T_IDX_IDX, - arg1_lit_idx, - arg2_lit_idx) - -/** arg1, arg2, arg3, ... */ -OP_CODE_DECL (varg_3, T_IDX_IDX_IDX, - arg1_lit_idx, - arg2_lit_idx, - arg3_lit_idx) - -/** arg1, arg2, arg3); */ -OP_CODE_DECL (varg_3_end, T_IDX_IDX_IDX, +/** arg1, arg2, arg3 */ +OP_CODE_DECL (varg_list, T_IDX_IDX_IDX, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx) @@ -394,26 +351,10 @@ OP_CODE_DECL_VOID (ret) OP_CODE_DECL_VOID (nop) -/** a = [] */ -OP_CODE_DECL (array_0, T_IDX, - lhs) - -/** a = [b] */ -OP_CODE_DECL (array_1, T_IDX_IDX, +/** a = [list] */ +OP_CODE_DECL (array_decl, T_IDX_IDX, lhs, - elem1) - -/** a = [b, c] */ -OP_CODE_DECL (array_2, T_IDX_IDX_IDX, - lhs, - elem1, - elem2) - -/** a = [b, c ... */ -OP_CODE_DECL (array_n, T_IDX_IDX_IDX, - lhs, - elem1, - elem2) + list) /** a = b : c */ OP_CODE_DECL (prop, T_IDX_IDX_IDX, @@ -445,25 +386,9 @@ OP_CODE_DECL (prop_set_decl, T_IDX_IDX_IDX, arg) /** a = { } */ -OP_CODE_DECL (obj_0, T_IDX, - lhs) - -/** a = { b } */ -OP_CODE_DECL (obj_1, T_IDX_IDX, +OP_CODE_DECL (obj_decl, T_IDX_IDX, lhs, - arg1) - -/** a = { b, c } */ -OP_CODE_DECL (obj_2, T_IDX_IDX_IDX, - lhs, - arg1, - arg2) - -/** a = { b, c ... */ -OP_CODE_DECL (obj_n, T_IDX_IDX_IDX, - lhs, - arg1, - arg2) + list) /** a = this */ OP_CODE_DECL (this, T_IDX, diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 84ea00ee2..1effafe32 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -429,40 +429,26 @@ do_number_bitwise_logic (struct __int_data *int_data, /**< interpreter context * #define OP_UNIMPLEMENTED_LIST(op) \ op (call_n) \ op (func_decl_n) \ - op (varg_1_end) \ - op (varg_2_end) \ - op (varg_3) \ - op (varg_3_end) \ + op (varg_list) \ op (retval) \ - op (b_shift_left) \ - op (b_shift_right) \ - op (b_shift_uright) \ - op (logical_and) \ - op (logical_or) \ - op (construct_0) \ - op (construct_1) \ - op (construct_n) \ - op (func_expr_0) \ - op (func_expr_1) \ - op (func_expr_n) \ - op (array_0) \ - op (array_1) \ - op (array_2) \ - op (array_n) \ + op (construct_decl) \ + op (array_decl) \ op (prop) \ op (prop_get_decl) \ op (prop_set_decl) \ - op (obj_0) \ - op (obj_1) \ - op (obj_2) \ - op (obj_n) \ + op (obj_decl) \ op (this) \ op (delete) \ op (typeof) \ op (with) \ op (end_with) \ op (logical_not) \ + op (logical_and) \ + op (logical_or) \ op (b_not) \ + op (b_shift_left) \ + op (b_shift_right) \ + op (b_shift_uright) \ op (instanceof) \ op (in) \ static char __unused unimplemented_list_end @@ -1798,7 +1784,7 @@ opfunc_func_decl_1 (OPCODE opdata, /**< operation data */ int_data->pos++; ecma_string_t *arg_name_string_p = ecma_new_ecma_string_from_lit_index (opdata.data.func_decl_1.arg1_lit_idx); - + ecma_completion_value_t ret_value = function_declaration (int_data, opdata.data.func_decl_1.name_lit_idx, &arg_name_string_p, @@ -1826,7 +1812,7 @@ opfunc_func_decl_2 (OPCODE opdata, /**< operation data */ ecma_new_ecma_string_from_lit_index (opdata.data.func_decl_2.arg1_lit_idx), ecma_new_ecma_string_from_lit_index (opdata.data.func_decl_2.arg2_lit_idx) }; - + ecma_completion_value_t ret_value = function_declaration (int_data, opdata.data.func_decl_1.name_lit_idx, arg_names_strings, @@ -2048,10 +2034,7 @@ GETOP_IMPL_3 (call_n, lhs, name_lit_idx, arg1_lit_idx) GETOP_IMPL_2 (func_decl_1, name_lit_idx, arg1_lit_idx) GETOP_IMPL_3 (func_decl_2, name_lit_idx, arg1_lit_idx, arg2_lit_idx) GETOP_IMPL_3 (func_decl_n, name_lit_idx, arg1_lit_idx, arg2_lit_idx) -GETOP_IMPL_1 (varg_1_end, arg1_lit_idx) -GETOP_IMPL_2 (varg_2_end, arg1_lit_idx, arg2_lit_idx) -GETOP_IMPL_3 (varg_3, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx) -GETOP_IMPL_3 (varg_3_end, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx) +GETOP_IMPL_3 (varg_list, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx) GETOP_IMPL_1 (exitval, status_code) GETOP_IMPL_1 (retval, ret_value) GETOP_IMPL_0 (ret) @@ -2061,26 +2044,15 @@ GETOP_IMPL_2 (b_not, dst, var_right) GETOP_IMPL_2 (logical_not, dst, var_right) GETOP_IMPL_3 (instanceof, dst, var_left, var_right) GETOP_IMPL_3 (in, dst, var_left, var_right) -GETOP_IMPL_2 (construct_0, lhs, name_lit_idx) -GETOP_IMPL_3 (construct_1, lhs, name_lit_idx, arg1_lit_idx) -GETOP_IMPL_3 (construct_n, lhs, name_lit_idx, arg1_lit_idx) +GETOP_IMPL_3 (construct_decl, lhs, name_lit_idx, arg_list) GETOP_IMPL_1 (func_decl_0, name_lit_idx) -GETOP_IMPL_2 (func_expr_0, lhs, name_lit_idx) -GETOP_IMPL_3 (func_expr_1, lhs, name_lit_idx, arg1_lit_idx) -GETOP_IMPL_3 (func_expr_n, lhs, name_lit_idx, arg1_lit_idx) -GETOP_IMPL_1 (array_0, lhs) -GETOP_IMPL_2 (array_1, lhs, elem1) -GETOP_IMPL_3 (array_2, lhs, elem1, elem2) -GETOP_IMPL_3 (array_n, lhs, elem1, elem2) +GETOP_IMPL_2 (array_decl, lhs, list) GETOP_IMPL_3 (prop, lhs, name, value) GETOP_IMPL_3 (prop_getter, lhs, obj, prop) GETOP_IMPL_3 (prop_setter, obj, prop, rhs) GETOP_IMPL_2 (prop_get_decl, lhs, prop) GETOP_IMPL_3 (prop_set_decl, lhs, prop, arg) -GETOP_IMPL_1 (obj_0, lhs) -GETOP_IMPL_2 (obj_1, lhs, arg1) -GETOP_IMPL_3 (obj_2, lhs, arg1, arg2) -GETOP_IMPL_3 (obj_n, lhs, arg1, arg2) +GETOP_IMPL_2 (obj_decl, lhs, list) GETOP_IMPL_1 (this, lhs) GETOP_IMPL_2 (delete, lhs, obj) GETOP_IMPL_2 (typeof, lhs, obj) diff --git a/src/libcoreint/opcodes.h b/src/libcoreint/opcodes.h index 0d621722d..9bf26250d 100644 --- a/src/libcoreint/opcodes.h +++ b/src/libcoreint/opcodes.h @@ -40,38 +40,24 @@ ecma_completion_value_t (*opfunc) (OPCODE, struct __int_data *); op (call_0) \ op (call_1) \ op (call_n) \ - op (construct_0) \ - op (construct_1) \ - op (construct_n) \ + op (construct_decl) \ op (func_decl_0) \ op (func_decl_1) \ op (func_decl_2) \ op (func_decl_n) \ - op (func_expr_0) \ - op (func_expr_1) \ - op (func_expr_n) \ - op (varg_1_end) \ - op (varg_2_end) \ - op (varg_3) \ - op (varg_3_end) \ + op (varg_list) \ op (exitval) \ op (retval) \ op (ret) #define OP_INITS(op) \ - op (array_0) \ - op (array_1) \ - op (array_2) \ - op (array_n) \ + op (array_decl) \ op (prop) \ op (prop_getter) \ op (prop_setter) \ op (prop_get_decl) \ op (prop_set_decl) \ - op (obj_0) \ - op (obj_1) \ - op (obj_2) \ - op (obj_n) \ + op (obj_decl) \ op (this) \ op (delete) \ op (typeof) \ diff --git a/src/libjsparser/parser.c b/src/libjsparser/parser.c index 94d9c8720..06766b0cf 100644 --- a/src/libjsparser/parser.c +++ b/src/libjsparser/parser.c @@ -524,33 +524,37 @@ parse_property_assignment (void) } static void -dump_varg_3 (T_IDX current_param, T_IDX params[3]) +dump_varg_3 (T_IDX current_param, T_IDX params[3] __unused) { if (current_param == 3) { - DUMP_OPCODE_3 (varg_3, params[0], params[1], params[2]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (varg_3, params[0], params[1], params[2]); current_param = 0; } } static void -dump_varg_end (T_IDX current_param, T_IDX params[3]) +dump_varg_end (T_IDX current_param, T_IDX params[3] __unused) { switch (current_param) { case 0: { - DUMP_OPCODE_1 (varg_1_end, params[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_1 (varg_1_end, params[0]); break; } case 1: { - DUMP_OPCODE_2 (varg_2_end, params[0], params[1]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_2 (varg_2_end, params[0], params[1]); break; } case 2: { - DUMP_OPCODE_3 (varg_3_end, params[0], params[1], params[2]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (varg_3_end, params[0], params[1], params[2]); break; } default: @@ -656,22 +660,26 @@ parse_argument_list (argument_list_type alt, T_IDX obj) } case AL_FUNC_EXPR: { - DUMP_OPCODE_3 (func_expr_n, lhs, obj, args[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (func_expr_n, lhs, obj, args[0]); break; } case AL_ARRAY_LIT: { - DUMP_OPCODE_3 (array_n, lhs, args[0], args[1]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (array_n, lhs, args[0], args[1]); break; } case AL_OBJECT_LIT: { - DUMP_OPCODE_3 (obj_n, lhs, args[0], args[1]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (obj_n, lhs, args[0], args[1]); break; } case AL_CONSTRUCT_EXPR: { - DUMP_OPCODE_3 (construct_n, lhs, obj, args[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (construct_n, lhs, obj, args[0]); break; } case AL_CALL_EXPR: @@ -748,22 +756,26 @@ parse_argument_list (argument_list_type alt, T_IDX obj) } case AL_FUNC_EXPR: { - DUMP_OPCODE_3 (func_expr_1, lhs, obj, args[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (func_expr_1, lhs, obj, args[0]); break; } case AL_ARRAY_LIT: { - DUMP_OPCODE_2 (array_1, lhs, args[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_2 (array_1, lhs, args[0]); break; } case AL_OBJECT_LIT: { - DUMP_OPCODE_2 (obj_1, lhs, args[0]); + TODO (Refine to match new opcodes) + //DUMP_OPCODE_2 (obj_1, lhs, args[0]); break; } case AL_CONSTRUCT_EXPR: { - DUMP_OPCODE_3 (construct_1, lhs, obj, args[0]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (construct_1, lhs, obj, args[0]); break; } case AL_CALL_EXPR: @@ -795,12 +807,14 @@ parse_argument_list (argument_list_type alt, T_IDX obj) } case AL_ARRAY_LIT: { - DUMP_OPCODE_3 (array_2, lhs, args[0], args[1]); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_3 (array_2, lhs, args[0], args[1]); break; } case AL_OBJECT_LIT: { - DUMP_OPCODE_3 (obj_2, lhs, args[0], args[1]); + TODO (Refine to match new opcodes) + //DUMP_OPCODE_3 (obj_2, lhs, args[0], args[1]); break; } default: @@ -830,22 +844,26 @@ parse_argument_list (argument_list_type alt, T_IDX obj) } case AL_FUNC_EXPR: { - DUMP_OPCODE_2 (func_expr_0, lhs, obj); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_2 (func_expr_0, lhs, obj); break; } case AL_ARRAY_LIT: { - DUMP_OPCODE_1 (array_0, lhs); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_1 (array_0, lhs); break; } case AL_OBJECT_LIT: { - DUMP_OPCODE_1 (obj_0, lhs); + TODO (Refine to match new opcodes) + //DUMP_OPCODE_1 (obj_0, lhs); break; } case AL_CONSTRUCT_EXPR: { - DUMP_OPCODE_2 (construct_0, lhs, obj); + TODO(Refine to match new opcodes) + //DUMP_OPCODE_2 (construct_0, lhs, obj); break; } case AL_CALL_EXPR: diff --git a/src/liboptimizer/pretty-printer.c b/src/liboptimizer/pretty-printer.c index f900651a1..974c480b7 100644 --- a/src/liboptimizer/pretty-printer.c +++ b/src/liboptimizer/pretty-printer.c @@ -415,33 +415,21 @@ pp_opcode (opcode_counter_t oc, OPCODE opcode, bool is_rewrite) CASE_VARG_0_NAME_LHS (call_0, lhs, "=", "", name_lit_idx, "(", ")") CASE_VARG_1_NAME_LHS (call_1, lhs, "=", "", name_lit_idx, "(", arg1_lit_idx, ")") CASE_VARG_N_NAME_LHS (call_n, lhs, "=", "", name_lit_idx, "(", arg1_lit_idx, ")") - CASE_VARG_0_NAME_LHS (construct_0, lhs, "=", "new", name_lit_idx, "(", ")") - CASE_VARG_1_NAME_LHS (construct_1, lhs, "=", "new", name_lit_idx, "(", arg1_lit_idx, ")") - CASE_VARG_N_NAME_LHS (construct_n, lhs, "=", "new", name_lit_idx, "(", arg1_lit_idx, ")") + CASE_VARG_N_NAME_LHS (construct_decl, lhs, "=", "new", name_lit_idx, "(", arg_list, ")") CASE_VARG_0_NAME (func_decl_0, "function", name_lit_idx, "(", ")") CASE_VARG_1_NAME (func_decl_1, "function", name_lit_idx, "(", arg1_lit_idx, ")") CASE_VARG_2_NAME (func_decl_2, "function", name_lit_idx, "(", arg1_lit_idx, arg2_lit_idx, ")") CASE_VARG_N_NAME (func_decl_n, "function", name_lit_idx, "(", arg1_lit_idx, arg2_lit_idx, ")") - CASE_VARG_0_NAME_LHS (func_expr_0, lhs, "=", "function", name_lit_idx, "(", ")") - CASE_VARG_1_NAME_LHS (func_expr_1, lhs, "=", "function", name_lit_idx, "(", arg1_lit_idx, ")") - CASE_VARG_N_NAME_LHS (func_expr_n, lhs, "=", "function", name_lit_idx, "(", arg1_lit_idx, ")") - CASE_VARG_1_END (varg_1_end, arg1_lit_idx) - CASE_VARG_2_END (varg_2_end, arg1_lit_idx, arg2_lit_idx) - CASE_VARG_3_END (varg_3_end, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx) - CASE_VARG_3 (varg_3, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx); + CASE_VARG_3 (varg_list, arg1_lit_idx, arg2_lit_idx, arg3_lit_idx); CASE_EXIT (exitval, "exit", status_code) CASE_SINGLE_ADDRESS (retval, "return", ret_value) CASE_ZERO_ADDRESS (ret, "return") CASE_ZERO_ADDRESS (end_with, "") CASE_ZERO_ADDRESS (nop, "") - CASE_VARG_0_LHS (array_0, lhs, "=", "[", "]") - CASE_VARG_1_LHS (array_1, lhs, "=", "[", elem1, "]") - CASE_VARG_2_LHS (array_2, lhs, "=", "[", elem1, elem2, "]") - CASE_VARG_N_LHS (array_n, lhs, "=", "[", elem1, elem2, "]") - CASE_VARG_0_LHS (obj_0, lhs, "=", "{", "}") - CASE_VARG_1_LHS (obj_1, lhs, "=", "{", arg1, "}") - CASE_VARG_2_LHS (obj_2, lhs, "=", "{", arg1, arg2, "}") - CASE_VARG_N_LHS (obj_n, lhs, "=", "{", arg1, arg2, "}") + TODO (Refine to match new opcodes) + CASE_VARG_1_LHS (array_decl, lhs, "=", "[", list, "]") + TODO (Refine to match new opcodes) + CASE_VARG_0_LHS (obj_decl, lhs, "=", "{", "}") CASE_TRIPLE_ADDRESS (prop, lhs, "=", name, ":", value) CASE_VARG_1_NAME_LHS (prop_getter, lhs, "=", "", obj, "[", prop, "]") CASE_VARG_0_NAME_LHS (prop_get_decl, lhs, "=", "get", prop, "[", "]")