void BinaryOperator::codeGen(CodeGenContext& context) { if (debug) std::cout << "Creating binary operation " << endl; lhs->codeGen(context); rhs->codeGen(context); switch (op) { case TPLUS: context.vadd(type()); break; case TMINUS: context.encode(ToyVm::SUB, type()); break; case TAND: context.encode(ToyVm::AND, type()); break; case TMUL: context.vmul(type()); break; case TDIV: context.encode(ToyVm::DIV, type()); break; case TCEQ: context.encode(ToyVm::CMP, lhs->type()); break; case TCLT: context.encode(ToyVm::CLT, lhs->type()); break; /* TODO comparison */ } }
void WhileStatement::codeGen(CodeGenContext &context) { int start = context.getCurrent(); m_block->codeGen(context, false); m_expr->codeGen(context); context.encode(CodeGenContext::JE, start); }