diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index 967ee0d..9077eee 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -136,7 +136,8 @@ std::any SysYIRGenerator::visitFuncDef(SysYParser::FuncDefContext* ctx) { irStream << " " << allocaName << " = alloca " << llvmType << ", align 4\n"; irStream << " store " << llvmType << " " << symbolTable[varName].first << ", " << llvmType << "* " << allocaName << ", align 4\n"; - + + symbolTable[varName] = {allocaName, llvmType}; } } ctx->blockStmt()->accept(this); @@ -175,7 +176,7 @@ std::any SysYIRGenerator::visitStmt(SysYParser::StmtContext* ctx) { throw std::runtime_error("Invalid float literal: " + rhs); } } - irStream << " store1 " << lhsType << " " << rhs << ", " << lhsType + irStream << " store " << lhsType << " " << rhs << ", " << lhsType << "* " << lhsAlloca << ", align 4\n"; } else if (ctx->RETURN()) { hasReturn = true;