Mercurial > projects > ldc
view ir/irstruct.h @ 275:665b81613475 trunk
[svn r296] Removed: the 'suite' dir, it never took off!
Fixed: foreach statement, key-type checks were buggy.
Fixed: setting LLVMDC versions on the command line is now an error.
Fixed: array compare runtime had incorrect param attrs on call.
Fixed: index expressions on dynamic array slices w/o storage was broken.
Fixed: scope classes had incorrect finalization in some cases.
Fixed: when outputting !ClassInfoS !OffsetTypeInfoS, static class members were trying to be included, crashing the compiler.
Fixed: calling LLVMDC with -inline but not any -O option caused assertion failure.
Changed: the runtime now uses a single interface to "get" to !TypeInfoS, part of eliminating duplicate !TypeInfo codegen.
author | lindquist |
---|---|
date | Thu, 19 Jun 2008 17:30:32 +0200 |
parents | e3355ce5444b |
children | 7ade5e035beb |
line wrap: on
line source
#ifndef LLVMDC_IR_IRSTRUCT_H #define LLVMDC_IR_IRSTRUCT_H #include "ir/ir.h" #include <vector> #include <map> struct IrInterface : IrBase { BaseClass* base; ClassDeclaration* decl; #if OPAQUE_VTBLS const LLArrayType* vtblTy; LLConstantArray* vtblInit; #else const LLStructType* vtblTy; LLConstantStruct* vtblInit; #endif LLGlobalVariable* vtbl; const LLStructType* infoTy; LLConstantStruct* infoInit; LLConstant* info; int index; #if OPAQUE_VTBLS IrInterface(BaseClass* b, const LLArrayType* vt); #else IrInterface(BaseClass* b, const LLStructType* vt); #endif ~IrInterface(); }; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // represents a struct or class struct IrStruct : IrBase { struct Offset { VarDeclaration* var; const LLType* type; LLConstant* init; Offset(VarDeclaration* v, const LLType* ty) : var(v), type(ty), init(NULL) {} }; typedef std::multimap<unsigned, Offset> OffsetMap; typedef std::vector<VarDeclaration*> VarDeclVector; typedef std::map<ClassDeclaration*, IrInterface*> InterfaceMap; typedef InterfaceMap::iterator InterfaceMapIter; typedef std::vector<IrInterface*> InterfaceVector; typedef InterfaceVector::iterator InterfaceVectorIter; public: IrStruct(Type*); virtual ~IrStruct(); Type* type; llvm::PATypeHolder recty; OffsetMap offsets; VarDeclVector defaultFields; InterfaceMap interfaceMap; InterfaceVector interfaceVec; const llvm::ArrayType* interfaceInfosTy; LLGlobalVariable* interfaceInfos; bool defined; bool constinited; LLGlobalVariable* vtbl; #if OPAQUE_VTBLS LLConstant* constVtbl; #else LLConstantStruct* constVtbl; #endif LLGlobalVariable* init; LLConstant* constInit; LLGlobalVariable* classInfo; LLConstant* constClassInfo; bool hasUnions; DUnion* dunion; bool classDeclared; bool classDefined; LLGlobalVariable* dwarfComposite; }; #endif