comparison generator/dgenerator.cpp @ 365:958e8b9a89bd

Changeset a084e2df3776 is broken. Backing out.
author Max Samukha <maxter@spambox.com>
date Fri, 11 Jun 2010 20:09:25 +0300
parents a084e2df3776
children f69341b40588
comparison
equal deleted inserted replaced
364:a084e2df3776 365:958e8b9a89bd
1956 << "private import qtd.Array;" << endl 1956 << "private import qtd.Array;" << endl
1957 << "private import qt.core.QList;" << endl; 1957 << "private import qt.core.QList;" << endl;
1958 if (d_class->isQObject()) { 1958 if (d_class->isQObject()) {
1959 s << "public import qtd.Signal;" << endl 1959 s << "public import qtd.Signal;" << endl
1960 << "public import qtd.MOC;" << endl 1960 << "public import qtd.MOC;" << endl
1961 << "public import qtd.Traits;" << endl 1961 << "public import qtd.Traits;" << endl
1962 << "public import qt.core.QMetaObject;" << endl 1962 << "public import qt.core.QMetaObject;" << endl;
1963 << "import qtd.meta.Runtime;" << endl;
1964 1963
1965 if (d_class->name() != "QObject") 1964 if (d_class->name() != "QObject")
1966 s << "public import qt.core.QObject;" << endl; 1965 s << "public import qt.core.QObject;" << endl;
1967 } 1966 }
1968 1967
2567 s << "extern(C) void static_init_" << d_class->name() << "() {" << endl; 2566 s << "extern(C) void static_init_" << d_class->name() << "() {" << endl;
2568 2567
2569 if (d_class->typeEntry()->isValue()) 2568 if (d_class->typeEntry()->isValue())
2570 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; 2569 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl;
2571 2570
2571 if (d_class->isQObject()) {
2572 // ensure meta-object is created at static construction
2573 s << INDENT << d_class->name() << ".staticMetaObject();" << endl;
2574 }
2575
2572 if (cpp_shared && d_class->generateShellClass()) { 2576 if (cpp_shared && d_class->generateShellClass()) {
2573 2577
2574 AbstractMetaFunction::Options opts(AbstractMetaFunction::DeclaringClass | AbstractMetaFunction::NoExternNamespace); 2578 AbstractMetaFunction::Options opts(AbstractMetaFunction::DeclaringClass | AbstractMetaFunction::NoExternNamespace);
2575 2579
2576 // virtual functions 2580 // virtual functions
2688 s << "}" << endl << endl; 2692 s << "}" << endl << endl;
2689 } 2693 }
2690 2694
2691 void DGenerator::writeQObjectFreeFunctions(QTextStream &s, const AbstractMetaClass *d_class) 2695 void DGenerator::writeQObjectFreeFunctions(QTextStream &s, const AbstractMetaClass *d_class)
2692 { 2696 {
2693 s << "extern(C) void* qtd_" << d_class->name() << "_staticMetaObject();" << endl << endl 2697 s << "extern(C) QMetaObjectNative* qtd_" << d_class->name() << "_staticMetaObject();" << endl << endl
2694 << "extern(C) void qtd_" << d_class->name() << "_createEntity(void* nativeId, void* dId);" << endl << endl 2698 << "extern(C) void qtd_" << d_class->name() << "_createEntity(void* nativeId, void* dId);" << endl << endl
2695 << "extern(C) int qtd_" << d_class->name() << "_qt_metacall(void *nativeId, QMetaObject.Call _c, int _id, void **_a);" << endl; 2699 << "extern(C) int qtd_" << d_class->name() << "_qt_metacall(void *nativeId, QMetaObject.Call _c, int _id, void **_a);" << endl;
2696 2700
2697 QString prefix = cpp_shared ? "qtd_export_" : "qtd_"; 2701 QString prefix = cpp_shared ? "qtd_export_" : "qtd_";
2698 2702
2755 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl 2759 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl
2756 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl 2760 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl
2757 << " }" << endl << endl; 2761 << " }" << endl << endl;
2758 } 2762 }
2759 2763
2760 s << " @property static void* qtd_nativeMetaObject() {" << endl 2764 s << " private static __gshared QMetaObject staticMetaObject_;" << endl
2761 << " return qtd_" << d_class->name() << "_staticMetaObject();" << endl 2765 << " protected static void setStaticMetaObject(QMetaObject m) {" << endl
2762 << " }" 2766 << " staticMetaObject_ = m;" << endl
2767 << " }" << endl << endl
2763 2768
2764 << " @property QMetaObject metaObject() {" << endl 2769 << " @property QMetaObject metaObject() {" << endl
2765 << " return staticMetaObject;" << endl 2770 << " return staticMetaObject_;" << endl
2766 << " }" << endl << endl 2771 << " }" << endl << endl
2767 2772
2768 << " @property static QMetaObject staticMetaObject() {" << endl 2773 << " @property static QMetaObject staticMetaObject() {" << endl
2769 << " return meta!(typeof(this));" << endl 2774 << " if (!staticMetaObject_)" << endl
2775 << " QMetaObject.create!(typeof(this))(qtd_" << d_class->name() << "_staticMetaObject());" << endl
2776 << " return staticMetaObject_;" << endl
2770 << " }" << endl << endl 2777 << " }" << endl << endl
2771 2778
2772 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl 2779 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl
2773 << " return static_cast!(" << d_class->name() << ")(staticMetaObject.getObject(nativeId));" << endl 2780 << " return static_cast!(" << d_class->name() << ")(staticMetaObject_.getObject(nativeId));" << endl
2774 << " }" << endl << endl 2781 << " }" << endl << endl
2775 2782
2776 << " static void __createEntity(void* nativeId, void* dId) {" << endl 2783 << " /* internal */ static void __createEntity(void* nativeId, void* dId) {" << endl
2777 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl 2784 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl
2778 << " }" << endl << endl 2785 << " }" << endl << endl
2779 2786
2780 << " static void _populateMetaInfo() {" << endl 2787 << " /* internal */ static void _populateMetaInfo() {" << endl
2781 << " int index;" << endl 2788 << " int index;" << endl << endl;
2782 << " auto mo = staticMetaObject;" << endl << endl;
2783 2789
2784 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); 2790 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false);
2785 2791
2786 int staticId = 0; 2792 int staticId = 0;
2787 for (int i = 0; i < signal_funcs.size(); ++i) 2793 for (int i = 0; i < signal_funcs.size(); ++i)
2789 int j = 0; 2795 int j = 0;
2790 bool hasDefault = false; 2796 bool hasDefault = false;
2791 do // need this to look for default arguments and generate extra signatures 2797 do // need this to look for default arguments and generate extra signatures
2792 { 2798 {
2793 AbstractMetaFunction *fn = signal_funcs.at(i); 2799 AbstractMetaFunction *fn = signal_funcs.at(i);
2794 s << " index = mo.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl 2800 s << " index = staticMetaObject_.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl
2795 << " mo.addMethod(new QMetaSignal(signature!("; 2801 << " staticMetaObject_.addMethod(new QMetaSignal(signature!(";
2796 writeMetaMethodArguments(s, fn, j); 2802 writeMetaMethodArguments(s, fn, j);
2797 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; 2803 s << ")(\"" << fn->name() << "\"), index));" << endl << endl;
2798 AbstractMetaArgumentList args = fn->arguments(); 2804 AbstractMetaArgumentList args = fn->arguments();
2799 if(args.size() && j<args.size()) 2805 if(args.size() && j<args.size())
2800 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); 2806 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty();
2811 int j = 0; 2817 int j = 0;
2812 bool hasDefault = false; 2818 bool hasDefault = false;
2813 do // need this to look for default arguments and generate extra signatures 2819 do // need this to look for default arguments and generate extra signatures
2814 { 2820 {
2815 AbstractMetaFunction *fn = slot_funcs.at(i); 2821 AbstractMetaFunction *fn = slot_funcs.at(i);
2816 s << " index = mo.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl 2822 s << " index = staticMetaObject_.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl
2817 << " mo.addMethod(new QMetaSlot(signature!("; 2823 << " staticMetaObject_.addMethod(new QMetaSlot(signature!(";
2818 writeMetaMethodArguments(s, fn, j); 2824 writeMetaMethodArguments(s, fn, j);
2819 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; 2825 s << ")(\"" << fn->name() << "\"), index));" << endl << endl;
2820 AbstractMetaArgumentList args = fn->arguments(); 2826 AbstractMetaArgumentList args = fn->arguments();
2821 if(args.size() && j<args.size()) 2827 if(args.size() && j<args.size())
2822 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); 2828 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty();