Mercurial > projects > qtd
diff generator/dgenerator.cpp @ 368:185df9220ea7
Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Mon, 28 Jun 2010 21:29:32 +0300 |
parents | f69341b40588 |
children | a032df77b6ab |
line wrap: on
line diff
--- a/generator/dgenerator.cpp Thu Jun 24 13:47:30 2010 +0300 +++ b/generator/dgenerator.cpp Mon Jun 28 21:29:32 2010 +0300 @@ -1958,7 +1958,8 @@ if (d_class->isQObject()) { s << "public import qtd.Signal;" << endl << "public import qtd.MOC;" << endl - << "public import qt.core.QMetaObject;" << endl; + << "public import qt.core.QMetaObject;" << endl + << "import qtd.meta.Runtime;"; if (d_class->name() != "QObject") s << "public import qt.core.QObject;" << endl; @@ -2567,11 +2568,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); @@ -2760,30 +2756,27 @@ << " }" << endl << endl; } - s << " private static __gshared QMetaObject staticMetaObject_;" << endl - << " protected static void setStaticMetaObject(QMetaObject m) {" << endl - << " staticMetaObject_ = m;" << endl - << " }" << endl << endl - - << " @property QMetaObject metaObject() {" << endl - << " return staticMetaObject_;" << endl + s << " @property QMetaObject metaObject() {" << 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!(" << d_class->name() << ");" << 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 + << " static void* qtd_nativeStaticMetaObject() {" << endl + << " return qtd_" << d_class->name() << "_staticMetaObject();" << endl + << " }" << endl + + << " static void _populateMetaInfo(QMetaObject mo) {" << endl << " int index;" << endl << endl; AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); @@ -2796,8 +2789,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(); @@ -2818,8 +2811,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();