Mercurial > projects > ldc
annotate lphobos/object.d @ 822:43178a913a28
Removed PAGESIZE part of Tango patch, it works for me when the check is removed.
Updated Tango patch to latest Tango revision.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 02 Dec 2008 02:45:31 +0100 |
parents | 88e23f8c2354 |
children |
rev | line source |
---|---|
1 | 1 // Implementation is in internal\object.d |
2 | |
3 module object; | |
4 | |
5 //alias bit bool; | |
6 alias bool bit; | |
7 | |
8 alias typeof(int.sizeof) size_t; | |
9 alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; | |
10 alias size_t hash_t; | |
11 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
12 alias char[] string; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
13 alias wchar[] wstring; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
14 alias dchar[] dstring; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
15 |
1 | 16 extern (C) |
17 { int printf(char *, ...); | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
18 void trace_term(); |
1 | 19 } |
20 | |
21 class Object | |
22 { | |
23 void print(); | |
24 char[] toString(); | |
25 hash_t toHash(); | |
26 int opCmp(Object o); | |
27 int opEquals(Object o); | |
28 | |
29 final void notifyRegister(void delegate(Object) dg); | |
30 final void notifyUnRegister(void delegate(Object) dg); | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
31 |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
32 static Object factory(char[] classname); |
1 | 33 } |
34 | |
35 struct Interface | |
36 { | |
37 ClassInfo classinfo; | |
38 void *[] vtbl; | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
39 int offset; // offset to Interface 'this' from Object 'this' |
1 | 40 } |
41 | |
42 class ClassInfo : Object | |
43 { | |
44 byte[] init; // class static initializer | |
45 char[] name; // class name | |
46 void *[] vtbl; // virtual function pointer table | |
47 Interface[] interfaces; | |
48 ClassInfo base; | |
49 void *destructor; | |
50 void (*classInvariant)(Object); | |
51 uint flags; | |
52 // 1: // IUnknown | |
53 // 2: // has no possible pointers into GC memory | |
54 // 4: // has offTi[] member | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
55 // 8: // has constructors |
1 | 56 void *deallocator; |
57 OffsetTypeInfo[] offTi; | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
58 void* defaultConstructor; // default Constructor |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
59 |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
60 static ClassInfo find(char[] classname); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
61 Object create(); |
1 | 62 } |
63 | |
64 struct OffsetTypeInfo | |
65 { | |
66 size_t offset; | |
67 TypeInfo ti; | |
68 } | |
69 | |
70 class TypeInfo | |
71 { | |
72 hash_t getHash(void *p); | |
73 int equals(void *p1, void *p2); | |
74 int compare(void *p1, void *p2); | |
75 size_t tsize(); | |
76 void swap(void *p1, void *p2); | |
77 TypeInfo next(); | |
78 void[] init(); | |
79 uint flags(); | |
80 // 1: // has possible pointers into GC memory | |
81 OffsetTypeInfo[] offTi(); | |
82 } | |
83 | |
662
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
473
diff
changeset
|
84 pragma(no_typeinfo) |
1 | 85 class TypeInfo_Typedef : TypeInfo |
86 { | |
87 TypeInfo base; | |
88 char[] name; | |
89 void[] m_init; | |
90 } | |
91 | |
92 class TypeInfo_Enum : TypeInfo_Typedef | |
93 { | |
94 } | |
95 | |
96 class TypeInfo_Pointer : TypeInfo | |
97 { | |
98 TypeInfo m_next; | |
99 } | |
100 | |
101 class TypeInfo_Array : TypeInfo | |
102 { | |
103 TypeInfo value; | |
104 } | |
105 | |
106 class TypeInfo_StaticArray : TypeInfo | |
107 { | |
108 TypeInfo value; | |
109 size_t len; | |
110 } | |
111 | |
112 class TypeInfo_AssociativeArray : TypeInfo | |
113 { | |
114 TypeInfo value; | |
115 TypeInfo key; | |
116 } | |
117 | |
118 class TypeInfo_Function : TypeInfo | |
119 { | |
120 TypeInfo next; | |
121 } | |
122 | |
123 class TypeInfo_Delegate : TypeInfo | |
124 { | |
125 TypeInfo next; | |
126 } | |
127 | |
128 class TypeInfo_Class : TypeInfo | |
129 { | |
130 ClassInfo info; | |
131 } | |
132 | |
133 class TypeInfo_Interface : TypeInfo | |
134 { | |
135 ClassInfo info; | |
136 } | |
137 | |
138 class TypeInfo_Struct : TypeInfo | |
139 { | |
140 char[] name; | |
141 void[] m_init; | |
142 | |
143 uint function(void*) xtoHash; | |
144 int function(void*,void*) xopEquals; | |
145 int function(void*,void*) xopCmp; | |
146 char[] function(void*) xtoString; | |
147 | |
148 uint m_flags; | |
149 } | |
150 | |
151 class TypeInfo_Tuple : TypeInfo | |
152 { | |
153 TypeInfo[] elements; | |
154 } | |
155 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
156 class TypeInfo_Const : TypeInfo |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
157 { |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
158 TypeInfo next; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
159 } |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
160 |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
161 class TypeInfo_Invariant : TypeInfo_Const |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
162 { |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
163 } |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
164 |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
165 class ModuleInfo |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
166 { |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
167 char[] name; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
168 ModuleInfo[] importedModules; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
169 ClassInfo[] localClasses; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
170 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
171 uint flags; // initialization state |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
172 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
173 void function() ctor; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
174 void function() dtor; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
175 void function() unitTest; |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
176 void* xgetMembers; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
177 void function() ictor; |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
178 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
179 // Return collection of all modules in the program. |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
180 static int opApply(int delegate(ref ModuleInfo)); |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
181 } |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
182 |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
183 struct ModuleReference { |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
184 ModuleReference* next; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
185 ModuleInfo mod; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
186 } |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
187 extern(C) extern ModuleReference* _Dmodule_ref; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
188 |
1 | 189 // Recoverable errors |
190 | |
191 class Exception : Object | |
192 { | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
193 string msg; |
1 | 194 |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
195 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
196 override void print(); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
197 override string toString(); |
1 | 198 } |
199 | |
200 // Non-recoverable errors | |
201 | |
202 class Error : Exception | |
203 { | |
204 Error next; | |
205 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
206 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
207 this(string msg, Error next); |
1 | 208 } |
662
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
473
diff
changeset
|
209 |