]> git.llucax.com Git - software/druntime.git/blob - import/object.di
ff7ad8d988812e81d6e24fd16a581488e0a76826
[software/druntime.git] / import / object.di
1 module object;
2
3 alias typeof(int.sizeof)                    size_t;
4 alias typeof(cast(void*)0 - cast(void*)0)   ptrdiff_t;
5
6 alias size_t hash_t;
7 alias bool equals_t;
8
9 alias invariant(char)[]  string;
10 alias invariant(wchar)[] wstring;
11 alias invariant(dchar)[] dstring;
12
13 class Object
14 {
15     string   toString();
16     hash_t   toHash();
17     int      opCmp(Object o);
18     equals_t opEquals(Object o);
19
20     interface Monitor
21     {
22         void lock();
23         void unlock();
24     }
25
26     static Object factory(string classname);
27 }
28
29 struct Interface
30 {
31     ClassInfo   classinfo;
32     void*[]     vtbl;
33     ptrdiff_t   offset;   // offset to Interface 'this' from Object 'this'
34 }
35
36 class ClassInfo : Object
37 {
38     byte[]      init;   // class static initializer
39     string      name;   // class name
40     void*[]     vtbl;   // virtual function pointer table
41     Interface[] interfaces;
42     ClassInfo   base;
43     void*       destructor;
44     void(*classInvariant)(Object);
45     uint        flags;
46     //  1:      // is IUnknown or is derived from IUnknown
47     //  2:      // has no possible pointers into GC memory
48     //  4:      // has offTi[] member
49     //  8:      // has constructors
50     // 16:      // has xgetMembers member
51     void*       deallocator;
52     OffsetTypeInfo[] offTi;
53     void*       defaultConstructor;
54     const(MemberInfo[]) function(string) xgetMembers;
55
56     static ClassInfo find(in char[] classname);
57     Object create();
58     const(MemberInfo[]) getMembers(in char[] classname);
59 }
60
61 struct OffsetTypeInfo
62 {
63     size_t   offset;
64     TypeInfo ti;
65 }
66
67 class TypeInfo
68 {
69     hash_t   getHash(in void* p);
70     equals_t equals(in void* p1, in void* p2);
71     int      compare(in void* p1, in void* p2);
72     size_t   tsize();
73     void     swap(void* p1, void* p2);
74     TypeInfo next();
75     void[]   init();
76     uint     flags();
77     // 1:    // has possible pointers into GC memory
78     OffsetTypeInfo[] offTi();
79     void destroy(void* p);
80     void postblit(void* p);
81 }
82
83 class TypeInfo_Typedef : TypeInfo
84 {
85     TypeInfo base;
86     string   name;
87     void[]   m_init;
88 }
89
90 class TypeInfo_Enum : TypeInfo_Typedef
91 {
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     string name;
140     void[] m_init;
141
142     uint function(in void*)               xtoHash;
143     equals_t function(in void*, in void*) xopEquals;
144     int function(in void*, in void*)      xopCmp;
145     string function(in void*)             xtoString;
146
147     uint m_flags;
148
149     const(MemberInfo[]) function(in char[]) xgetMembers;
150     void function(void*)                    xdtor;
151     void function(void*)                    xpostblit;
152 }
153
154 class TypeInfo_Tuple : TypeInfo
155 {
156     TypeInfo[]  elements;
157 }
158
159 class TypeInfo_Const : TypeInfo
160 {
161     TypeInfo next;
162 }
163
164 class TypeInfo_Invariant : TypeInfo_Const
165 {
166
167 }
168
169 abstract class MemberInfo
170 {
171     string name();
172 }
173
174 class MemberInfo_field : MemberInfo
175 {
176     this(string name, TypeInfo ti, size_t offset);
177
178     override string name();
179     TypeInfo typeInfo();
180     size_t offset();
181 }
182
183 class MemberInfo_function : MemberInfo
184 {
185     enum
186     {
187         Virtual = 1,
188         Member  = 2,
189         Static  = 4,
190     }
191
192     this(string name, TypeInfo ti, void* fp, uint flags);
193
194     override string name();
195     TypeInfo typeInfo();
196     void* fp();
197     uint flags();
198 }
199
200 class ModuleInfo
201 {
202     string          name;
203     ModuleInfo[]    importedModules;
204     ClassInfo[]     localClasses;
205     uint            flags;
206
207     void function() ctor;
208     void function() dtor;
209     void function() unitTest;
210
211     static int opApply( int delegate( inout ModuleInfo ) );
212 }
213
214 class Exception : Object
215 {
216     interface TraceInfo
217     {
218         int opApply( int delegate(inout char[]) );
219         string toString();
220     }
221
222     string      msg;
223     string      file;
224     size_t      line;
225     TraceInfo   info;
226     Exception   next;
227
228     this(string msg, Exception next = null);
229     this(string msg, string file, size_t line, Exception next = null);
230     override string toString();
231 }
232
233
234 alias Exception Error;