Commit c4678c53eec163956e1cb68570411d9f9899f854
1 parent
7d4bb24f04
Exists in
master
added the inc and dec double check with my implementation
Showing 2 changed files with 22 additions and 5 deletions Side-by-side Diff
ast_expr.cc
View file @
c4678c5
... | ... | @@ -168,11 +168,15 @@ |
168 | 168 | llvm::Value* l = l ? left->Emit() : NULL; |
169 | 169 | llvm::Value* r = r ? right->Emit() : NULL; |
170 | 170 | llvm::BasicBlock* b = irgen.GetBasicBlock(); |
171 | - if(!l) { // TODO : Implement | |
171 | + //austins additional value | |
172 | + llvm::Value *val; | |
173 | + if(!l) { | |
172 | 174 | if(op->getToken() == "++") |
173 | - return NULL; | |
175 | + val = llvm::ConstantInt::get(irgen.GetIntType(), 1); | |
176 | + return llvm::BinaryOperator::CreateAdd(l, val, "", irgen.GetBasicBlock()); | |
174 | 177 | if(op->getToken() == "--") |
175 | - return NULL; | |
178 | + val = llvm::ConstantInt::get(irgen.GetIntType(), 1); | |
179 | + return llvm::BinaryOperator::CreateSub(l, val, "", irgen.GetBasicBlock()); | |
176 | 180 | } |
177 | 181 | if(l->getType()->isFPOrFPVectorTy()) { |
178 | 182 | if(op->getToken() == "+") |
ast_stmt.cc
View file @
c4678c5
... | ... | @@ -181,7 +181,6 @@ |
181 | 181 | llvm::BasicBlock * bodyBlock = llvm::BasicBlock::Create(*context, "bodyBlock", func); |
182 | 182 | llvm::Value * condition; |
183 | 183 | |
184 | - | |
185 | 184 | // init and branch to head |
186 | 185 | init->Emit(); |
187 | 186 | |
... | ... | @@ -280,7 +279,20 @@ |
280 | 279 | } |
281 | 280 | |
282 | 281 | llvm::Value * SwitchStmt::Emit(){ |
283 | - return NULL; | |
282 | + llvm::Value * val; | |
283 | + llvm::LLVMContext * context = irgen.GetContext(); | |
284 | + llvm::Function * func = irgen.GetFunction(); | |
285 | + //find all cases and create a basic block for all of them | |
286 | + for (int i = 0; i < cases->NumElements(); i++){ | |
287 | + //cases->Nth(i)->Emit(); | |
288 | + | |
289 | + } | |
290 | + //Emit of expression | |
291 | + llvm::Value * exprVal=expr->Emit(); | |
292 | + //create switch instruction | |
293 | + //val=llvm::SwitchInst::Create(Value *Value, BasicBlock *Default, unsigned NumCases, BasicBlock *InsertAtEnd); | |
294 | + //for each case 'addCase to switch stmt', EMIT for stmt in case, create terminator instruction | |
295 | + | |
284 | 296 | } |
285 | 297 | |
286 | 298 | llvm::Value * SwitchLabel::Emit(){ |