Exemplo n.º 1
0
 IntermediateRepresentationProgram(std::shared_ptr<Program> program)
   : main(emitList(program->main)), functions()
 {
   for (auto&& f : program->functions)
   {
     functions.insert(std::make_pair(f.first, emitList(f.second->body)));
   }
 }
Exemplo n.º 2
0
cs6300::FlowGraph cs6300::WhileStatement::emit()
{
  auto b = emitList(body);
  auto expr = condition->emit();
  b.second->jumpTo = expr;
  auto exitBlock = std::make_shared<BasicBlock>();
  expr->jumpTo = exitBlock;
  expr->branchTo = b.first;
  expr->branchOn = condition->getLabel();
  return std::make_pair(expr, exitBlock);
}
Exemplo n.º 3
0
std::pair<std::shared_ptr<cs6300::BasicBlock>,
          std::shared_ptr<cs6300::BasicBlock>>
cs6300::RepeatStatement::emit()
{
  auto b = emitList(body);
  auto expr = condition->emit();
  b.second->jumpTo = expr;
  auto exitBlock = std::make_shared<BasicBlock>();
  expr->jumpTo = exitBlock;
  expr->branchTo = b.first;
  expr->branchOn = condition->getLabel();
  return std::make_pair(b.first, exitBlock);
}