Mercurial > projects > ldc
diff ir/irfunction.h @ 136:0e28624814e8 trunk
[svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
author | lindquist |
---|---|
date | Thu, 17 Jan 2008 03:15:12 +0100 |
parents | |
children | 8f704cb9969b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ir/irfunction.h Thu Jan 17 03:15:12 2008 +0100 @@ -0,0 +1,44 @@ +#ifndef LLVMDC_IR_IRFUNCTION_H +#define LLVMDC_IR_IRFUNCTION_H + +#include "ir/ir.h" + +#include <vector> + +// represents a finally block +struct IrFinally +{ + llvm::BasicBlock* bb; + llvm::BasicBlock* retbb; + + IrFinally(); + IrFinally(llvm::BasicBlock* b, llvm::BasicBlock* rb); +}; + +// represents a function +struct IrFunction : IrBase +{ + llvm::Function* func; + llvm::Instruction* allocapoint; + FuncDeclaration* decl; + TypeFunction* type; + + // finally blocks + typedef std::vector<IrFinally> FinallyVec; + FinallyVec finallys; + llvm::Value* finallyretval; + + bool queued; + bool defined; + llvm::Value* retArg; + llvm::Value* thisVar; + llvm::Value* nestedVar; + llvm::Value* _arguments; + llvm::Value* _argptr; + llvm::Constant* dwarfSubProg; + + IrFunction(FuncDeclaration* fd); + virtual ~IrFunction(); +}; + +#endif