Change fill_params_list to append formal parameter names to ecma-values collection, instead of array; rename it to vm_fill_params_list.

JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
Ruben Ayrapetyan
2015-08-04 15:56:24 +03:00
parent 72ce13a63a
commit 7daabb1974
8 changed files with 68 additions and 101 deletions
+3 -3
View File
@@ -40,7 +40,7 @@ ecma_completion_value_t set_variable_value (vm_frame_ctx_t *, vm_instr_counter_t
ecma_completion_value_t vm_fill_varg_list (vm_frame_ctx_t *frame_ctx_p,
ecma_length_t args_number,
ecma_collection_header_t *args_values_p);
void fill_params_list (vm_frame_ctx_t *frame_ctx_p,
ecma_length_t params_number,
ecma_string_t* params_names[]);
extern void vm_fill_params_list (vm_frame_ctx_t *frame_ctx_p,
ecma_length_t params_number,
ecma_collection_header_t *formal_params_collection_p);
#endif /* OPCODES_ECMA_SUPPORT_H */
+12 -5
View File
@@ -70,9 +70,10 @@ vm_fill_varg_list (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
* Fill parameters' list
*/
void
fill_params_list (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
ecma_length_t params_number, /**< number of parameters */
ecma_string_t* params_names[]) /**< out: parameters' names */
vm_fill_params_list (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
ecma_length_t params_number, /**< number of parameters */
ecma_collection_header_t *formal_params_collection_p) /**< collection to fill with
* parameters' names */
{
uint32_t param_index;
for (param_index = 0;
@@ -87,10 +88,16 @@ fill_params_list (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
frame_ctx_p->instrs_p,
frame_ctx_p->pos);
params_names[param_index] = ecma_new_ecma_string_from_lit_cp (param_name_lit_idx);
ecma_string_t *param_name_str_p = ecma_new_ecma_string_from_lit_cp (param_name_lit_idx);
ecma_value_t param_name_value = ecma_make_string_value (param_name_str_p);
ecma_append_to_values_collection (formal_params_collection_p, param_name_value, false);
ecma_deref_ecma_string (param_name_str_p);
frame_ctx_p->pos++;
}
JERRY_ASSERT (param_index == params_number);
} /* fill_params_list */
} /* vm_fill_params_list */
+8 -30
View File
@@ -478,8 +478,7 @@ opfunc_var_decl (vm_instr_t instr, /**< instruction */
static ecma_completion_value_t
function_declaration (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
lit_cpointer_t function_name_lit_cp, /**< compressed pointer to literal with function name */
ecma_string_t* args_names[], /**< names of arguments */
ecma_length_t args_number) /**< number of arguments */
ecma_collection_header_t *formal_params_collection_p) /** formal parameters collection */
{
bool is_strict = frame_ctx_p->is_strict;
bool do_instantiate_arguments_object = true;
@@ -510,8 +509,7 @@ function_declaration (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
function_name_string_p,
frame_ctx_p->instrs_p,
frame_ctx_p->pos,
args_names,
args_number,
formal_params_collection_p,
is_strict,
do_instantiate_arguments_object,
is_configurable_bindings);
@@ -543,23 +541,13 @@ opfunc_func_decl_n (vm_instr_t instr, /**< instruction */
ecma_completion_value_t ret_value;
MEM_DEFINE_LOCAL_ARRAY (params_names, params_number, ecma_string_t*);
ecma_collection_header_t *formal_params_collection_p = ecma_new_values_collection (NULL, 0, false);
fill_params_list (frame_ctx_p, params_number, params_names);
vm_fill_params_list (frame_ctx_p, params_number, formal_params_collection_p);
ret_value = function_declaration (frame_ctx_p,
function_name_lit_cp,
params_names,
params_number);
for (uint32_t param_index = 0;
param_index < params_number;
param_index++)
{
ecma_deref_ecma_string (params_names[param_index]);
}
MEM_FINALIZE_LOCAL_ARRAY (params_names);
formal_params_collection_p);
return ret_value;
} /* opfunc_func_decl_n */
@@ -587,9 +575,9 @@ opfunc_func_expr_n (vm_instr_t instr, /**< instruction */
vm_instr_counter_t function_code_end_oc;
MEM_DEFINE_LOCAL_ARRAY (params_names, params_number, ecma_string_t*);
ecma_collection_header_t *formal_params_collection_p = ecma_new_values_collection (NULL, 0, false);
fill_params_list (frame_ctx_p, params_number, params_names);
vm_fill_params_list (frame_ctx_p, params_number, formal_params_collection_p);
bool is_strict = frame_ctx_p->is_strict;
bool do_instantiate_arguments_object = true;
@@ -634,8 +622,7 @@ opfunc_func_expr_n (vm_instr_t instr, /**< instruction */
ecma_ref_object (scope_p);
}
ecma_object_t *func_obj_p = ecma_op_create_function_object (params_names,
params_number,
ecma_object_t *func_obj_p = ecma_op_create_function_object (formal_params_collection_p,
scope_p,
is_strict,
do_instantiate_arguments_object,
@@ -657,15 +644,6 @@ opfunc_func_expr_n (vm_instr_t instr, /**< instruction */
ecma_deref_object (func_obj_p);
ecma_deref_object (scope_p);
for (uint32_t param_index = 0;
param_index < params_number;
param_index++)
{
ecma_deref_ecma_string (params_names[param_index]);
}
MEM_FINALIZE_LOCAL_ARRAY (params_names);
frame_ctx_p->pos = function_code_end_oc;
return ret_value;