aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-02-08 20:39:46 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-02-09 12:09:23 -0300
commitdf7a5518466ce74ca3023b61ce1be21592f97252 (patch)
tree2ae87365a1206c201c310f3e9b915a50a9c883a9
parent3b98369c971d23b8a45cfbf1b3a60f6ccee1f7ab (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.cpp7
-rw-r--r--headergenerator.cpp7
-rw-r--r--shibokengenerator.cpp5
-rw-r--r--tests/libsample/injectcode.h2
-rw-r--r--tests/samplebinding/typesystem_sample.xml3
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>
<!--