aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-02-08 15:07:20 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-02-09 18:26:07 -0300
commitf9e7cacfd4654dad676875b39b463ae1f6f72258 (patch)
treec7b6e1f4fe6d4dab6c4b4be58fdab5884592c7ee /tests
parent586cd6b6cf67e9c186d2c42d076cbf99f1836ba4 (diff)
Implement support to conversion rule.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/libsample/injectcode.cpp3
-rw-r--r--tests/libsample/injectcode.h2
-rwxr-xr-xtests/samplebinding/injectcode_test.py1
-rw-r--r--tests/samplebinding/typesystem_sample.xml37
4 files changed, 26 insertions, 17 deletions
diff --git a/tests/libsample/injectcode.cpp b/tests/libsample/injectcode.cpp
index b69d81d77..9a8091a5d 100644
--- a/tests/libsample/injectcode.cpp
+++ b/tests/libsample/injectcode.cpp
@@ -93,11 +93,10 @@ const char* InjectCode::virtualMethod(int arg)
return toStr(arg);
}
-int InjectCode::arrayMethod(int count, int* values) const
+int InjectCode::arrayMethod(int count, int *values) const
{
int ret = 0;
for (int i=0; i < count; i++)
ret += values[i];
return ret;
}
-
diff --git a/tests/libsample/injectcode.h b/tests/libsample/injectcode.h
index 6e4e5c4de..42cf01c7e 100644
--- a/tests/libsample/injectcode.h
+++ b/tests/libsample/injectcode.h
@@ -54,7 +54,7 @@ public:
const char* overloadedMethod(int arg0, bool arg1);
virtual int arrayMethod(int count, int* values) const;
- int callArrayMethod(int count, int* values) const { return arrayMethod(count, values); }
+ int callArrayMethod(int count, int *values) const { return arrayMethod(count, values); }
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/injectcode_test.py b/tests/samplebinding/injectcode_test.py
index ffc8ff115..3888f07b6 100755
--- a/tests/samplebinding/injectcode_test.py
+++ b/tests/samplebinding/injectcode_test.py
@@ -33,6 +33,7 @@ class MyInjectCode(InjectCode):
def __init__(self):
InjectCode.__init__(self)
self.multiplier = 2
+
def arrayMethod(self, values):
return self.multiplier * sum(values)
diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml
index d6117a278..a722276ea 100644
--- a/tests/samplebinding/typesystem_sample.xml
+++ b/tests/samplebinding/typesystem_sample.xml
@@ -596,24 +596,33 @@
<modify-function signature="arrayMethod(int, int*) const">
<modify-argument index="1">
<remove-argument/>
+ <conversion-rule class="native">
+ int %out = PySequence_Size(%PYARG_1);
+ </conversion-rule>
</modify-argument>
+
<modify-argument index="2">
- <replace-type modified-type="PySequence"/>
- </modify-argument>
- <inject-code class="target" position="beginning">
+ <replace-type modified-type="PySequence"/>
+
+ <conversion-rule class="native">
int numItems = PySequence_Size(%PYARG_1);
- int cppItems[numItems];
- for (int i = 0; i &lt; numItems; i++)
- 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">
- PyObject* __py_values__ = PyList_New(count);
- for (int i = 0; i &lt; %1; i++)
- PyList_SET_ITEM(__py_values__, i, %CONVERTTOPYTHON[int](%2[i]));
- Shiboken::AutoDecRef %PYTHON_ARGUMENTS(Py_BuildValue("(O)", __py_values__));
- </inject-code>
+ int %out[numItems];
+ for (int i=0; i &lt; numItems; i++) {
+ %out[i] = %CONVERTTOCPP[int](PySequence_GetItem(%PYARG_1, i));
+ }
+ </conversion-rule>
+
+ <conversion-rule class="target">
+ Shiboken::AutoDecRef __object__(PyList_New(count));
+ for (int i=0; i &lt; count; i++) {
+ PyList_SET_ITEM(__object__.object(), i, %CONVERTTOPYTHON[int](%in[i]));
+ }
+ PyObject *%out = __object__.object();
+ </conversion-rule>
+ </modify-argument>
+
</modify-function>
+
<modify-function signature="callArrayMethod(int, int*) const">
<modify-argument index="1">
<remove-argument/>