From 2d64c72aa5b20dad396459b46c39f7c3eb4ff251 Mon Sep 17 00:00:00 2001 From: Austin Sun Date: Fri, 20 May 2016 10:20:43 -0700 Subject: [PATCH] well --- ast_stmt.cc | 2 ++ irgen.cc | 20 +++++++++++++++++++- irgen.h | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ast_stmt.cc b/ast_stmt.cc index 2a2073b..9e2bbd2 100644 --- a/ast_stmt.cc +++ b/ast_stmt.cc @@ -321,6 +321,7 @@ llvm::Value * ReturnStmt::Emit(){ } llvm::Value * SwitchStmt::Emit(){ + /* llvm::Value * val; llvm::LLVMContext * context = irgen.GetContext(); llvm::Function * func = irgen.GetFunction(); @@ -341,6 +342,7 @@ llvm::Value * SwitchStmt::Emit(){ cases->Nth(i)->Emit(); irgen.GetBasicBlock()->getTerminator(); } + */ return NULL; } diff --git a/irgen.cc b/irgen.cc index c7cd03a..ef88d1d 100644 --- a/irgen.cc +++ b/irgen.cc @@ -11,7 +11,9 @@ IRGenerator::IRGenerator() : context(NULL), module(NULL), currentFunc(NULL), - currentBB(NULL) + currentBB(NULL), + currentFooter(NULL), + currentHeader(NULL) { } @@ -60,6 +62,22 @@ llvm::Type *IRGenerator::GetFloatType() const { return ty; } +void IRGenerator::SetFootBlock(llvm::BasicBlock *bb) { + currentFooter = bb; +} + +llvm::BasicBlock *IRGenerator::GetFootBlock() const { + return currentFooter; +} + +void IRGenerator::SetHeaderBlock(llvm::BasicBlock *bb){ + currentHeader = bb; +} + +llvm::BasicBlock *IRGenerator::GetHeaderBlock() const { + return currentHeader; +} + const char *IRGenerator::TargetLayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"; const char *IRGenerator::TargetTriple = "x86_64-redhat-linux-gnu"; diff --git a/irgen.h b/irgen.h index 195d9e0..177e7f5 100644 --- a/irgen.h +++ b/irgen.h @@ -32,6 +32,12 @@ class IRGenerator { llvm::BasicBlock *GetBasicBlock() const; void SetBasicBlock(llvm::BasicBlock *bb); + llvm::BasicBlock *GetFooterBlock() const; + void SetFooterBlock(llvm::BasicBlock *bb); + + llvm::BasicBlock *GetHeaderBlock() const; + void SetHeaderBlock(llvm::BasicBlock *bb); + llvm::Type *GetIntType() const; llvm::Type *GetBoolType() const; llvm::Type *GetFloatType() const; @@ -43,6 +49,8 @@ class IRGenerator { // track which function or basic block is active llvm::Function *currentFunc; llvm::BasicBlock *currentBB; + llvm::BasicBlock *currentFooter; + llvm::BasicBlock *currentHeader; static const char *TargetTriple; static const char *TargetLayout; -- 1.9.1