Commit 2d15c0427d8fb48637a691670a9d37b2fe49222e
1 parent
97f140d1e4
Exists in
master
well
Showing 1 changed file with 7 additions and 4 deletions Side-by-side Diff
ast_stmt.cc
View file @
2d15c04
... | ... | @@ -240,7 +240,6 @@ |
240 | 240 | llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock()); // given in the slides |
241 | 241 | } |
242 | 242 | |
243 | - | |
244 | 243 | irgen.SetBasicBlock(footBlock); |
245 | 244 | popScope(); |
246 | 245 | return NULL; |
... | ... | @@ -294,7 +293,7 @@ |
294 | 293 | llvm::LLVMContext * context = irgen.GetContext(); |
295 | 294 | llvm::Function * func = irgen.GetFunction(); |
296 | 295 | llvm::BasicBlock * breakBlock = llvm::BasicBlock::Create(*context, "breakBlock", func); |
297 | - val=llvm::BranchInst::Create (breakBlock, irgen.GetBasicBlock()); | |
296 | + val=llvm::BranchInst::Create (breakBlock, irgen.GetFooterBlock()); | |
298 | 297 | return val; |
299 | 298 | } |
300 | 299 | |
... | ... | @@ -303,7 +302,7 @@ |
303 | 302 | llvm::LLVMContext * context = irgen.GetContext(); |
304 | 303 | llvm::Function * func = irgen.GetFunction(); |
305 | 304 | llvm::BasicBlock * contBlock = llvm::BasicBlock::Create(*context, "contBlock", func); |
306 | - val=llvm::BranchInst::Create (contBlock, irgen.GetBasicBlock()); | |
305 | + val=llvm::BranchInst::Create (contBlock, irgen.GetHeaderBlock()); | |
307 | 306 | return val; |
308 | 307 | } |
309 | 308 | |
... | ... | @@ -319,6 +318,7 @@ |
319 | 318 | val = llvm::ReturnInst::Create(*context, irgen.GetBasicBlock()); |
320 | 319 | return val; |
321 | 320 | } |
321 | +//stack for both | |
322 | 322 | |
323 | 323 | llvm::Value * SwitchStmt::Emit(){ |
324 | 324 | /* |
325 | 325 | |
326 | 326 | |
... | ... | @@ -333,15 +333,18 @@ |
333 | 333 | //Emit of expression |
334 | 334 | llvm::Value * exprVal=expr->Emit(); |
335 | 335 | |
336 | - //create switch instruction | |
336 | + //create switch instruction pass in default | |
337 | 337 | val=llvm::SwitchInst::Create(exprVal, blockArr[cases->NumElements()], cases->NumElements(), irgen.GetBasicBlock()); |
338 | 338 | |
339 | 339 | //for each case 'addCase to switch stmt', EMIT for stmt in case, create terminator instruction |
340 | 340 | for(int i=0; i<cases->NumElements();i++){ |
341 | 341 | //add addCase to switch stmt |
342 | + //addcase to val method | |
343 | + val.AddCase (i, blockArr[i]); | |
342 | 344 | cases->Nth(i)->Emit(); |
343 | 345 | irgen.GetBasicBlock()->getTerminator(); |
344 | 346 | } |
347 | + return val; | |
345 | 348 | */ |
346 | 349 | return NULL; |
347 | 350 | } |