Mercurial > projects > ldc
annotate lphobos/object.d @ 837:331a176c1f4f
Removed error on naked, not fully complete, but I'll be doing more work on it during this Christmas, and some things do work.
Fixed taking delegate of final class method. see mini/delegate3.d.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 09 Dec 2008 14:07:30 +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 |