Mercurial > projects > ldc
annotate lphobos/object.d @ 323:0d52412d5b1a trunk
[svn r344] Fixed some very minor issues with the usage listing when calling llvmdc with no arguments.
Changed the way moduleinfo is registered to use the same approach as DMD, this eliminates the need for correct linking order and should make the way for using a natively compiled runtime library. This should speed up linking tremendously and should now be possible.
Fixed the llvm.used array to only be emitted if really necessary.
author | lindquist |
---|---|
date | Wed, 09 Jul 2008 23:43:51 +0200 |
parents | fd7ad91fd713 |
children | 373489eeaf90 |
rev | line source |
---|---|
1 | 1 |
2 // Implementation is in internal\object.d | |
3 | |
4 module object; | |
5 | |
6 //alias bit bool; | |
7 alias bool bit; | |
8 | |
9 alias typeof(int.sizeof) size_t; | |
10 alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; | |
11 alias size_t hash_t; | |
12 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
13 alias char[] string; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
14 alias wchar[] wstring; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
15 alias dchar[] dstring; |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
16 |
1 | 17 extern (C) |
18 { int printf(char *, ...); | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
19 void trace_term(); |
1 | 20 } |
21 | |
22 class Object | |
23 { | |
24 void print(); | |
25 char[] toString(); | |
26 hash_t toHash(); | |
27 int opCmp(Object o); | |
28 int opEquals(Object o); | |
29 | |
30 final void notifyRegister(void delegate(Object) dg); | |
31 final void notifyUnRegister(void delegate(Object) dg); | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
32 |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
33 static Object factory(char[] classname); |
1 | 34 } |
35 | |
36 struct Interface | |
37 { | |
38 ClassInfo classinfo; | |
39 void *[] vtbl; | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
40 int offset; // offset to Interface 'this' from Object 'this' |
1 | 41 } |
42 | |
43 class ClassInfo : Object | |
44 { | |
45 byte[] init; // class static initializer | |
46 char[] name; // class name | |
47 void *[] vtbl; // virtual function pointer table | |
48 Interface[] interfaces; | |
49 ClassInfo base; | |
50 void *destructor; | |
51 void (*classInvariant)(Object); | |
52 uint flags; | |
53 // 1: // IUnknown | |
54 // 2: // has no possible pointers into GC memory | |
55 // 4: // has offTi[] member | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
56 // 8: // has constructors |
1 | 57 void *deallocator; |
58 OffsetTypeInfo[] offTi; | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
59 void* defaultConstructor; // default Constructor |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
60 |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
61 static ClassInfo find(char[] classname); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
62 Object create(); |
1 | 63 } |
64 | |
65 struct OffsetTypeInfo | |
66 { | |
67 size_t offset; | |
68 TypeInfo ti; | |
69 } | |
70 | |
71 class TypeInfo | |
72 { | |
73 hash_t getHash(void *p); | |
74 int equals(void *p1, void *p2); | |
75 int compare(void *p1, void *p2); | |
76 size_t tsize(); | |
77 void swap(void *p1, void *p2); | |
78 TypeInfo next(); | |
79 void[] init(); | |
80 uint flags(); | |
81 // 1: // has possible pointers into GC memory | |
82 OffsetTypeInfo[] offTi(); | |
83 } | |
84 | |
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; |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
176 |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
177 // Return collection of all modules in the program. |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
178 static ModuleInfo[] modules(); |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
179 } |
fd7ad91fd713
[svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents:
31
diff
changeset
|
180 |
1 | 181 // Recoverable errors |
182 | |
183 class Exception : Object | |
184 { | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
185 string msg; |
1 | 186 |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
187 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
188 override void print(); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
189 override string toString(); |
1 | 190 } |
191 | |
192 // Non-recoverable errors | |
193 | |
194 class Error : Exception | |
195 { | |
196 Error next; | |
197 | |
31
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
198 this(string msg); |
2841234d2aea
[svn r35] * Attributes on struct fields/methods now work
lindquist
parents:
1
diff
changeset
|
199 this(string msg, Error next); |
1 | 200 } |
201 |