deploy-20250820-3 #1

Merged
gh0s7 merged 352 commits from deploy-20250820-3 into master 2025-08-20 21:20:33 +08:00
Showing only changes of commit c68b031c01 - Show all commits

View File

@@ -146,7 +146,11 @@ std::any SysYIRGenerator::visitGlobalVarDecl(SysYParser::GlobalVarDeclContext *c
delete root; delete root;
} }
// 创建全局变量,并更新符号表 // 创建全局变量,并更新符号表
module->createGlobalValue(name, Type::getPointerType(type), dims, values); Type* variableType = type;
if (!dims.empty()) { // 如果有维度,说明是数组
variableType = buildArrayType(type, dims); // 构建完整的 ArrayType
}
module->createGlobalValue(name, Type::getPointerType(variableType), dims, values);
} }
return std::any(); return std::any();
} }
@@ -193,7 +197,7 @@ std::any SysYIRGenerator::visitVarDecl(SysYParser::VarDeclContext *ctx) {
// 对于数组alloca 的类型将是指针指向数组类型,例如 `int[2][3]*` // 对于数组alloca 的类型将是指针指向数组类型,例如 `int[2][3]*`
// 对于标量alloca 的类型将是指针指向标量类型,例如 `int*` // 对于标量alloca 的类型将是指针指向标量类型,例如 `int*`
AllocaInst* alloca = AllocaInst* alloca =
builder.createAllocaInst(Type::getPointerType(type), dims, name); builder.createAllocaInst(Type::getPointerType(variableType), dims, name);
if (varDef->initVal() != nullptr) { if (varDef->initVal() != nullptr) {
ValueCounter values; ValueCounter values;
@@ -1232,6 +1236,7 @@ auto SysYIRGenerator::visitLOrExp(SysYParser::LOrExpContext *ctx) -> std::any {
return std::any(); return std::any();
} }
// attention : 这里的type是数组元素的type
void Utils::tree2Array(Type *type, ArrayValueTree *root, void Utils::tree2Array(Type *type, ArrayValueTree *root,
const std::vector<Value *> &dims, unsigned numDims, const std::vector<Value *> &dims, unsigned numDims,
ValueCounter &result, IRBuilder *builder) { ValueCounter &result, IRBuilder *builder) {