Mercurial > projects > qtd
annotate d2/qtd/MOC.d @ 398:aa08a72d480a
Fixed construction of the ?--include-paths? generation argument in the build system.
Interestingly enough, it doesn't seem to have caused any problems so far.
author | David Nadlinger <code@klickverbot.at> |
---|---|
date | Sat, 15 Jan 2011 22:52:06 +0100 |
parents | a032df77b6ab |
children | e67ce7c21758 |
rev | line source |
---|---|
344 | 1 module qtd.MOC; |
288 | 2 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
3 import |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
4 std.typetuple, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
5 std.traits, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
6 std.typetuple, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
7 std.conv, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
8 qt.QGlobal, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
9 qtd.Signal, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
10 qtd.Marshal, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
11 qtd.Array, |
356 | 12 qtd.String, |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
13 qtd.meta.Compiletime, |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
14 qtd.ctfe.Format; |
288 | 15 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
16 import qt.core.QString; |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
17 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
18 private: |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
19 |
288 | 20 /** |
21 Utils. | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
22 */ |
288 | 23 int lastIndexOf(T)(T[] haystack, T[] needle, int from = -1) |
24 { | |
25 auto l = haystack.length; | |
26 auto ol = needle.length; | |
27 int delta = l - ol; | |
28 if (from < 0) | |
29 from = delta; | |
30 if (from < 0 || from > l) | |
31 return -1; | |
32 if (from > delta) | |
33 from = delta; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
34 |
288 | 35 while(from >= 0) |
36 { | |
37 if (haystack[from..from+ol] == needle) | |
38 return from; | |
39 from--; | |
40 } | |
41 return -1; | |
42 } | |
43 | |
44 string replicate(int n, char value) | |
45 { | |
46 char[] ret = "".dup; | |
47 if (n > 0) | |
48 { | |
49 // ret = newArray!char(n); | |
50 for(int i = 0; i < n; i++) | |
51 ret ~= value; | |
52 } | |
53 return cast(string)ret; | |
54 } | |
55 | |
56 /** | |
57 CTFE MOC port. | |
58 */ | |
59 | |
60 enum MethodFlags { | |
61 AccessPrivate = 0x00, | |
62 AccessProtected = 0x01, | |
63 AccessPublic = 0x02, | |
64 MethodMethod = 0x00, | |
65 MethodSignal = 0x04, | |
66 MethodSlot = 0x08, | |
67 MethodConstructor = 0x0c, | |
68 MethodCompatibility = 0x10, | |
69 MethodCloned = 0x20, | |
70 MethodScriptable = 0x40 | |
71 } | |
72 | |
73 enum Access { Private, Protected, Public } | |
74 | |
75 struct FunctionDef | |
76 { | |
77 /* FunctionDef(): returnTypeIsVolatile(false), access(Private), isConst(false), isVirtual(false), | |
78 inlineCode(false), wasCloned(false), isCompat(false), isInvokable(false), | |
79 isScriptable(false), isSlot(false), isSignal(false), | |
80 isConstructor(false), isDestructor(false), isAbstract(false) {} | |
81 */ | |
82 // Type type; | |
83 // string normalizedType; | |
84 // string tag; | |
85 // string name; | |
86 string sig; | |
87 string arguments; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
88 Access access; |
288 | 89 /* bool returnTypeIsVolatile; |
90 | |
91 QList<ArgumentDef> arguments; | |
92 | |
93 enum Access { Private, Protected, Public }; | |
94 bool isConst; | |
95 bool isVirtual; | |
96 bool inlineCode; | |
97 bool wasCloned; | |
98 | |
99 QByteArray inPrivateClass; | |
100 bool isCompat; | |
101 bool isInvokable; | |
102 bool isScriptable; | |
103 bool isSlot; | |
104 bool isSignal; | |
105 bool isConstructor; | |
106 bool isDestructor; | |
107 bool isAbstract; | |
108 */ | |
109 } | |
110 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
111 struct ClassInfoDef |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
112 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
113 string name; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
114 string value; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
115 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
116 |
288 | 117 FunctionDef newSlot(string sig, string args) |
118 { | |
119 return FunctionDef(sig, args, Access.Public); | |
120 } | |
121 | |
122 FunctionDef newSignal(string sig, string args) | |
123 { | |
124 return FunctionDef(sig, args, Access.Protected); | |
125 } | |
126 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
127 struct ClassDef |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
128 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
129 string classname; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
130 FunctionDef[] signalList; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
131 FunctionDef[] slotList; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
132 ClassInfoDef[] classInfoList; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
133 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
134 |
288 | 135 struct Generator |
136 { | |
137 string output; | |
138 string[] strings; | |
139 // QByteArray purestSuperClass; | |
140 // QList<QByteArray> metaTypes; | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
141 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
142 ClassDef cdef; |
288 | 143 } |
144 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
145 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
146 |
288 | 147 int lengthOfEscapeSequence(string s, uint i) |
148 { | |
149 if (s[i] != '\\' || i >= s.length - 1) | |
150 return 1; | |
151 const int startPos = i; | |
152 ++i; | |
153 auto ch = s[i]; | |
154 if (ch == 'x') { | |
155 ++i; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
156 while (i < s.length && isHexChar(s[i])) |
288 | 157 ++i; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
158 } else if (isOctalChar(ch)) { |
288 | 159 while (i < startPos + 4 |
160 && i < s.length | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
161 && isOctalChar(s[i])) { |
288 | 162 ++i; |
163 } | |
164 } else { // single character escape sequence | |
165 i = qMin(i + 1, s.length); | |
166 } | |
167 return i - startPos; | |
168 } | |
169 | |
170 int strreg(ref Generator gen, string s) | |
171 { | |
172 int idx = 0; | |
173 foreach (str; gen.strings) { | |
174 if (str == s) | |
175 return idx; | |
176 idx += str.length + 1; | |
177 foreach (i, c; str) { | |
178 if (c == '\\') { | |
179 int cnt = lengthOfEscapeSequence(str, i) - 1; | |
180 idx -= cnt; | |
181 i += cnt; | |
182 } | |
183 } | |
184 } | |
185 gen.strings ~= s; | |
186 return idx; | |
187 } | |
188 | |
189 void generateFunctions(ref Generator gen, FunctionDef[] list, string functype, byte type) | |
190 { | |
191 if (!list.length) | |
192 return; | |
193 gen.output ~= format_ctfe("\n // ${}s: signature, parameters, type, tag, flags\n", functype); | |
194 | |
195 foreach (i, f; list) { | |
196 byte flags = type; | |
197 | |
198 if (f.access == Access.Private) | |
199 flags |= MethodFlags.AccessPrivate; | |
200 else if (f.access == Access.Public) | |
201 flags |= MethodFlags.AccessPublic; | |
202 else if (f.access == Access.Protected) | |
203 flags |= MethodFlags.AccessProtected; | |
204 | |
205 gen.output ~= format_ctfe(" ${}, ${}, ${}, ${}, 0x${:x},\n", strreg(gen, f.sig), | |
206 strreg(gen, f.arguments), strreg(gen, ""/*f.normalizedType*/), strreg(gen, ""/*f.tag*/), flags); | |
207 } | |
208 } | |
209 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
210 ClassInfoDef[] generateClassInfoDefs(T)() |
288 | 211 { |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
212 ClassInfoDef[] defs; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
213 alias GetAttributes!(T, "Q_CLASSINFO") classInfos; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
214 // COMPILER BUG: |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
215 enum len = classInfos.length; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
216 foreach (i, _; Repeat!(void, len)) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
217 defs ~= ClassInfoDef(classInfos[i].tuple[2], classInfos[i].tuple[3]); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
218 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
219 return defs; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
220 } |
288 | 221 |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
222 void generateClassInfos(ref Generator gen) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
223 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
224 if (!gen.cdef.classInfoList.length) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
225 return; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
226 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
227 gen.output ~= "\n // classinfo: key, value\n"; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
228 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
229 foreach (c; gen.cdef.classInfoList) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
230 gen.output ~= format_ctfe(" ${}, ${},\n", strreg(gen, c.name), strreg(gen, c.value)); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
231 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
232 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
233 string generateCode(ref Generator gen) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
234 { |
288 | 235 /* bool isQt = (cdef->classname == "Qt"); |
236 bool isQObject = (cdef->classname == "QObject"); | |
237 bool isConstructible = !cdef->constructorList.isEmpty(); | |
238 | |
239 // | |
240 // build the data array | |
241 // | |
242 int i = 0; | |
243 | |
244 | |
245 // filter out undeclared enumerators and sets | |
246 { | |
247 QList<EnumDef> enumList; | |
248 for (i = 0; i < cdef->enumList.count(); ++i) { | |
249 EnumDef def = cdef->enumList.at(i); | |
250 if (cdef->enumDeclarations.contains(def.name)) { | |
251 enumList += def; | |
252 } | |
253 QByteArray alias = cdef->flagAliases.value(def.name); | |
254 if (cdef->enumDeclarations.contains(alias)) { | |
255 def.name = alias; | |
256 enumList += def; | |
257 } | |
258 } | |
259 cdef->enumList = enumList; | |
260 } | |
261 | |
262 | |
263 QByteArray qualifiedClassNameIdentifier = cdef->qualified; | |
264 qualifiedClassNameIdentifier.replace(':', '_'); | |
265 */ | |
266 bool isConstructible = false; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
267 |
288 | 268 FunctionDef[] propertyList, enumList, constructorList; |
269 int index = 12; | |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
270 gen.output ~= "private static immutable uint[] qt_meta_data = [\n"; |
288 | 271 gen.output ~= format_ctfe("\n // content:\n"); |
272 gen.output ~= format_ctfe(" ${}, // revision\n", 2); | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
273 gen.output ~= format_ctfe(" ${}, // classname\n", strreg(gen, gen.cdef.classname)); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
274 gen.output ~= format_ctfe(" ${}, ${}, // classinfo\n", gen.cdef.classInfoList.length, gen.cdef.classInfoList.length ? index : 0); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
275 index += gen.cdef.classInfoList.length * 2; |
288 | 276 |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
277 int methodCount = gen.cdef.signalList.length + gen.cdef.slotList.length;// + cdef->methodList.count(); |
288 | 278 gen.output ~= format_ctfe(" ${}, ${}, // methods\n", methodCount, methodCount ? index : 0); |
279 index += methodCount * 5; | |
280 gen.output ~= format_ctfe(" ${}, ${}, // properties\n", propertyList.length, propertyList.length ? index : 0); | |
281 index += propertyList.length * 3; | |
282 // if(cdef->notifyableProperties) | |
283 // index += cdef->propertyList.count(); | |
284 gen.output ~= format_ctfe(" ${}, ${}, // enums/sets\n", enumList.length, enumList.length ? index : 0); | |
285 | |
286 // int enumsIndex = index; | |
287 // for (i = 0; i < cdef->enumList.count(); ++i) | |
288 // index += 4 + (cdef->enumList.at(i).values.count() * 2); | |
289 gen.output ~= format_ctfe(" ${}, ${}, // constructors\n", isConstructible ? constructorList.length : 0, | |
290 isConstructible ? index : 0); | |
291 | |
292 // | |
293 // Build classinfo array | |
294 // | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
295 generateClassInfos(gen); |
288 | 296 |
297 // | |
298 // Build signals array first, otherwise the signal indices would be wrong | |
299 // | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
300 generateFunctions(gen, gen.cdef.signalList, "signal", MethodFlags.MethodSignal); |
288 | 301 |
302 // | |
303 // Build slots array | |
304 // | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
305 generateFunctions(gen, gen.cdef.slotList, "slot", MethodFlags.MethodSlot); |
288 | 306 |
307 // | |
308 // Build method array | |
309 // | |
310 // generateFunctions(cdef->methodList, "method", MethodMethod); | |
311 | |
312 | |
313 // | |
314 // Build property array | |
315 // | |
316 // generateProperties(); | |
317 | |
318 // | |
319 // Build enums array | |
320 // | |
321 // generateEnums(enumsIndex); | |
322 | |
323 // | |
324 // Build constructors array | |
325 // | |
326 // if (isConstructible) | |
327 // generateFunctions(cdef->constructorList, "constructor", MethodConstructor); | |
328 | |
329 // | |
330 // Terminate data array | |
331 // | |
332 gen.output ~= format_ctfe("\n 0 // eod\n];\n\n"); | |
333 | |
334 // | |
335 // Build stringdata array | |
336 // | |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
337 gen.output ~= "private static immutable char[] qt_meta_stringdata = \n"; |
288 | 338 gen.output ~= format_ctfe(" \""); |
339 int col = 0; | |
340 int len = 0; | |
341 foreach (i, s; gen.strings) { | |
342 len = s.length; | |
343 if (col && col + len >= 72) { | |
344 gen.output ~= format_ctfe("\"\n \""); | |
345 col = 0; | |
346 } else if (len && s[0] >= '0' && s[0] <= '9') { | |
347 gen.output ~= format_ctfe("\"\""); | |
348 len += 2; | |
349 } | |
350 int idx = 0; | |
351 while (idx < s.length) { | |
352 if (idx > 0) { | |
353 col = 0; | |
354 gen.output ~= format_ctfe("\"\n \""); | |
355 } | |
356 int spanLen = qMin(cast(uint)70, s.length - idx); | |
357 // don't cut escape sequences at the end of a line | |
358 int backSlashPos = s.lastIndexOf("\\", idx + spanLen - 1); | |
359 if (backSlashPos >= idx) { | |
360 int escapeLen = lengthOfEscapeSequence(s, backSlashPos); | |
361 spanLen = qBound(spanLen, backSlashPos + escapeLen - idx, cast(int)(s.length - idx)); | |
362 } | |
363 gen.output ~= s[idx..idx+spanLen]; | |
364 idx += spanLen; | |
365 col += spanLen; | |
366 } | |
367 | |
368 gen.output ~= "\\0"; | |
369 col += len + 2; | |
370 } | |
371 gen.output ~= "\";\n\n"; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
372 |
288 | 373 return gen.output; |
374 } | |
375 | |
376 string qtDeclArgs(Args...)() | |
377 { | |
378 string ret; | |
379 foreach(i, _; Args) | |
380 { | |
381 if(i > 0) | |
382 ret ~= ","; | |
383 ret ~= qtDeclArg!(Args[i]); | |
384 } | |
385 return ret; | |
386 } | |
387 | |
388 size_t commaCount(int argCount) | |
389 { | |
390 size_t ret = 0; | |
391 if(argCount > 1) | |
392 ret = argCount - 1; | |
393 return ret; | |
394 } | |
395 | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
396 FunctionDef[] genFuncDefs(alias newFunc, Funcs...)() |
288 | 397 { |
398 typeof(return) res; | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
399 enum funcsCount = Funcs.length; |
288 | 400 foreach(i, bogus; Repeat!(void, funcsCount)) |
401 { | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
402 alias ParameterTypeTuple!(Funcs[i]) Args; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
403 string args = replicate(commaCount(Args.length), ','); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
404 string funcSig = methodName!(Funcs[i]) ~ "(" ~ qtDeclArgs!(Args)() ~ ")"; |
288 | 405 res ~= newFunc(funcSig, args); |
406 } | |
407 return res; | |
408 } | |
409 | |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
410 // ------------------------------------------------------------------------------------------ |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
411 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
412 public string generateSignalEmitters(uint signalCount) |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
413 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
414 string res = ""; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
415 foreach (i; 0..signalCount) |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
416 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
417 auto iStr = to!string(i); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
418 res ~= "mixin SignalEmitter!(SignalKind.NewSignal, " ~ iStr ~ ");\n"; |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
419 } |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
420 return res; |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
421 } |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
422 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
423 mixin template SlotAlias(alias slot) |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
424 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
425 mixin ("alias slot " ~ methodName!slot ~ ";"); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
426 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
427 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
428 public string generateSlotAliases(uint slotCount) |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
429 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
430 string res = ""; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
431 foreach(i; 0..slotCount) |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
432 { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
433 auto iStr = to!string(i); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
434 res ~= "mixin SlotAlias!(slots[" ~ iStr ~ "]);\n"; |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
435 } |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
436 return res; |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
437 } |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
438 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
439 public string generateMetaCall(string methodName, size_t argCount) |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
440 { |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
441 string res = ""; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
442 foreach (i; 1..argCount) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
443 res ~= generateConvToD(i); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
444 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
445 res ~= methodName ~ "("; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
446 foreach (i; 1..argCount) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
447 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
448 if (i > 1) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
449 res ~= ", "; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
450 res ~= "_out" ~ to!string(i); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
451 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
452 return res ~ ");\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
453 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
454 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
455 public string generateDispatchSwitch(size_t methodCount) |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
456 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
457 string res = "switch(_id) {\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
458 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
459 foreach(i; 0..methodCount) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
460 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
461 string iStr = to!string(i); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
462 res ~= " case " ~ iStr ~ ":\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
463 res ~= " alias methods[" ~ iStr ~ "] method;\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
464 res ~= " alias TypeTuple!(void, ParameterTypeTuple!method) Args;\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
465 res ~= " mixin(generateMetaCall(methodName!method, Args.length));\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
466 res ~= " break;\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
467 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
468 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
469 res ~= " default:\n"; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
470 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
471 return res ~ "}\n"; |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
472 } |
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
473 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
474 public string generateMetaInfo(T)() |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
475 { |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
476 Generator gen; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
477 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
478 gen.cdef.classname = T.stringof; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
479 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
480 gen.cdef.slotList = genFuncDefs!(newSignal, T.signals)(); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
481 gen.cdef.signalList = genFuncDefs!(newSlot, T.slots)(); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
482 gen.cdef.classInfoList = generateClassInfoDefs!T(); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
483 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
484 generateCode(gen); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
485 |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
486 return gen.output; |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
487 } |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
488 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
489 // TODO: move to a better place |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
490 public mixin template Q_OBJECT() |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
491 { |
367
f69341b40588
Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents:
365
diff
changeset
|
492 import |
f69341b40588
Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents:
365
diff
changeset
|
493 std.typetuple, |
f69341b40588
Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents:
365
diff
changeset
|
494 std.traits, |
f69341b40588
Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents:
365
diff
changeset
|
495 qtd.Marshal, |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
496 qtd.Signal, |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
497 qtd.meta.Runtime, |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
498 qtd.MOC, |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
499 qt.core.QMetaObject, |
367
f69341b40588
Removed dependencies on qtd.Traits
Max Samukha <maxter@spambox.com>
parents:
365
diff
changeset
|
500 qt.core.QString; // for QStringUtil.toNative |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
501 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
502 public: // required to override the outside scope protection. |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
503 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
504 alias typeof(this) This; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
505 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
506 alias findSignals!(This) signals; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
507 alias findSlots!(This) slots; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
508 alias TypeTuple!(signals, slots) methods; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
509 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
510 mixin (generateSignalEmitters(signals.length)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
511 mixin (generateSlotAliases(slots.length)); |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
512 //pragma(msg, generateMetaInfo!This()); |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
356
diff
changeset
|
513 mixin (generateMetaInfo!This()); |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
514 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
515 protected int qt_metacall(MetaCall _c, int _id, void **_a) |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
516 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
517 _id = super.qt_metacall(_c, _id, _a); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
518 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
519 static if (methods.length) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
520 { |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
521 if (_id < 0) |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
522 return _id; |
319
894d40eb89b6
new signals and slots syntax. have to use prefixes now: signal_fooed and slot_onFooed
eldar_ins@eldar-laptop
parents:
302
diff
changeset
|
523 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
524 if (_c == MetaCall.InvokeMetaMethod) { |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
525 //pragma(msg, generateDispatchSwitch(methods.length)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
526 mixin (generateDispatchSwitch(methods.length)); |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
527 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
528 _id -= methods.length; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
529 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
530 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
531 return _id; |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
532 } |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
533 |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
534 @property |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
535 override QMetaObject metaObject() const |
365
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
536 { |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
537 return staticMetaObject; |
365
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
538 } |
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
539 |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
540 @property |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
541 static QMetaObject staticMetaObject() |
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
542 { |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
543 return meta!This; |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
544 } |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
545 |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
546 __gshared static QMetaObjectNative nativeStaticMetaObject_; |
365
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
547 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
368
diff
changeset
|
548 static void* qtdNativeStaticMetaObject() |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
549 { |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
550 alias BaseClassesTuple!(This)[0] Base; |
365
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
551 |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
552 if (!nativeStaticMetaObject_.data) |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
553 { |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
554 nativeStaticMetaObject_ = QMetaObjectNative( |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
555 meta!(Base).nativeId, |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
556 qt_meta_stringdata.ptr, |
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
557 qt_meta_data.ptr, null); |
365
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
558 } |
958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
Max Samukha <maxter@spambox.com>
parents:
364
diff
changeset
|
559 |
368
185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
Max Samukha <maxter@maxter.com>
parents:
367
diff
changeset
|
560 return &nativeStaticMetaObject_; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
561 } |
327 | 562 } |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
347
diff
changeset
|
563 |