comparison generator/dgenerator.cpp @ 350:31520b2c0b3c

Removed dependency on parent trait and stringof
author Max Samukha <maxter@spambox.com>
date Thu, 20 May 2010 15:49:08 +0300
parents 96a75b1e5b26
children 18bd68f586c6
comparison
equal deleted inserted replaced
349:925386e0e780 350:31520b2c0b3c
2556 2556
2557 if (d_class->typeEntry()->isValue()) 2557 if (d_class->typeEntry()->isValue())
2558 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; 2558 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl;
2559 2559
2560 if (d_class->isQObject()) { 2560 if (d_class->isQObject()) {
2561 s << INDENT << "if (!" << d_class->name() << "._staticMetaObject) " << endl 2561 // ensure meta-object is created at static construction
2562 << INDENT << " " << d_class->name() << ".createStaticMetaObject;" << endl << endl; 2562 s << INDENT << d_class->name() << ".staticMetaObject();" << endl;
2563 } 2563 }
2564 2564
2565 if (cpp_shared && d_class->generateShellClass()) { 2565 if (cpp_shared && d_class->generateShellClass()) {
2566 // virtual functions 2566 // virtual functions
2567 s << INDENT << "void*[" << virtualFunctions.size() << "] virt_arr;" << endl; 2567 s << INDENT << "void*[" << virtualFunctions.size() << "] virt_arr;" << endl;
2730 if(function->isSlot()) 2730 if(function->isSlot())
2731 slot_funcs += function; 2731 slot_funcs += function;
2732 } 2732 }
2733 writeMetaMethodSignatures(s, "__slotSignatures", slot_funcs); 2733 writeMetaMethodSignatures(s, "__slotSignatures", slot_funcs);
2734 2734
2735 QString concreteArg; 2735 if (d_class->isAbstract())
2736 if (d_class->isAbstract()) 2736 s << "alias " << d_class->name() << "_ConcreteWrapper ConcreteType;" << endl;
2737 concreteArg += ", " + d_class->name() + "_ConcreteWrapper";
2738 2737
2739 if (!d_class->isFinal()) 2738 if (!d_class->isFinal())
2740 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl 2739 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl
2741 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl 2740 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl
2742 << " }" << endl << endl; 2741 << " }" << endl << endl;
2743 2742
2744 s << " private static __gshared QMetaObject _staticMetaObject;" << endl 2743 s << " private static __gshared QMetaObject _staticMetaObject;" << endl
2745 << " protected static void createStaticMetaObject() {" << endl 2744 << " protected static void setStaticMetaObject(QMetaObject m) {" << endl
2746 << " assert(!_staticMetaObject);" << endl 2745 << " _staticMetaObject = m;" << endl
2747 << " QMetaObject base;" << endl;
2748
2749 if (d_class->name() != "QObject")
2750 {
2751 QString baseName = d_class->baseClassName();
2752 s << " if (!" << baseName << "._staticMetaObject)" << endl
2753 << " " << baseName << ".createStaticMetaObject;" << endl
2754 << " base = " << baseName << "._staticMetaObject;" << endl;
2755 }
2756
2757 s << " _staticMetaObject = new QMetaObject(qtd_" << d_class->name() << "_staticMetaObject, base);" << endl
2758 << " _staticMetaObject.construct!(" << d_class->name() << concreteArg << ");" << endl
2759 << " _populateMetaInfo();" << endl
2760 << " }" << endl << endl 2746 << " }" << endl << endl
2761 2747
2762 << " QMetaObject metaObject() {" << endl 2748 << " @property QMetaObject metaObject() {" << endl
2763 << " return _staticMetaObject;" << endl 2749 << " return _staticMetaObject;" << endl
2764 << " }" << endl << endl 2750 << " }" << endl << endl
2765 2751
2766 << " static QMetaObject staticMetaObject() {" << endl 2752 << " @property static QMetaObject staticMetaObject() {" << endl
2753 << " if (!_staticMetaObject)" << endl
2754 << " QMetaObject.create!(typeof(this))(qtd_" << d_class->name() << "_staticMetaObject());" << endl
2767 << " return _staticMetaObject;" << endl 2755 << " return _staticMetaObject;" << endl
2768 << " }" << endl << endl 2756 << " }" << endl << endl
2769 2757
2770 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl 2758 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl
2771 << " return static_cast!(" << d_class->name() << ")(_staticMetaObject.getObject(nativeId));" << endl 2759 << " return static_cast!(" << d_class->name() << ")(_staticMetaObject.getObject(nativeId));" << endl
2772 << " }" << endl << endl 2760 << " }" << endl << endl
2773 2761
2774 << " static void __createEntity(void* nativeId, void* dId) {" << endl 2762 << " /* internal */ static void __createEntity(void* nativeId, void* dId) {" << endl
2775 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl 2763 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl
2776 << " }" << endl << endl 2764 << " }" << endl << endl
2777 2765
2778 << " private static void _populateMetaInfo() {" << endl 2766 << " /* internal */ static void _populateMetaInfo() {" << endl
2779 << " int index;" << endl << endl; 2767 << " int index;" << endl << endl;
2780 2768
2781 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); 2769 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false);
2782 2770
2783 int staticId = 0; 2771 int staticId = 0;