diff ir/irfunction.h @ 1509:e07f15c4ab4d

Automated merge with http://hg.dsource.org/projects/ldc
author Christian Kamm <kamm incasoftware de>
date Sat, 20 Jun 2009 19:12:04 +0200
parents e1e93343fc11
children
line wrap: on
line diff
--- a/ir/irfunction.h	Sat Jun 20 14:28:59 2009 +0200
+++ b/ir/irfunction.h	Sat Jun 20 19:12:04 2009 +0200
@@ -29,14 +29,58 @@
     IRTargetScope(Statement* s, EnclosingHandler* enclosinghandler, llvm::BasicBlock* continueTarget, llvm::BasicBlock* breakTarget);
 };
 
+struct FuncGen
+{
+    FuncGen();
+
+    // pushes a unique label scope of the given name
+    void pushUniqueLabelScope(const char* name);
+    // pops a label scope
+    void popLabelScope();
+
+    // gets the string under which the label's BB
+    // is stored in the labelToBB map.
+    // essentially prefixes ident by the strings in labelScopes
+    std::string getScopedLabelName(const char* ident);
+
+    // label to basic block lookup
+    typedef std::map<std::string, llvm::BasicBlock*> LabelToBBMap;
+    LabelToBBMap labelToBB;
+
+    // loop blocks
+    typedef std::vector<IRTargetScope> TargetScopeVec;
+    TargetScopeVec targetScopes;
+
+    // landing pads for try statements
+    IRLandingPad landingPadInfo;
+    llvm::BasicBlock* landingPad;
+
+private:
+    // prefix for labels and gotos
+    // used for allowing labels to be emitted twice
+    std::vector<std::string> labelScopes;
+
+    // next unique id stack
+    std::stack<int> nextUnique;
+};
+
 // represents a function
 struct IrFunction : IrBase
 {
+    // constructor
+    IrFunction(FuncDeclaration* fd);
+    
+    // annotations
+    void setNeverInline();
+    void setAlwaysInline();
+
     llvm::Function* func;
     llvm::Instruction* allocapoint;
     FuncDeclaration* decl;
     TypeFunction* type;
 
+    FuncGen* gen;
+
     bool queued;
     bool defined;
     
@@ -54,43 +98,6 @@
     llvm::Value* _argptr;
     
     llvm::DISubprogram diSubprogram;
-
-    // pushes a unique label scope of the given name
-    void pushUniqueLabelScope(const char* name);
-    // pops a label scope
-    void popLabelScope();
-
-    // gets the string under which the label's BB
-    // is stored in the labelToBB map.
-    // essentially prefixes ident by the strings in labelScopes
-    std::string getScopedLabelName(const char* ident);
-
-    // label to basic block lookup
-    typedef std::map<std::string, llvm::BasicBlock*> LabelToBBMap;
-    LabelToBBMap labelToBB;
-
-    // landing pads for try statements
-    IRLandingPad landingPadInfo;
-    llvm::BasicBlock* landingPad;
-
-    // loop blocks
-    typedef std::vector<IRTargetScope> TargetScopeVec;
-    TargetScopeVec targetScopes;
-
-    // constructor
-    IrFunction(FuncDeclaration* fd);
-
-    // annotations
-    void setNeverInline();
-    void setAlwaysInline();
-
-private:
-    // prefix for labels and gotos
-    // used for allowing labels to be emitted twice
-    std::vector<std::string> labelScopes;
-
-    // next unique id stack
-    std::stack<int> nextUnique;
 };
 
 #endif