Mercurial > projects > qtd
diff generator/dgenerator.cpp @ 364:a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Fri, 11 Jun 2010 12:16:09 +0300 |
parents | 3b0545d4d479 |
children | 958e8b9a89bd |
line wrap: on
line diff
--- a/generator/dgenerator.cpp Thu Jun 10 00:57:32 2010 +0300 +++ b/generator/dgenerator.cpp Fri Jun 11 12:16:09 2010 +0300 @@ -1958,8 +1958,9 @@ if (d_class->isQObject()) { s << "public import qtd.Signal;" << endl << "public import qtd.MOC;" << endl - << "public import qtd.Traits;" << endl - << "public import qt.core.QMetaObject;" << endl; + << "public import qtd.Traits;" << endl + << "public import qt.core.QMetaObject;" << endl + << "import qtd.meta.Runtime;" << endl; if (d_class->name() != "QObject") s << "public import qt.core.QObject;" << endl; @@ -2568,11 +2569,6 @@ if (d_class->typeEntry()->isValue()) s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; - if (d_class->isQObject()) { - // ensure meta-object is created at static construction - s << INDENT << d_class->name() << ".staticMetaObject();" << endl; - } - if (cpp_shared && d_class->generateShellClass()) { AbstractMetaFunction::Options opts(AbstractMetaFunction::DeclaringClass | AbstractMetaFunction::NoExternNamespace); @@ -2694,7 +2690,7 @@ void DGenerator::writeQObjectFreeFunctions(QTextStream &s, const AbstractMetaClass *d_class) { - s << "extern(C) QMetaObjectNative* qtd_" << d_class->name() << "_staticMetaObject();" << endl << endl + s << "extern(C) void* qtd_" << d_class->name() << "_staticMetaObject();" << endl << endl << "extern(C) void qtd_" << d_class->name() << "_createEntity(void* nativeId, void* dId);" << endl << endl << "extern(C) int qtd_" << d_class->name() << "_qt_metacall(void *nativeId, QMetaObject.Call _c, int _id, void **_a);" << endl; @@ -2761,31 +2757,29 @@ << " }" << endl << endl; } - s << " private static __gshared QMetaObject staticMetaObject_;" << endl - << " protected static void setStaticMetaObject(QMetaObject m) {" << endl - << " staticMetaObject_ = m;" << endl - << " }" << endl << endl + s << " @property static void* qtd_nativeMetaObject() {" << endl + << " return qtd_" << d_class->name() << "_staticMetaObject();" << endl + << " }" << " @property QMetaObject metaObject() {" << endl - << " return staticMetaObject_;" << endl + << " return staticMetaObject;" << endl << " }" << endl << endl << " @property static QMetaObject staticMetaObject() {" << endl - << " if (!staticMetaObject_)" << endl - << " QMetaObject.create!(typeof(this))(qtd_" << d_class->name() << "_staticMetaObject());" << endl - << " return staticMetaObject_;" << endl + << " return meta!(typeof(this));" << endl << " }" << endl << endl << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl - << " return static_cast!(" << d_class->name() << ")(staticMetaObject_.getObject(nativeId));" << endl + << " return static_cast!(" << d_class->name() << ")(staticMetaObject.getObject(nativeId));" << endl << " }" << endl << endl - << " /* internal */ static void __createEntity(void* nativeId, void* dId) {" << endl + << " static void __createEntity(void* nativeId, void* dId) {" << endl << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl << " }" << endl << endl - << " /* internal */ static void _populateMetaInfo() {" << endl - << " int index;" << endl << endl; + << " static void _populateMetaInfo() {" << endl + << " int index;" << endl + << " auto mo = staticMetaObject;" << endl << endl; AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); @@ -2797,8 +2791,8 @@ do // need this to look for default arguments and generate extra signatures { AbstractMetaFunction *fn = signal_funcs.at(i); - s << " index = staticMetaObject_.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl - << " staticMetaObject_.addMethod(new QMetaSignal(signature!("; + s << " index = mo.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl + << " mo.addMethod(new QMetaSignal(signature!("; writeMetaMethodArguments(s, fn, j); s << ")(\"" << fn->name() << "\"), index));" << endl << endl; AbstractMetaArgumentList args = fn->arguments(); @@ -2819,8 +2813,8 @@ do // need this to look for default arguments and generate extra signatures { AbstractMetaFunction *fn = slot_funcs.at(i); - s << " index = staticMetaObject_.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl - << " staticMetaObject_.addMethod(new QMetaSlot(signature!("; + s << " index = mo.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl + << " mo.addMethod(new QMetaSlot(signature!("; writeMetaMethodArguments(s, fn, j); s << ")(\"" << fn->name() << "\"), index));" << endl << endl; AbstractMetaArgumentList args = fn->arguments();