Mercurial > projects > ldc
view lphobos/object.d @ 715:30b42a283c8e
Removed TypeOpaque from DMD.
Changed runtime functions taking opaque[] to void[].
Implemented proper type painting, to avoid "resizing" array casts in runtime calls that previously took opaque[].
Implemented dynamic arrays as first class types, this implements proper ABI for these types on x86.
Added dwarf region end after call to assert function, fixes some problems with llvm not allowing this to be missing.
Reverted change to WithStatement from rev [704] it breaks MiniD, mini/with2.d needs to be fixed some other way...
Fixed tango bug 1339 in runtime, problem with _adReverseChar on invalid UTF-8.
Disabled .bc generation in the compiler runtime part, genobj.d triggers some llvm bug when using debug info. the .o seems to work fine.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:55:33 +0200 |
parents | 88e23f8c2354 |
children |
line wrap: on
line source
// Implementation is in internal\object.d module object; //alias bit bool; alias bool bit; alias typeof(int.sizeof) size_t; alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; alias size_t hash_t; alias char[] string; alias wchar[] wstring; alias dchar[] dstring; extern (C) { int printf(char *, ...); void trace_term(); } class Object { void print(); char[] toString(); hash_t toHash(); int opCmp(Object o); int opEquals(Object o); final void notifyRegister(void delegate(Object) dg); final void notifyUnRegister(void delegate(Object) dg); static Object factory(char[] classname); } struct Interface { ClassInfo classinfo; void *[] vtbl; int 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 void *deallocator; OffsetTypeInfo[] offTi; void* defaultConstructor; // default Constructor static ClassInfo find(char[] classname); Object create(); } struct OffsetTypeInfo { size_t offset; TypeInfo ti; } class TypeInfo { hash_t getHash(void *p); int 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(); } pragma(no_typeinfo) 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 TypeInfo_Const : TypeInfo { TypeInfo next; } class TypeInfo_Invariant : TypeInfo_Const { } class ModuleInfo { char[] name; ModuleInfo[] importedModules; ClassInfo[] localClasses; uint flags; // initialization state void function() ctor; void function() dtor; void function() unitTest; void* xgetMembers; void function() ictor; // Return collection of all modules in the program. static int opApply(int delegate(ref ModuleInfo)); } struct ModuleReference { ModuleReference* next; ModuleInfo mod; } extern(C) extern ModuleReference* _Dmodule_ref; // Recoverable errors class Exception : Object { string msg; this(string msg); override void print(); override string toString(); } // Non-recoverable errors class Error : Exception { Error next; this(string msg); this(string msg, Error next); }