Commit 8af5d87083a1ce8159b810165f8b210beeca9e2c

Authored by Jeffrey Johnson
1 parent 7d1e9334f9
Exists in master

Fix ++ and --

Showing 1 changed file with 20 additions and 9 deletions Side-by-side Diff

... ... @@ -166,18 +166,29 @@
166 166 }
167 167  
168 168 llvm::Value* CompoundExpr::Emit() {
169   - llvm::Value* l = left->Emit();
170   - llvm::Value* r = right->Emit();
  169 + llvm::Value* l = left ? left->Emit() : NULL;
  170 + llvm::Value* r = right ? right->Emit() : NULL;
171 171 llvm::BasicBlock* b = irgen.GetBasicBlock();
172 172 //austins additional value
173 173 llvm::Value *val;
174   - if(!l) {
175   - if(op->getToken() == "++")
176   - val = llvm::ConstantInt::get(irgen.GetIntType(), 1);
177   - return llvm::BinaryOperator::CreateAdd(l, val, "", irgen.GetBasicBlock());
178   - if(op->getToken() == "--")
179   - val = llvm::ConstantInt::get(irgen.GetIntType(), 1);
180   - return llvm::BinaryOperator::CreateSub(l, val, "", irgen.GetBasicBlock());
  174 + if(!l || !r) {
  175 + VarExpr* ve = dynamic_cast<VarExpr*>(l ? left : right);
  176 + llvm::Value* ret;
  177 + llvm::Value* var = l ? l : r;
  178 +
  179 + if(var->getType()->isFPOrFPVectorTy()) val = llvm::ConstantFP::get(irgen.GetFloatType(), 1.0);
  180 + else val = llvm::ConstantInt::get(irgen.GetIntType(), 1);
  181 +
  182 + if(op->getToken() == "++") {
  183 + ret = llvm::BinaryOperator::CreateAdd(var, val, "", b);
  184 + }
  185 + else if(op->getToken() == "--") {
  186 + ret = llvm::BinaryOperator::CreateSub(var, val, "", b);
  187 + }
  188 + new llvm::StoreInst(ret, findSymbol(ve->GetIdentifier()->GetName()).second, false, b);
  189 +
  190 + if(!l) return ret;
  191 + else return var;
181 192 }
182 193 if(l->getType()->isFPOrFPVectorTy()) {
183 194 if(op->getToken() == "+")