Mercurial > projects > qtd
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(); |