aboutsummaryrefslogtreecommitdiffstats
path: root/tests/samplebinding
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/samplebinding
parent586cd6b6cf67e9c186d2c42d076cbf99f1836ba4 (diff)
Implement support to conversion rule.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'tests/samplebinding')
-rwxr-xr-xtests/samplebinding/injectcode_test.py1
-rw-r--r--tests/samplebinding/typesystem_sample.xml37
2 files changed, 24 insertions, 14 deletions
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/>