Mercurial > projects > ldc
diff ir/irtypeclass.h @ 1228:79758fd2f48a
Added Doxygen file.
Completely seperated type and symbol generation. Should fix a lot of bugs, but is not yet 100% complete.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Wed, 15 Apr 2009 20:06:25 +0200 |
parents | |
children | e67c85d6e680 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ir/irtypeclass.h Wed Apr 15 20:06:25 2009 +0200 @@ -0,0 +1,65 @@ +#ifndef __LDC_IR_IRTYPECLASS_H__ +#define __LDC_IR_IRTYPECLASS_H__ + +#include "ir/irtypestruct.h" + +/// +class IrTypeClass : public IrTypeAggr +{ +public: + /// + IrTypeClass(ClassDeclaration* cd); + + /// + virtual IrTypeClass* isClass() { return this; } + + /// + const llvm::Type* buildType(); + + /// + const llvm::Type* getVtbl() { return vtbl_pa.get(); } + + /// + const llvm::Type* get(); + + /// Get index to interface implementation. + /// Returns the index of a specific interface implementation in this + /// class or ~0 if not found. + size_t getInterfaceIndex(ClassDeclaration* inter); + + /// Returns the total number of pointers in the vtable. + unsigned getVtblSize() { return vtbl_size; } + +protected: + /// + ClassDeclaration* cd; + /// + TypeClass* tc; + + /// + llvm::PATypeHolder vtbl_pa; + + /// Number of pointers in vtable. + unsigned vtbl_size; + + /// std::map type mapping ClassDeclaration* to size_t. + typedef std::map<ClassDeclaration*, size_t> ClassIndexMap; + + /// Map for mapping the index of a specific interface implementation + /// in this class to it's ClassDeclaration*. + ClassIndexMap interfaceMap; + + ////////////////////////////////////////////////////////////////////////// + + /// + const llvm::Type* buildVtblType(Type* first, Array* vtbl_array); + + /// + void addBaseClassData( + std::vector<const llvm::Type*>& defaultTypes, + ClassDeclaration* base, + size_t& offset, + size_t& field_index); +}; + +#endif