|
|
|
|
@ -22,7 +22,7 @@ ir::Value* IRGenImpl::GenAddExpr(SysYParser::AddExpContext& add) {
|
|
|
|
|
ir::Value* acc = GenPrimary(*terms[0]);
|
|
|
|
|
for (size_t i = 1; i < terms.size(); ++i) {
|
|
|
|
|
ir::Value* rhs = GenPrimary(*terms[i]);
|
|
|
|
|
std::string name = ir::DefaultContext().NextTemp();
|
|
|
|
|
std::string name = module_.context().NextTemp();
|
|
|
|
|
acc = builder_.CreateBinary(ir::Opcode::Add, acc, rhs, name);
|
|
|
|
|
}
|
|
|
|
|
return acc;
|
|
|
|
|
@ -30,7 +30,7 @@ ir::Value* IRGenImpl::GenAddExpr(SysYParser::AddExpContext& add) {
|
|
|
|
|
|
|
|
|
|
ir::Value* IRGenImpl::GenPrimary(SysYParser::PrimaryContext& primary) {
|
|
|
|
|
if (primary.Number()) {
|
|
|
|
|
return ir::DefaultContext().GetConstInt(std::stoi(primary.Number()->getText()));
|
|
|
|
|
return builder_.CreateConstInt(std::stoi(primary.Number()->getText()));
|
|
|
|
|
}
|
|
|
|
|
if (primary.Ident()) {
|
|
|
|
|
auto* decl = sema_.ResolveVarUse(&primary);
|
|
|
|
|
@ -43,7 +43,7 @@ ir::Value* IRGenImpl::GenPrimary(SysYParser::PrimaryContext& primary) {
|
|
|
|
|
throw std::runtime_error("[irgen] 变量声明缺少存储槽位: " +
|
|
|
|
|
primary.Ident()->getText());
|
|
|
|
|
}
|
|
|
|
|
return builder_.CreateLoad(it->second, ir::DefaultContext().NextTemp());
|
|
|
|
|
return builder_.CreateLoad(it->second, module_.context().NextTemp());
|
|
|
|
|
}
|
|
|
|
|
if (primary.exp()) {
|
|
|
|
|
return GenExpr(*primary.exp());
|
|
|
|
|
|