Mercurial > projects > qtd
comparison 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 |
comparison
equal
deleted
inserted
replaced
367:f69341b40588 | 368:185df9220ea7 |
---|---|
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 qt.core.QMetaObject;" << endl; | 1961 << "public import qt.core.QMetaObject;" << endl |
1962 << "import qtd.meta.Runtime;"; | |
1962 | 1963 |
1963 if (d_class->name() != "QObject") | 1964 if (d_class->name() != "QObject") |
1964 s << "public import qt.core.QObject;" << endl; | 1965 s << "public import qt.core.QObject;" << endl; |
1965 } | 1966 } |
1966 | 1967 |
2564 | 2565 |
2565 s << "extern(C) void static_init_" << d_class->name() << "() {" << endl; | 2566 s << "extern(C) void static_init_" << d_class->name() << "() {" << endl; |
2566 | 2567 |
2567 if (d_class->typeEntry()->isValue()) | 2568 if (d_class->typeEntry()->isValue()) |
2568 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; | 2569 s << INDENT << d_class->name() << ".QTypeInfo.init();" << endl; |
2569 | |
2570 if (d_class->isQObject()) { | |
2571 // ensure meta-object is created at static construction | |
2572 s << INDENT << d_class->name() << ".staticMetaObject();" << endl; | |
2573 } | |
2574 | 2570 |
2575 if (cpp_shared && d_class->generateShellClass()) { | 2571 if (cpp_shared && d_class->generateShellClass()) { |
2576 | 2572 |
2577 AbstractMetaFunction::Options opts(AbstractMetaFunction::DeclaringClass | AbstractMetaFunction::NoExternNamespace); | 2573 AbstractMetaFunction::Options opts(AbstractMetaFunction::DeclaringClass | AbstractMetaFunction::NoExternNamespace); |
2578 | 2574 |
2758 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl | 2754 s << " int qt_metacall(QMetaObject.Call _c, int _id, void **_a) {" << endl |
2759 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl | 2755 << " return qtd_" << d_class->name() << "_qt_metacall(__nativeId, _c, _id, _a);" << endl |
2760 << " }" << endl << endl; | 2756 << " }" << endl << endl; |
2761 } | 2757 } |
2762 | 2758 |
2763 s << " private static __gshared QMetaObject staticMetaObject_;" << endl | 2759 s << " @property QMetaObject metaObject() {" << endl |
2764 << " protected static void setStaticMetaObject(QMetaObject m) {" << endl | 2760 << " return staticMetaObject;" << endl |
2765 << " staticMetaObject_ = m;" << endl | |
2766 << " }" << endl << endl | 2761 << " }" << endl << endl |
2767 | 2762 |
2768 << " @property QMetaObject metaObject() {" << endl | 2763 << " @property static QMetaObject staticMetaObject() {" << endl |
2769 << " return staticMetaObject_;" << endl | 2764 << " return meta!(" << d_class->name() << ");" << endl |
2770 << " }" << endl << endl | 2765 << " }" << endl << endl |
2771 | 2766 |
2772 << " @property static QMetaObject staticMetaObject() {" << endl | 2767 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl |
2773 << " if (!staticMetaObject_)" << endl | 2768 << " return static_cast!(" << d_class->name() << ")(staticMetaObject.getObject(nativeId));" << endl |
2774 << " QMetaObject.create!(typeof(this))(qtd_" << d_class->name() << "_staticMetaObject());" << endl | |
2775 << " return staticMetaObject_;" << endl | |
2776 << " }" << endl << endl | 2769 << " }" << endl << endl |
2777 | 2770 |
2778 << " static " << d_class->name() << " __getObject(void* nativeId) {" << endl | 2771 << " static void __createEntity(void* nativeId, void* dId) {" << endl |
2779 << " return static_cast!(" << d_class->name() << ")(staticMetaObject_.getObject(nativeId));" << endl | |
2780 << " }" << endl << endl | |
2781 | |
2782 << " /* internal */ static void __createEntity(void* nativeId, void* dId) {" << endl | |
2783 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl | 2772 << " return qtd_" << d_class->name() << "_createEntity(nativeId, dId);" << endl |
2784 << " }" << endl << endl | 2773 << " }" << endl << endl |
2785 | 2774 |
2786 << " /* internal */ static void _populateMetaInfo() {" << endl | 2775 << " static void* qtd_nativeStaticMetaObject() {" << endl |
2776 << " return qtd_" << d_class->name() << "_staticMetaObject();" << endl | |
2777 << " }" << endl | |
2778 | |
2779 << " static void _populateMetaInfo(QMetaObject mo) {" << endl | |
2787 << " int index;" << endl << endl; | 2780 << " int index;" << endl << endl; |
2788 | 2781 |
2789 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); | 2782 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); |
2790 | 2783 |
2791 int staticId = 0; | 2784 int staticId = 0; |
2794 int j = 0; | 2787 int j = 0; |
2795 bool hasDefault = false; | 2788 bool hasDefault = false; |
2796 do // need this to look for default arguments and generate extra signatures | 2789 do // need this to look for default arguments and generate extra signatures |
2797 { | 2790 { |
2798 AbstractMetaFunction *fn = signal_funcs.at(i); | 2791 AbstractMetaFunction *fn = signal_funcs.at(i); |
2799 s << " index = staticMetaObject_.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl | 2792 s << " index = mo.indexOfMethod_Cpp(__signalSignatures[" << staticId << "]);" << endl |
2800 << " staticMetaObject_.addMethod(new QMetaSignal(signature!("; | 2793 << " mo.addMethod(new QMetaSignal(signature!("; |
2801 writeMetaMethodArguments(s, fn, j); | 2794 writeMetaMethodArguments(s, fn, j); |
2802 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; | 2795 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; |
2803 AbstractMetaArgumentList args = fn->arguments(); | 2796 AbstractMetaArgumentList args = fn->arguments(); |
2804 if(args.size() && j<args.size()) | 2797 if(args.size() && j<args.size()) |
2805 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); | 2798 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); |
2816 int j = 0; | 2809 int j = 0; |
2817 bool hasDefault = false; | 2810 bool hasDefault = false; |
2818 do // need this to look for default arguments and generate extra signatures | 2811 do // need this to look for default arguments and generate extra signatures |
2819 { | 2812 { |
2820 AbstractMetaFunction *fn = slot_funcs.at(i); | 2813 AbstractMetaFunction *fn = slot_funcs.at(i); |
2821 s << " index = staticMetaObject_.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl | 2814 s << " index = mo.indexOfMethod_Cpp(__slotSignatures[" << staticId << "]);" << endl |
2822 << " staticMetaObject_.addMethod(new QMetaSlot(signature!("; | 2815 << " mo.addMethod(new QMetaSlot(signature!("; |
2823 writeMetaMethodArguments(s, fn, j); | 2816 writeMetaMethodArguments(s, fn, j); |
2824 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; | 2817 s << ")(\"" << fn->name() << "\"), index));" << endl << endl; |
2825 AbstractMetaArgumentList args = fn->arguments(); | 2818 AbstractMetaArgumentList args = fn->arguments(); |
2826 if(args.size() && j<args.size()) | 2819 if(args.size() && j<args.size()) |
2827 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); | 2820 hasDefault = !args.at(args.size() - 1 - j)->defaultValueExpression().isEmpty(); |