Mercurial > projects > ldc
annotate lphobos/object.d @ 566:68d7df3f9b05
Added some sanity checks for target detection.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Sun, 31 Aug 2008 18:51:14 +0200 |
parents | 373489eeaf90 |
children | 88e23f8c2354 |
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 | |
84 class TypeInfo_Typedef : TypeInfo | |
85 { | |
86 TypeInfo base; | |
87 char[] name; | |
88 void[] m_init; | |
89 } | |
90 | |
91 class TypeInfo_Enum : TypeInfo_Typedef | |
92 { | |
93 } | |
94 | |
95 class TypeInfo_Pointer : TypeInfo | |
96 { | |
97 TypeInfo m_next; | |
98 } | |
99 | |
100 class TypeInfo_Array : TypeInfo | |
101 { | |
102 TypeInfo value; | |
103 } | |
104 | |
105 class TypeInfo_StaticArray : TypeInfo | |
106 { | |
107 TypeInfo value; | |
108 size_t len; | |
109 } | |
110 | |
111 class TypeInfo_AssociativeArray : TypeInfo | |
112 { | |
113 TypeInfo value; | |
114 TypeInfo key; | |
115 } | |
116 | |
117 class TypeInfo_Function : TypeInfo | |
118 { | |
119 TypeInfo next; | |
120 } | |
121 | |
122 class TypeInfo_Delegate : TypeInfo | |
123 { | |
124 TypeInfo next; | |
125 } | |
126 | |
127 class TypeInfo_Class : TypeInfo | |
128 { | |
129 ClassInfo info; | |
130 } | |
131 | |
132 class TypeInfo_Interface : TypeInfo | |
133 { | |
134 ClassInfo info; | |
135 } | |
136 | |
137 class TypeInfo_Struct : TypeInfo | |
138 { | |
139 char[] name; | |
140 void[] m_init; | |
141 | |
142 uint function(void*) xtoHash; | |
143 int function(void*,void*) xopEquals; | |
144 int function(void*,void*) xopCmp; | |
145 char[] function(void*) xtoString; | |
146 | |
147 uint m_flags; | |
148 } | |
149 | |
150 class TypeInfo_Tuple : TypeInfo | |
151 { | |
152 TypeInfo[] elements; | |
153 } | |
154 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
155 class TypeInfo_Const : TypeInfo |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
156 { |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
157 TypeInfo next; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
158 } |
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 class TypeInfo_Invariant : TypeInfo_Const |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
161 { |
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 |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
164 class ModuleInfo |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
165 { |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
166 char[] name; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
167 ModuleInfo[] importedModules; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
168 ClassInfo[] localClasses; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
169 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
170 uint flags; // initialization state |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
171 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
172 void function() ctor; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
173 void function() dtor; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
174 void function() unitTest; |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
175 void* xgetMembers; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
176 void function() ictor; |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
177 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
178 // 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
|
179 static int opApply(int delegate(ref ModuleInfo)); |
116
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
180 } |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
181 |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
182 struct ModuleReference { |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
183 ModuleReference* next; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
184 ModuleInfo mod; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
185 } |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
186 extern(C) extern ModuleReference* _Dmodule_ref; |
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
116
diff
changeset
|
187 |
1 | 188 // Recoverable errors |
189 | |
190 class Exception : Object | |
191 { | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
192 string msg; |
1 | 193 |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
194 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
195 override void print(); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
196 override string toString(); |
1 | 197 } |
198 | |
199 // Non-recoverable errors | |
200 | |
201 class Error : Exception | |
202 { | |
203 Error next; | |
204 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
205 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
206 this(string msg, Error next); |
1 | 207 } |