Commit 79e3b4c81e85aaa9ea45b80204d4e0e5e5afa395

Authored by Austin Sun
1 parent 8af5d87083
Exists in master

hopefully it works

Showing 1 changed file with 18 additions and 22 deletions Side-by-side Diff

... ... @@ -169,51 +169,49 @@
169 169 llvm::Value * ConditionalStmt::Emit(){
170 170 return NULL;
171 171 }
172   -//for statement
  172 +
173 173 llvm::Value * ForStmt::Emit()
174 174 {
175 175 pushScope();
176 176 llvm::LLVMContext * context = irgen.GetContext();
177   - llvm::Function * func = irgen.GetFunction();
178   - llvm::BasicBlock * headBlock = llvm::BasicBlock::Create(*context, "headBlock", func);
179   - llvm::BasicBlock * footBlock = llvm::BasicBlock::Create(*context, "footBlock", func);
180   - llvm::BasicBlock * incBlock = llvm::BasicBlock::Create(*context, "incBlock", func);
181   - llvm::BasicBlock * bodyBlock = llvm::BasicBlock::Create(*context, "bodyBlock", func);
182   - llvm::Value * condition;
  177 + llvm::Function * f = irgen.GetFunction();
  178 + llvm::BasicBlock * headBlock = llvm::BasicBlock::Create(*context, "headBlock", f);
  179 + llvm::BasicBlock * footBlock = llvm::BasicBlock::Create(*context, "footBlock", f);
  180 + llvm::BasicBlock * stepBlock = llvm::BasicBlock::Create(*context, "stepBlock", f);
  181 + llvm::BasicBlock * bodyBlock = llvm::BasicBlock::Create(*context, "bodyBlock", f);
  182 + llvm::Value * cond;
183 183  
184 184 // init and branch to head
185 185 init->Emit();
186 186  
187   - llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock());
  187 + llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock()); // given in the slides
188 188  
189 189 // head
190 190 irgen.SetBasicBlock(headBlock);
191   - condition = test->Emit();
  191 + cond = test->Emit();
192 192 if(!irgen.GetBasicBlock()->getTerminator())
193 193 {
194   - llvm::BranchInst::Create(bodyBlock, footBlock, condition, irgen.GetBasicBlock());
  194 + llvm::BranchInst::Create(bodyBlock, footBlock, cond, irgen.GetBasicBlock()); // given in the slides
195 195 }
196   -
197 196 // body
198 197 irgen.SetBasicBlock(bodyBlock);
199 198 body->Emit();
200 199 if(!irgen.GetBasicBlock()->getTerminator())
201 200 {
202   - llvm::BranchInst::Create(incBlock, irgen.GetBasicBlock());
  201 + llvm::BranchInst::Create(stepBlock, irgen.GetBasicBlock()); // given in the slides
203 202 }
204   -
205 203 // step
206   - irgen.SetBasicBlock(incBlock);
  204 + irgen.SetBasicBlock(stepBlock);
207 205 step->Emit();
208 206 if(!irgen.GetBasicBlock()->getTerminator())
209 207 {
210   - llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock());
  208 + llvm::BranchInst::Create(headBlock, irgen.GetBasicBlock()); // given in the slides
211 209 }
212   -
213 210 irgen.SetBasicBlock(footBlock);
214 211 popScope();
215 212 return NULL;
216 213 }
  214 +
217 215 //while statement
218 216 llvm::Value * WhileStmt::Emit(){
219 217 pushScope();
220 218  
... ... @@ -321,11 +319,11 @@
321 319 //stack for both
322 320  
323 321 llvm::Value * SwitchStmt::Emit(){
324   - /*
325   - llvm::Value * val;
  322 +
  323 + llvm::SwitchInst * val;
326 324 llvm::LLVMContext * context = irgen.GetContext();
327 325 llvm::Function * func = irgen.GetFunction();
328   - llvm::BasicBlock * blockArr = new llvm::BasicBlock [cases->NumElements()];
  326 + llvm::BasicBlock * blockArr = new llvm::BasicBlock[cases->NumElements()];
329 327 //find all cases and create a basic block for all of them
330 328 for (int i = 0; i < cases->NumElements(); i++){
331 329 blockArr[i]= new llvm::BasicBlock::Create(*context, "switchBlock", func);
332 330  
... ... @@ -340,13 +338,11 @@
340 338 for(int i=0; i<cases->NumElements();i++){
341 339 //add addCase to switch stmt
342 340 //addcase to val method
343   - val.AddCase (i, blockArr[i]);
  341 + val.addCase (i, blockArr[i]);
344 342 cases->Nth(i)->Emit();
345 343 irgen.GetBasicBlock()->getTerminator();
346 344 }
347 345 return val;
348   - */
349   - return NULL;
350 346 }
351 347  
352 348 llvm::Value * SwitchLabel::Emit(){