mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Enhancement of argument list parsing loop: removing break / continue operators, so that every iteration passes start and end of loop body.
The change makes possible simple notification of byte-code generator about start / end of byte-code generation for an argument. As register values are not passed between byte-code sequences that prepare different arguments, the change would make possible for byte-code generator to reuse registers allocated for the code sequences. JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
parent
1dc7ed64d6
commit
dc095bb902
@ -522,61 +522,56 @@ parse_argument_list (varg_list_type vlt, operand obj, uint8_t *args_count, opera
|
|||||||
while (!token_is (close_tt))
|
while (!token_is (close_tt))
|
||||||
{
|
{
|
||||||
operand op;
|
operand op;
|
||||||
switch (vlt)
|
|
||||||
{
|
if (vlt == VARG_FUNC_DECL
|
||||||
case VARG_FUNC_DECL:
|
|| vlt == VARG_FUNC_EXPR)
|
||||||
case VARG_FUNC_EXPR:
|
|
||||||
{
|
{
|
||||||
current_token_must_be (TOK_NAME);
|
current_token_must_be (TOK_NAME);
|
||||||
op = literal_operand (token_data_as_lit_cp ());
|
op = literal_operand (token_data_as_lit_cp ());
|
||||||
syntax_add_varg (op);
|
syntax_add_varg (op);
|
||||||
syntax_check_for_eval_and_arguments_in_strict_mode (op, is_strict_mode (), tok.loc);
|
syntax_check_for_eval_and_arguments_in_strict_mode (op, is_strict_mode (), tok.loc);
|
||||||
break;
|
dump_varg (op);
|
||||||
|
skip_newlines ();
|
||||||
}
|
}
|
||||||
case VARG_ARRAY_DECL:
|
else if (vlt == VARG_CONSTRUCT_EXPR
|
||||||
|
|| vlt == VARG_CALL_EXPR)
|
||||||
|
{
|
||||||
|
op = parse_assignment_expression (true);
|
||||||
|
dump_varg (op);
|
||||||
|
skip_newlines ();
|
||||||
|
}
|
||||||
|
else if (vlt == VARG_ARRAY_DECL)
|
||||||
{
|
{
|
||||||
if (token_is (TOK_COMMA))
|
if (token_is (TOK_COMMA))
|
||||||
{
|
{
|
||||||
op = dump_undefined_assignment_res ();
|
op = dump_undefined_assignment_res ();
|
||||||
dump_varg (op);
|
dump_varg (op);
|
||||||
args_num++;
|
|
||||||
skip_newlines ();
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
/* FALLTHRU */
|
else
|
||||||
}
|
|
||||||
case VARG_CONSTRUCT_EXPR:
|
|
||||||
{
|
{
|
||||||
op = parse_assignment_expression (true);
|
op = parse_assignment_expression (true);
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VARG_CALL_EXPR:
|
|
||||||
{
|
|
||||||
op = parse_assignment_expression (true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VARG_OBJ_DECL:
|
|
||||||
{
|
|
||||||
parse_property_assignment ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In case of obj_decl prop is already dumped. */
|
|
||||||
if (vlt != VARG_OBJ_DECL)
|
|
||||||
{
|
|
||||||
dump_varg (op);
|
dump_varg (op);
|
||||||
}
|
|
||||||
args_num++;
|
|
||||||
|
|
||||||
skip_newlines ();
|
skip_newlines ();
|
||||||
if (!token_is (TOK_COMMA))
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JERRY_ASSERT (vlt == VARG_OBJ_DECL);
|
||||||
|
|
||||||
|
parse_property_assignment ();
|
||||||
|
skip_newlines ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token_is (TOK_COMMA))
|
||||||
|
{
|
||||||
|
skip_newlines ();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
current_token_must_be (close_tt);
|
current_token_must_be (close_tt);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_newlines ();
|
args_num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args_count != NULL)
|
if (args_count != NULL)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user