Mercurial > projects > ldc
diff ir/irtypeclass.h @ 1230:e67c85d6e680
Completed interface implementation. Hopefully that's it for now..
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Thu, 16 Apr 2009 13:18:56 +0200 |
parents | 79758fd2f48a |
children | 465a77c904d4 |
line wrap: on
line diff
--- a/ir/irtypeclass.h Thu Apr 16 11:01:49 2009 +0200 +++ b/ir/irtypeclass.h Thu Apr 16 13:18:56 2009 +0200 @@ -17,10 +17,10 @@ const llvm::Type* buildType(); /// - const llvm::Type* getVtbl() { return vtbl_pa.get(); } + const llvm::Type* get(); - /// - const llvm::Type* get(); + /// Returns the vtable type for this class. + const llvm::Type* getVtbl() { return vtbl_pa.get(); } /// Get index to interface implementation. /// Returns the index of a specific interface implementation in this @@ -30,28 +30,36 @@ /// Returns the total number of pointers in the vtable. unsigned getVtblSize() { return vtbl_size; } + /// Returns the number of interface implementations (vtables) in this + /// class. + unsigned getNumInterfaceVtbls() { return num_interface_vtbls; } + protected: /// ClassDeclaration* cd; /// TypeClass* tc; - /// + /// Type holder for the vtable type. llvm::PATypeHolder vtbl_pa; /// Number of pointers in vtable. unsigned vtbl_size; + /// Number of interface implementations (vtables) in this class. + unsigned num_interface_vtbls; + /// 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*. + /// in this class to its ClassDeclaration. ClassIndexMap interfaceMap; ////////////////////////////////////////////////////////////////////////// - /// + /// Builds a vtable type given the type of the first entry and an array + /// of all entries. const llvm::Type* buildVtblType(Type* first, Array* vtbl_array); ///