Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

79 lines (58 sloc) 2.08 KB
#include "ir/irtypestruct.h"
#include <llvm/DerivedTypes.h>
class IrTypeClass : public IrTypeAggr
IrTypeClass(ClassDeclaration* cd);
virtual IrTypeClass* isClass() { return this; }
llvm::Type* buildType();
llvm::Type* get();
/// Returns the vtable type for this class.
llvm::Type* getVtbl() { return vtbl_type; }
/// 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; }
/// Returns the number of interface implementations (vtables) in this
/// class.
unsigned getNumInterfaceVtbls() { return num_interface_vtbls; }
ClassDeclaration* cd;
TypeClass* tc;
/// Vtable type.
llvm::StructType *vtbl_type;
/// 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 its ClassDeclaration.
ClassIndexMap interfaceMap;
/// Builds a vtable type given the type of the first entry and an array
/// of all entries.
std::vector<llvm::Type*> buildVtblType(Type* first, Array* vtbl_array);
void addBaseClassData(
std::vector<llvm::Type*>& defaultTypes,
ClassDeclaration* base,
size_t& offset,
size_t& field_index);
/// Adds the interface and all it's base interface to the interface
/// to index map.
void addInterfaceToMap(ClassDeclaration* inter, size_t index);
Jump to Line
Something went wrong with that request. Please try again.