Mercurial > projects > ldc
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