Not uncommon C implemntation... |
Desired C++ implementation... |
void
expression_plus_compile::generate_code() {
lhs->generate_code();
rhs->generate_code();
switch (PAIR(lhs->get_type(), rhs->get_type()))
{
case PAIR(TYPE_INTEGER, TYPE_INTEGER):
emit(OP_ADI);
break;
case PAIR(TYPE_REAL, TYPE_INTEGER):
emit(OP_FLT);
emit(OP_ADR);
break;
case PAIR(TYPE_INTEGER, TYPE_REAL):
emit(OP_FLO);
emit(OP_ADR);
break;
case PAIR(TYPE_REAL, TYPE_REAL):
emit(OP_ADR);
break;
} } | void
expression_plus_integer_compile::generate_code() {
lhs->generate_code();
rhs->generate_code();
emit(OP_ADI); }
// and take care of the implict casts // somewhere
else, too.
void expression_plus_real_compile::generate_code() {
lhs->generate_code();
rhs->generate_code();
emit(OP_ADR); } |