From 15c699e5111dfd05138717267837364b9c4ec7e8 Mon Sep 17 00:00:00 2001 From: mimose Date: Tue, 10 Jan 2023 10:03:46 +0800 Subject: [PATCH] Set the actual NumElements of ArrayType. --- Chapter06/tinylang/lib/CodeGen/CGModule.cpp | 3 +++ Chapter07/tinylang/lib/CodeGen/CGModule.cpp | 3 +++ Chapter08/tinylang/lib/CodeGen/CGModule.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/Chapter06/tinylang/lib/CodeGen/CGModule.cpp b/Chapter06/tinylang/lib/CodeGen/CGModule.cpp index 4ea5561..496b80c 100644 --- a/Chapter06/tinylang/lib/CodeGen/CGModule.cpp +++ b/Chapter06/tinylang/lib/CodeGen/CGModule.cpp @@ -41,6 +41,9 @@ llvm::Type *CGModule::convertType(TypeDeclaration *Ty) { llvm::Type *Component = convertType(ArrayTy->getType()); Expr *Nums = ArrayTy->getNums(); uint64_t NumElements = 5; // TODO Eval Nums + if(auto *intergerExpr = llvm::dyn_cast(Nums)){ + NumElements = intergerExpr->getValue().getExtValue(); + } llvm::Type *T = llvm::ArrayType::get(Component, NumElements); return TypeCache[Ty] = T; diff --git a/Chapter07/tinylang/lib/CodeGen/CGModule.cpp b/Chapter07/tinylang/lib/CodeGen/CGModule.cpp index 9963d2c..f2f2673 100644 --- a/Chapter07/tinylang/lib/CodeGen/CGModule.cpp +++ b/Chapter07/tinylang/lib/CodeGen/CGModule.cpp @@ -43,6 +43,9 @@ llvm::Type *CGModule::convertType(TypeDeclaration *Ty) { llvm::Type *Component = convertType(ArrayTy->getType()); Expr *Nums = ArrayTy->getNums(); uint64_t NumElements = 5; // TODO Eval Nums + if(auto *intergerExpr = llvm::dyn_cast(Nums)){ + NumElements = intergerExpr->getValue().getExtValue(); + } llvm::Type *T = llvm::ArrayType::get(Component, NumElements); return TypeCache[Ty] = T; diff --git a/Chapter08/tinylang/lib/CodeGen/CGModule.cpp b/Chapter08/tinylang/lib/CodeGen/CGModule.cpp index 9963d2c..f2f2673 100644 --- a/Chapter08/tinylang/lib/CodeGen/CGModule.cpp +++ b/Chapter08/tinylang/lib/CodeGen/CGModule.cpp @@ -43,6 +43,9 @@ llvm::Type *CGModule::convertType(TypeDeclaration *Ty) { llvm::Type *Component = convertType(ArrayTy->getType()); Expr *Nums = ArrayTy->getNums(); uint64_t NumElements = 5; // TODO Eval Nums + if(auto *intergerExpr = llvm::dyn_cast(Nums)){ + NumElements = intergerExpr->getValue().getExtValue(); + } llvm::Type *T = llvm::ArrayType::get(Component, NumElements); return TypeCache[Ty] = T;