summaryrefslogtreecommitdiffstats
path: root/php
diff options
context:
space:
mode:
authorEmmanuel Raviart <eraviart@entrouvert.com>2005-01-09 23:38:13 +0000
committerEmmanuel Raviart <eraviart@entrouvert.com>2005-01-09 23:38:13 +0000
commit9a741aa87859b4cb10f5c644608859ee8c112a1d (patch)
tree35fa659685d17248987322d2f0fd429cfd73d6aa /php
parente86892f3c014f2bbbd236cb2706d5004facdc2bc (diff)
downloadlasso-9a741aa87859b4cb10f5c644608859ee8c112a1d.tar.gz
lasso-9a741aa87859b4cb10f5c644608859ee8c112a1d.tar.xz
lasso-9a741aa87859b4cb10f5c644608859ee8c112a1d.zip
Swig: Added a patch to PHP, so that it handles correctly dynamic cast of
function results. [Note: Patch is not integrated in Makefile.am.]
Diffstat (limited to 'php')
-rwxr-xr-xphp/patch_swig_output.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/php/patch_swig_output.py b/php/patch_swig_output.py
new file mode 100755
index 00000000..c8d82e2d
--- /dev/null
+++ b/php/patch_swig_output.py
@@ -0,0 +1,129 @@
+#! /usr/bin/env python
+
+"""Correct Swig output for PHP binding.
+
+The PHP binding of Swig version 1.3.22 doest handle dynamic cast of function results well: After
+the C object is dynamically casted, it creates a statically caster PHP object.
+
+This program corrects this, by replacing:
+ {
+ swig_type_info *ty = SWIG_TypeDynamicCast(SWIGTYPE_p_LassoXXX, (void **) &result);
+ SWIG_SetPointerZval(return_value, (void *)result, ty, 1);
+ }
+ /* Wrap this return value */
+ if (this_ptr) {
+ /* NATIVE Constructor, use this_ptr */
+ zval *_cPtr; MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ add_property_zval(this_ptr,"_cPtr",_cPtr);
+ } else if (! this_ptr) {
+ /* ALTERNATIVE Constructor, make an object wrapper */
+ zval *obj, *_cPtr;
+ MAKE_STD_ZVAL(obj);
+ MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ object_init_ex(obj,ptr_ce_swig_LassoXXX);
+ add_property_zval(obj,"_cPtr",_cPtr);
+ *return_value=*obj;
+ }
+with:
+ {
+ swig_type_info *ty = SWIG_TypeDynamicCast(SWIGTYPE_p_LassoXXX, (void **) &result);
+ SWIG_SetPointerZval(return_value, (void *)result, ty, 1);
+ /* Wrap this return value */
+ if (this_ptr) {
+ /* NATIVE Constructor, use this_ptr */
+ zval *_cPtr; MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ add_property_zval(this_ptr,"_cPtr",_cPtr);
+ } else if (! this_ptr) {
+ /* ALTERNATIVE Constructor, make an object wrapper */
+ zval *obj, *_cPtr;
+ MAKE_STD_ZVAL(obj);
+ MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ object_init_ex(obj,ptr_ce_swig_LassoXXX);
+ add_property_zval(obj,"_cPtr",_cPtr);
+ *return_value=*obj;
+ }}
+and
+ {
+ swig_type_info *ty = SWIG_TypeDynamicCast(SWIGTYPE_p_LassoXXX, (void **) &result);
+ SWIG_SetPointerZval(return_value, (void *)result, ty, 0);
+ }
+ /* Wrap this return value */
+ {
+ /* ALTERNATIVE Constructor, make an object wrapper */
+ zval *obj, *_cPtr;
+ MAKE_STD_ZVAL(obj);
+ MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ object_init_ex(obj,ptr_ce_swig_LassoSamlpResponseAbstract);
+ add_property_zval(obj,"_cPtr",_cPtr);
+ *return_value=*obj;
+ }
+with:
+ {
+ swig_type_info *ty = SWIG_TypeDynamicCast(SWIGTYPE_p_LassoXXX, (void **) &result);
+ SWIG_SetPointerZval(return_value, (void *)result, ty, 0);
+ /* Wrap this return value */
+ /* ALTERNATIVE Constructor, make an object wrapper */
+ zval *obj, *_cPtr;
+ MAKE_STD_ZVAL(obj);
+ MAKE_STD_ZVAL(_cPtr);
+ *_cPtr = *return_value;
+ INIT_ZVAL(*return_value);
+ object_init_ex(obj,ptr_ce_swig_LassoSamlpResponseAbstract);
+ add_property_zval(obj,"_cPtr",_cPtr);
+ *return_value=*obj;
+ }
+"""
+
+wrapFile = file('lasso_wrap.c')
+wrap = wrapFile.read()
+wrapFile.close()
+
+i = wrap.find(' {\n swig_type_info *ty = SWIG_TypeDynamicCast(')
+while i >= 0:
+ end = """
+ *return_value=*obj;
+ }
+"""
+ j = wrap.find(end, i) + len(end)
+ segment = wrap[i:j]
+ if 'this_ptr' in segment:
+ segment = segment.replace("""
+ }
+ /* Wrap this return value */
+ if (this_ptr) {
+""", """
+ /* Wrap this return value */
+ if (this_ptr) {
+""")
+
+ segment = segment.replace(end, """
+ *return_value=*obj;
+ }}
+""")
+ else:
+ segment = segment.replace("""
+ }
+ /* Wrap this return value */
+ {
+""", """
+ /* Wrap this return value */
+""")
+ x = segment.find('object_init_ex(obj,') + len('object_init_ex(obj,')
+ y = segment.find(')', x)
+ segment = '%s%s%s' % (segment[:x], 'get_node_info_with_swig(ty)->php', segment[y:])
+ wrap = '%s%s%s' % (wrap[:i], segment, wrap[j:])
+ i = wrap.find(' {\n swig_type_info *ty = SWIG_TypeDynamicCast(', i + len(segment))
+
+wrapFile = file('lasso_wrap_patched.c', 'w')
+wrapFile.write(wrap)
+wrapFile.close()