X-Git-Url: https://git.llucax.com/software/druntime.git/blobdiff_plain/1f3a9af059166187064490d1cae80bd11fb8737c..0edf44cfdbe2262d5c50bfa7368ba2692600babc:/import/object.di?ds=inline diff --git a/import/object.di b/import/object.di index 7400468..065af6b 100644 --- a/import/object.di +++ b/import/object.di @@ -1,179 +1,245 @@ -module object; - -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; - -alias char[] string; -alias wchar[] wstring; -alias dchar[] dstring; - -class Object -{ - string 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 - string name; // class name - void*[] vtbl; // virtual function pointer table - Interface[] interfaces; - ClassInfo base; - void* destructor; - void(*classInvariant)(Object); - uint flags; - // 1: // is IUnknown or is derived from IUnknown - // 2: // has no possible pointers into GC memory - // 4: // has offTi[] member - // 8: // has constructors - void* deallocator; - OffsetTypeInfo[] offTi; - void* defaultConstructor; - - static ClassInfo find(in char[] classname); - Object create(); -} - -struct OffsetTypeInfo -{ - size_t offset; - TypeInfo ti; -} - -class TypeInfo -{ - hash_t getHash(in void* p); - equals_t equals(in void* p1, in void* p2); - int compare(in void* p1, in 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; - string 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 -{ - string name; - void[] m_init; - - uint function(in void*) xtoHash; - equals_t function(in void*, in void*) xopEquals; - int function(in void*, in void*) xopCmp; - string function(in void*) xtoString; - - uint m_flags; - -} - -class TypeInfo_Tuple : TypeInfo -{ - TypeInfo[] elements; -} - -class ModuleInfo -{ - string name; - ModuleInfo[] importedModules; - ClassInfo[] localClasses; - uint flags; - - void function() ctor; - void function() dtor; - void function() unitTest; - - static int opApply( int delegate( inout ModuleInfo ) ); -} - -class Exception : Object -{ - interface TraceInfo - { - int opApply( int delegate( inout char[] ) ); - string toString(); - } - - string msg; - string file; - size_t line; - TraceInfo info; - Exception next; - - this(string msg, Exception next = null); - this(string msg, string file, size_t line, Exception next = null); - override string toString(); -} +module object; + +alias typeof(int.sizeof) size_t; +alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; + +alias size_t hash_t; +alias bool equals_t; + +alias invariant(char)[] string; +alias invariant(wchar)[] wstring; +alias invariant(dchar)[] dstring; + +class Object +{ + string toString(); + hash_t toHash(); + int opCmp(Object o); + equals_t opEquals(Object o); + + interface Monitor + { + void lock(); + void unlock(); + } + + static Object factory(string classname); +} + +struct Interface +{ + ClassInfo classinfo; + void*[] vtbl; + ptrdiff_t offset; // offset to Interface 'this' from Object 'this' +} + +class ClassInfo : Object +{ + byte[] init; // class static initializer + string name; // class name + void*[] vtbl; // virtual function pointer table + Interface[] interfaces; + ClassInfo base; + void* destructor; + void(*classInvariant)(Object); + uint flags; + // 1: // is IUnknown or is derived from IUnknown + // 2: // has no possible pointers into GC memory + // 4: // has offTi[] member + // 8: // has constructors + // 16: // has xgetMembers member + void* deallocator; + OffsetTypeInfo[] offTi; + void* defaultConstructor; + const(MemberInfo[]) function(string) xgetMembers; + + static ClassInfo find(in char[] classname); + Object create(); + const(MemberInfo[]) getMembers(in char[] classname); +} + +struct OffsetTypeInfo +{ + size_t offset; + TypeInfo ti; +} + +class TypeInfo +{ + hash_t getHash(in void* p); + equals_t equals(in void* p1, in void* p2); + int compare(in void* p1, in 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(); + void destroy(void* p); + void postblit(void* p); +} + +class TypeInfo_Typedef : TypeInfo +{ + TypeInfo base; + string 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 +{ + string name; + void[] m_init; + + uint function(in void*) xtoHash; + equals_t function(in void*, in void*) xopEquals; + int function(in void*, in void*) xopCmp; + string function(in void*) xtoString; + + uint m_flags; + + const(MemberInfo[]) function(in char[]) xgetMembers; + void function(void*) xdtor; + void function(void*) xpostblit; +} + +class TypeInfo_Tuple : TypeInfo +{ + TypeInfo[] elements; +} + +class TypeInfo_Const : TypeInfo +{ + TypeInfo next; +} + +class TypeInfo_Invariant : TypeInfo_Const +{ + +} + +abstract class MemberInfo +{ + string name(); +} + +class MemberInfo_field : MemberInfo +{ + this(string name, TypeInfo ti, size_t offset); + + override string name(); + TypeInfo typeInfo(); + size_t offset(); +} + +class MemberInfo_function : MemberInfo +{ + enum + { + Virtual = 1, + Member = 2, + Static = 4, + } + + this(string name, TypeInfo ti, void* fp, uint flags); + + override string name(); + TypeInfo typeInfo(); + void* fp(); + uint flags(); +} + +class ModuleInfo +{ + string name; + ModuleInfo[] importedModules; + ClassInfo[] localClasses; + uint flags; + + void function() ctor; + void function() dtor; + void function() unitTest; + + static int opApply(int delegate(inout ModuleInfo)); +} + +class Throwable : Object +{ + interface TraceInfo + { + int opApply(int delegate(inout char[])); + string toString(); + } + + string msg; + string file; + size_t line; + TraceInfo info; + Throwable next; + + this(string msg, Throwable next = null); + this(string msg, string file, size_t line, Throwable next = null); + override string toString(); +} + + +class Exception : Throwable +{ + this(string msg, Throwable next = null); + this(string msg, string file, size_t line, Throwable next = null); +} + + +class Error : Throwable +{ + this(string msg, Throwable next = null); + this(string msg, string file, size_t line, Throwable next = null); +}