From 2d15c0427d8fb48637a691670a9d37b2fe49222e Mon Sep 17 00:00:00 2001 From: Austin Sun Date: Fri, 20 May 2016 11:19:25 -0700 Subject: [PATCH] well --- ast_stmt.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ast_stmt.cc b/ast_stmt.cc index 6fc94dd..16f82d0 100644 --- a/ast_stmt.cc +++ b/ast_stmt.cc @@ -240,7 +240,6 @@ llvm::Value * WhileStmt::Emit(){ llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock()); // given in the slides } - irgen.SetBasicBlock(footBlock); popScope(); return NULL; @@ -294,7 +293,7 @@ llvm::Value * BreakStmt::Emit(){ llvm::LLVMContext * context = irgen.GetContext(); llvm::Function * func = irgen.GetFunction(); llvm::BasicBlock * breakBlock = llvm::BasicBlock::Create(*context, "breakBlock", func); - val=llvm::BranchInst::Create (breakBlock, irgen.GetBasicBlock()); + val=llvm::BranchInst::Create (breakBlock, irgen.GetFooterBlock()); return val; } @@ -303,7 +302,7 @@ llvm::Value * ContinueStmt::Emit(){ llvm::LLVMContext * context = irgen.GetContext(); llvm::Function * func = irgen.GetFunction(); llvm::BasicBlock * contBlock = llvm::BasicBlock::Create(*context, "contBlock", func); - val=llvm::BranchInst::Create (contBlock, irgen.GetBasicBlock()); + val=llvm::BranchInst::Create (contBlock, irgen.GetHeaderBlock()); return val; } @@ -319,6 +318,7 @@ llvm::Value * ReturnStmt::Emit(){ val = llvm::ReturnInst::Create(*context, irgen.GetBasicBlock()); return val; } +//stack for both llvm::Value * SwitchStmt::Emit(){ /* @@ -333,15 +333,18 @@ llvm::Value * SwitchStmt::Emit(){ //Emit of expression llvm::Value * exprVal=expr->Emit(); - //create switch instruction + //create switch instruction pass in default val=llvm::SwitchInst::Create(exprVal, blockArr[cases->NumElements()], cases->NumElements(), irgen.GetBasicBlock()); //for each case 'addCase to switch stmt', EMIT for stmt in case, create terminator instruction for(int i=0; iNumElements();i++){ //add addCase to switch stmt + //addcase to val method + val.AddCase (i, blockArr[i]); cases->Nth(i)->Emit(); irgen.GetBasicBlock()->getTerminator(); } + return val; */ return NULL; } -- 1.9.1