Introducing type argument in 'assignment' opcode handler.

This commit is contained in:
Ruben Ayrapetyan
2014-07-21 15:57:15 +04:00
parent 123df0f185
commit 98a0c0f933
4 changed files with 48 additions and 5 deletions
+31 -2
View File
@@ -131,6 +131,33 @@ first_operand_as_literal (statement stmt)
return oper.data.lit;
}
static opcode_arg_type_operand
first_operand_type (statement stmt)
{
JERRY_ASSERT (expression_has_operands (stmt));
if (!first_operand (stmt).is_literal)
{
return OPCODE_ARG_TYPE_VARIABLE;
}
literal lit = first_operand(stmt).data.lit;
TODO( Small integer -> OPCODE_ARG_TYPE_SMALLINT );
switch ( lit.type )
{
case LIT_NULL:
case LIT_BOOL:
return OPCODE_ARG_TYPE_SIMPLE;
case LIT_INT:
return OPCODE_ARG_TYPE_NUMBER;
case LIT_STR:
return OPCODE_ARG_TYPE_STRING;
}
JERRY_UNREACHABLE();
}
static uint8_t
first_operand_id (statement stmt)
{
@@ -378,7 +405,9 @@ generator_dump_statement (statement stmt)
break;
case AO_EQ:
opcode = getop_assignment (lhs (stmt), first_operand_id (stmt));
opcode = getop_assignment (lhs (stmt),
first_operand_type(stmt),
first_operand_id (stmt));
dump_opcode (&opcode);
return;
@@ -415,4 +444,4 @@ generator_dump_statement (statement stmt)
__printf (" generator_dump_statement: %d ", stmt.type);
JERRY_UNREACHABLE ();
}
}
}