diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-02-08 20:39:46 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-02-09 12:09:23 -0300 |
commit | df7a5518466ce74ca3023b61ce1be21592f97252 (patch) | |
tree | 2ae87365a1206c201c310f3e9b915a50a9c883a9 | |
parent | 3b98369c971d23b8a45cfbf1b3a60f6ccee1f7ab (diff) |
Fixes generation of binding reimplementation of modified virtual methods.
Argument removal and type modification no longer affects the generation
of virtual method signatures in the binding code.
-rw-r--r-- | cppgenerator.cpp | 7 | ||||
-rw-r--r-- | headergenerator.cpp | 7 | ||||
-rw-r--r-- | shibokengenerator.cpp | 5 | ||||
-rw-r--r-- | tests/libsample/injectcode.h | 2 | ||||
-rw-r--r-- | tests/samplebinding/typesystem_sample.xml | 3 |
5 files changed, 16 insertions, 8 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp index a41a60a5d..d8b5fab44 100644 --- a/cppgenerator.cpp +++ b/cppgenerator.cpp @@ -341,7 +341,8 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu const TypeEntry* type = func->type() ? func->type()->typeEntry() : 0; QString prefix = wrapperName(func->ownerClass()) + "::"; - s << functionSignature(func, prefix, "", Generator::SkipDefaultValues) << endl << "{" << endl; + s << functionSignature(func, prefix, "", Generator::SkipDefaultValues|Generator::OriginalTypeDescription) << endl; + s << "{" << endl; Indentation indentation(INDENT); @@ -953,9 +954,9 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const OverloadData* overloadDa if (isPairContainer) s << '('; - if (overloadData->hasArgumentTypeReplace()) { + if (overloadData->hasArgumentTypeReplace()) s << guessCPythonCheckFunction(overloadData->argumentTypeReplaced()); - } else if (argType->typeEntry()->isFlags()) + else if (argType->typeEntry()->isFlags()) s << cpythonCheckFunction(((FlagsTypeEntry*) argType->typeEntry())->originator(), true); else if (argType->isEnum()) s << cpythonCheckFunction(argType, false, true); diff --git a/headergenerator.cpp b/headergenerator.cpp index ba87317d6..ad22353d1 100644 --- a/headergenerator.cpp +++ b/headergenerator.cpp @@ -128,9 +128,12 @@ void HeaderGenerator::writeFunction(QTextStream& s, const AbstractMetaFunction* if (func->isConstructor() || func->isAbstract() || func->isVirtual()) { s << INDENT; - if (func->isVirtual() || func->isAbstract()) + Options virtualOption = Generator::NoOption; + if (func->isVirtual() || func->isAbstract()) { + virtualOption = Generator::OriginalTypeDescription; s << "virtual "; - s << functionSignature(func) << ';' << endl; + } + s << functionSignature(func, "", "", virtualOption) << ';' << endl; // TODO: when modified an abstract method ceases to be virtual but stays abstract //if (func->isModifiedRemoved() && func->isAbstract()) { diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp index 8a4a4eba0..cc0f48a82 100644 --- a/shibokengenerator.cpp +++ b/shibokengenerator.cpp @@ -364,7 +364,6 @@ QString ShibokenGenerator::getFormatUnitString(const AbstractMetaFunction* func) } else if (arg->type()->isNativePointer() && arg->type()->name() == "char") { result += 'z'; } else { - Q_ASSERT(false); ReportHandler::warning("Unknown type used in ShibokenGenerator::getFormatUnitString!"); result += '?'; } @@ -600,7 +599,9 @@ QString ShibokenGenerator::argumentString(const AbstractMetaFunction *func, const AbstractMetaArgument *argument, Options options) const { - QString modified_type = func->typeReplaced(argument->argumentIndex() + 1); + QString modified_type; + if (!(options & OriginalTypeDescription)) + modified_type = func->typeReplaced(argument->argumentIndex() + 1); QString arg; if (modified_type.isEmpty()) diff --git a/tests/libsample/injectcode.h b/tests/libsample/injectcode.h index dfac5b672..0335ff425 100644 --- a/tests/libsample/injectcode.h +++ b/tests/libsample/injectcode.h @@ -53,7 +53,7 @@ public: const char* overloadedMethod(int arg0, double arg1); const char* overloadedMethod(int arg0, bool arg1); - int arrayMethod(int count, int* values) const; + virtual int arrayMethod(int count, int* values) const; virtual const char* virtualMethod(int arg); private: // This attr is just to retain the memory pointed by all return values, diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml index 292f6f10b..af48b085d 100644 --- a/tests/samplebinding/typesystem_sample.xml +++ b/tests/samplebinding/typesystem_sample.xml @@ -607,6 +607,9 @@ cppItems[i] = %CONVERTTOCPP[int](PySequence_GetItem(%PYARG_1, i)); %PYARG_0 = %CONVERTTOPYTHON[int](%CPPSELF.%FUNCTION_NAME(numItems, cppItems)); </inject-code> + <inject-code class="native" position="beginning"> + // TODO + </inject-code> </modify-function> <!-- |