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