Mercurial > projects > ldc
view tests/testincludes/object.di @ 1561:8912aabdb26e
MDNode left the Context!
The changes are in #if LLVM_REV >= 77733 to make the dstress bot happy.
author | Benjamin Kramer <benny.kra@gmail.com> |
---|---|
date | Fri, 31 Jul 2009 23:53:06 +0200 |
parents | 4100c49b753f |
children |
line wrap: on
line source
// This is a modification of tango/object.di that includes // aliases for string, wstring, dstring and Exception. // This is because dstress expects phobos, which provides // these aliases. module object; public import std.compat; alias typeof(int.sizeof) size_t; alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; alias size_t hash_t; alias int equals_t; class Object { char[] toString(); hash_t toHash(); int opCmp(Object o); equals_t opEquals(Object o); interface Monitor { void lock(); void unlock(); } } struct Interface { ClassInfo classinfo; void*[] vtbl; ptrdiff_t offset; // offset to Interface 'this' from Object 'this' } class ClassInfo : Object { byte[] init; // class static initializer char[] name; // class name void*[] vtbl; // virtual function pointer table Interface[] interfaces; ClassInfo base; void* destructor; void(*classInvariant)(Object); uint flags; // 1: // IUnknown // 2: // has no possible pointers into GC memory // 4: // has offTi[] member // 8: // has constructors // 32: // has typeinfo void* deallocator; OffsetTypeInfo[] offTi; void* defaultConstructor; TypeInfo typeinfo; static ClassInfo find(char[] classname); Object create(); } struct OffsetTypeInfo { size_t offset; TypeInfo ti; } class TypeInfo { hash_t getHash(void *p); equals_t equals(void *p1, void *p2); int compare(void *p1, void *p2); size_t tsize(); void swap(void *p1, void *p2); TypeInfo next(); void[] init(); uint flags(); // 1: // has possible pointers into GC memory OffsetTypeInfo[] offTi(); } class TypeInfo_Typedef : TypeInfo { TypeInfo base; char[] name; void[] m_init; } class TypeInfo_Enum : TypeInfo_Typedef { } class TypeInfo_Pointer : TypeInfo { TypeInfo m_next; } class TypeInfo_Array : TypeInfo { TypeInfo value; } class TypeInfo_StaticArray : TypeInfo { TypeInfo value; size_t len; } class TypeInfo_AssociativeArray : TypeInfo { TypeInfo value; TypeInfo key; } class TypeInfo_Function : TypeInfo { TypeInfo next; } class TypeInfo_Delegate : TypeInfo { TypeInfo next; } class TypeInfo_Class : TypeInfo { ClassInfo info; } class TypeInfo_Interface : TypeInfo { ClassInfo info; } class TypeInfo_Struct : TypeInfo { char[] name; void[] m_init; uint function(void*) xtoHash; int function(void*,void*) xopEquals; int function(void*,void*) xopCmp; char[] function(void*) xtoString; uint m_flags; } class TypeInfo_Tuple : TypeInfo { TypeInfo[] elements; } class ModuleInfo { char[] name; ModuleInfo[] importedModules; ClassInfo[] localClasses; uint flags; void function() ctor; void function() dtor; void function() unitTest; void* xgetMembers; void function() ictor; static int opApply( int delegate( inout ModuleInfo ) ); } class Exception : Object { struct FrameInfo{ long line; ptrdiff_t iframe; ptrdiff_t offset; size_t address; char[] file; char[] func; char[256] charBuf; void writeOut(void delegate(char[])sink); } interface TraceInfo { int opApply( int delegate( ref FrameInfo fInfo) ); } char[] msg; char[] file; size_t line; // long would be better TraceInfo info; Exception next; this(char[] msg, char[] file, long line, Exception next, TraceInfo info ); this(char[] msg, Exception next = null); this(char[] msg, char[] file, long line, Exception next = null); char[] toString(); void writeOut(void delegate(char[]) sink); }