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:
Ruben Ayrapetyan
2015-07-30 17:28:17 +03:00
parent b5923ccd9d
commit c41f76aba2
8 changed files with 277 additions and 69 deletions
+10 -2
View File
@@ -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 ();
+8 -4
View File
@@ -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;
+6 -4
View File
@@ -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,