diff lphobos/object.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children 2841234d2aea
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/object.d	Sat Sep 01 21:43:27 2007 +0200
@@ -0,0 +1,164 @@
+
+// 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;
+
+extern (C)
+{   int printf(char *, ...);
+}
+
+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);
+}
+
+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
+    void *deallocator;
+    OffsetTypeInfo[] offTi;
+}
+
+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();
+}
+
+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;
+}
+
+// Recoverable errors
+
+class Exception : Object
+{
+    char[] msg;
+
+    this(char[] msg);
+    void print();
+    char[] toString();
+}
+
+// Non-recoverable errors
+
+class Error : Exception
+{
+    Error next;
+
+    this(char[] msg);
+    this(char[] msg, Error next);
+}
+