]> git.llucax.com Git - software/druntime.git/blob - import/object.di
3301d27311a2ea317fc57aecc9b75ec253be1b8d
[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
27 struct Interface
28 {
29     ClassInfo   classinfo;
30     void*[]     vtbl;
31     ptrdiff_t   offset;   // offset to Interface 'this' from Object 'this'
32 }
33
34 class ClassInfo : Object
35 {
36     byte[]      init;   // class static initializer
37     string      name;   // class name
38     void*[]     vtbl;   // virtual function pointer table
39     Interface[] interfaces;
40     ClassInfo   base;
41     void*       destructor;
42     void(*classInvariant)(Object);
43     uint        flags;
44     //  1:      // is IUnknown or is derived from IUnknown
45     //  2:      // has no possible pointers into GC memory
46     //  4:      // has offTi[] member
47     //  8:      // has constructors
48     // 16:      // has xgetMembers member
49     void*       deallocator;
50     OffsetTypeInfo[] offTi;
51     void*       defaultConstructor;
52     const(MemberInfo[]) function(string) xgetMembers;
53
54     static ClassInfo find(in char[] classname);
55     Object create();
56     const(MemberInfo[]) getMembers(in char[] classname);
57 }
58
59 struct OffsetTypeInfo
60 {
61     size_t   offset;
62     TypeInfo ti;
63 }
64
65 class TypeInfo
66 {
67     hash_t   getHash(in void* p);
68     equals_t equals(in void* p1, in void* p2);
69     int      compare(in void* p1, in void* p2);
70     size_t   tsize();
71     void     swap(void* p1, void* p2);
72     TypeInfo next();
73     void[]   init();
74     uint     flags();
75     // 1:    // has possible pointers into GC memory
76     OffsetTypeInfo[] offTi();
77     void destroy(void* p);
78     void postblit(void* p);
79 }
80
81 class TypeInfo_Typedef : TypeInfo
82 {
83     TypeInfo base;
84     string   name;
85     void[]   m_init;
86 }
87
88 class TypeInfo_Enum : TypeInfo_Typedef
89 {
90
91 }
92
93 class TypeInfo_Pointer : TypeInfo
94 {
95     TypeInfo m_next;
96 }
97
98 class TypeInfo_Array : TypeInfo
99 {
100     TypeInfo value;
101 }
102
103 class TypeInfo_StaticArray : TypeInfo
104 {
105     TypeInfo value;
106     size_t   len;
107 }
108
109 class TypeInfo_AssociativeArray : TypeInfo
110 {
111     TypeInfo value;
112     TypeInfo key;
113 }
114
115 class TypeInfo_Function : TypeInfo
116 {
117     TypeInfo next;
118 }
119
120 class TypeInfo_Delegate : TypeInfo
121 {
122     TypeInfo next;
123 }
124
125 class TypeInfo_Class : TypeInfo
126 {
127     ClassInfo info;
128 }
129
130 class TypeInfo_Interface : TypeInfo
131 {
132     ClassInfo info;
133 }
134
135 class TypeInfo_Struct : TypeInfo
136 {
137     string name;
138     void[] m_init;
139
140     uint function(in void*)               xtoHash;
141     equals_t function(in void*, in void*) xopEquals;
142     int function(in void*, in void*)      xopCmp;
143     string function(in void*)             xtoString;
144
145     uint m_flags;
146
147     const(MemberInfo[]) function(in char[]) xgetMembers;
148     void function(void*)                    xdtor;
149     void function(void*)                    xpostblit;
150 }
151
152 class TypeInfo_Tuple : TypeInfo
153 {
154     TypeInfo[]  elements;
155 }
156
157 class TypeInfo_Const : TypeInfo
158 {
159     TypeInfo next;
160 }
161
162 class TypeInfo_Invariant : TypeInfo_Const
163 {
164
165 }
166
167 abstract class MemberInfo
168 {
169     string name();
170 }
171
172 class MemberInfo_field : MemberInfo
173 {
174     this(string name, TypeInfo ti, size_t offset);
175
176     override string name();
177     TypeInfo typeInfo();
178     size_t offset();
179 }
180
181 class MemberInfo_function : MemberInfo
182 {
183     enum
184     {
185         Virtual = 1,
186         Member  = 2,
187         Static  = 4,
188     }
189
190     this(string name, TypeInfo ti, void* fp, uint flags);
191
192     override string name();
193     TypeInfo typeInfo();
194     void* fp();
195     uint flags();
196 }
197
198 class ModuleInfo
199 {
200     string          name;
201     ModuleInfo[]    importedModules;
202     ClassInfo[]     localClasses;
203     uint            flags;
204
205     void function() ctor;
206     void function() dtor;
207     void function() unitTest;
208
209     static int opApply( int delegate( inout ModuleInfo ) );
210 }
211
212 class Exception : Object
213 {
214     interface TraceInfo
215     {
216         int opApply( int delegate(inout char[]) );
217         string toString();
218     }
219
220     string      msg;
221     string      file;
222     size_t      line;
223     TraceInfo   info;
224     Exception   next;
225
226     this(string msg, Exception next = null);
227     this(string msg, string file, size_t line, Exception next = null);
228     override string toString();
229 }
230
231
232 alias Exception Error;