diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-02-08 15:07:20 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-02-09 18:26:07 -0300 |
commit | f9e7cacfd4654dad676875b39b463ae1f6f72258 (patch) | |
tree | c7b6e1f4fe6d4dab6c4b4be58fdab5884592c7ee /tests | |
parent | 586cd6b6cf67e9c186d2c42d076cbf99f1836ba4 (diff) |
Implement support to conversion rule.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libsample/injectcode.cpp | 3 | ||||
-rw-r--r-- | tests/libsample/injectcode.h | 2 | ||||
-rwxr-xr-x | tests/samplebinding/injectcode_test.py | 1 | ||||
-rw-r--r-- | tests/samplebinding/typesystem_sample.xml | 37 |
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 < 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 < %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 < 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 < 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/> |