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