diff --git a/ast_stmt.cc b/ast_stmt.cc index 0ba8410..5e8a31e 100644 --- a/ast_stmt.cc +++ b/ast_stmt.cc @@ -323,10 +323,10 @@ llvm::Value * SwitchStmt::Emit(){ llvm::SwitchInst * val; llvm::LLVMContext * context = irgen.GetContext(); llvm::Function * func = irgen.GetFunction(); - llvm::BasicBlock * blockArr = new llvm::BasicBlock[cases->NumElements()]; + vector blockArr; //find all cases and create a basic block for all of them for (int i = 0; i < cases->NumElements(); i++){ - blockArr[i]= new llvm::BasicBlock::Create(*context, "switchBlock", func); + blockArr.push_back(llvm::BasicBlock::Create(*context, "switchBlock", func)); } //Emit of expression llvm::Value * exprVal=expr->Emit(); @@ -338,7 +338,7 @@ llvm::Value * SwitchStmt::Emit(){ for(int i=0; iNumElements();i++){ //add addCase to switch stmt //addcase to val method - val.addCase (i, blockArr[i]); + val->addCase (llvm::ConstantInt::get(llvm::IntegerType::get(*context, 32), i), blockArr[i]); cases->Nth(i)->Emit(); irgen.GetBasicBlock()->getTerminator(); }