Support up to 65535 items in object / array literals.
Related issue: #276 JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
@@ -976,11 +976,15 @@ opfunc_array_decl (vm_instr_t instr, /**< instruction */
|
||||
vm_frame_ctx_t *frame_ctx_p) /**< interpreter context */
|
||||
{
|
||||
const idx_t lhs_var_idx = instr.data.array_decl.lhs;
|
||||
const idx_t args_number = instr.data.array_decl.list;
|
||||
const idx_t args_number_high_byte = instr.data.array_decl.list_1;
|
||||
const idx_t args_number_low_byte = instr.data.array_decl.list_2;
|
||||
const vm_instr_counter_t lit_oc = frame_ctx_p->pos;
|
||||
|
||||
frame_ctx_p->pos++;
|
||||
|
||||
ecma_length_t args_number = (((ecma_length_t) args_number_high_byte << JERRY_BITSINBYTE)
|
||||
+ (ecma_length_t) args_number_low_byte);
|
||||
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
|
||||
MEM_DEFINE_LOCAL_ARRAY (arg_values, args_number, ecma_value_t);
|
||||
@@ -1039,11 +1043,15 @@ opfunc_obj_decl (vm_instr_t instr, /**< instruction */
|
||||
vm_frame_ctx_t *frame_ctx_p) /**< interpreter context */
|
||||
{
|
||||
const idx_t lhs_var_idx = instr.data.obj_decl.lhs;
|
||||
const idx_t args_number = instr.data.obj_decl.list;
|
||||
const idx_t args_number_high_byte = instr.data.obj_decl.list_1;
|
||||
const idx_t args_number_low_byte = instr.data.obj_decl.list_2;
|
||||
const vm_instr_counter_t obj_lit_oc = frame_ctx_p->pos;
|
||||
|
||||
frame_ctx_p->pos++;
|
||||
|
||||
ecma_length_t args_number = (((ecma_length_t) args_number_high_byte << JERRY_BITSINBYTE)
|
||||
+ (ecma_length_t) args_number_low_byte);
|
||||
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
|
||||
ecma_object_t *obj_p = ecma_op_create_object_object_noarg ();
|
||||
|
||||
@@ -326,26 +326,30 @@ pp_op_meta (const vm_instr_t *instrs_p,
|
||||
}
|
||||
case VM_OP_ARRAY_DECL:
|
||||
{
|
||||
if (opm.op.data.array_decl.list == 0)
|
||||
if (opm.op.data.array_decl.list_1 == 0
|
||||
&& opm.op.data.array_decl.list_2 == 0)
|
||||
{
|
||||
printf ("%s = [];", VAR (1));
|
||||
}
|
||||
else
|
||||
{
|
||||
vargs_num = opm.op.data.array_decl.list;
|
||||
vargs_num = (((int) opm.op.data.array_decl.list_1 << JERRY_BITSINBYTE)
|
||||
+ (int) opm.op.data.array_decl.list_2);
|
||||
seen_vargs = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VM_OP_OBJ_DECL:
|
||||
{
|
||||
if (opm.op.data.obj_decl.list == 0)
|
||||
if (opm.op.data.obj_decl.list_1 == 0
|
||||
&& opm.op.data.obj_decl.list_2 == 0)
|
||||
{
|
||||
printf ("%s = {};", VAR (1));
|
||||
}
|
||||
else
|
||||
{
|
||||
vargs_num = opm.op.data.obj_decl.list;
|
||||
vargs_num = (((int) opm.op.data.obj_decl.list_1 << JERRY_BITSINBYTE)
|
||||
+ (int) opm.op.data.obj_decl.list_2);
|
||||
seen_vargs = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -58,13 +58,15 @@ VM_OP_1 (retval, RETVAL,
|
||||
|
||||
VM_OP_0 (ret, RET)
|
||||
|
||||
VM_OP_2 (array_decl, ARRAY_DECL,
|
||||
VM_OP_3 (array_decl, ARRAY_DECL,
|
||||
lhs, VM_OP_ARG_TYPE_VARIABLE,
|
||||
list, VM_OP_ARG_TYPE_INTEGER_CONST)
|
||||
list_1, VM_OP_ARG_TYPE_INTEGER_CONST,
|
||||
list_2, VM_OP_ARG_TYPE_INTEGER_CONST)
|
||||
|
||||
VM_OP_2 (obj_decl, OBJ_DECL,
|
||||
VM_OP_3 (obj_decl, OBJ_DECL,
|
||||
lhs, VM_OP_ARG_TYPE_VARIABLE,
|
||||
list, VM_OP_ARG_TYPE_INTEGER_CONST)
|
||||
list_1, VM_OP_ARG_TYPE_INTEGER_CONST,
|
||||
list_2, VM_OP_ARG_TYPE_INTEGER_CONST)
|
||||
|
||||
VM_OP_3 (prop_getter, PROP_GETTER,
|
||||
lhs, VM_OP_ARG_TYPE_VARIABLE,
|
||||
|
||||
Reference in New Issue
Block a user