diff options
author | Emmanuel Raviart <eraviart@entrouvert.com> | 2005-01-13 13:09:00 +0000 |
---|---|---|
committer | Emmanuel Raviart <eraviart@entrouvert.com> | 2005-01-13 13:09:00 +0000 |
commit | 4411851ee26ed5edf09c30c3cee6aa76650c5a37 (patch) | |
tree | 0993c3309fb1aaefa440dc3680397adcf0a6eb67 /swig | |
parent | 69e3012ea735ee512356b49bd3dd66aa319b0674 (diff) | |
download | lasso-4411851ee26ed5edf09c30c3cee6aa76650c5a37.tar.gz lasso-4411851ee26ed5edf09c30c3cee6aa76650c5a37.tar.xz lasso-4411851ee26ed5edf09c30c3cee6aa76650c5a37.zip |
PHP Binding: Added support for NULL return value.
Diffstat (limited to 'swig')
-rw-r--r-- | swig/Lasso.i | 85 |
1 files changed, 59 insertions, 26 deletions
diff --git a/swig/Lasso.i b/swig/Lasso.i index bcfba415..dfcd9eee 100644 --- a/swig/Lasso.i +++ b/swig/Lasso.i @@ -138,31 +138,6 @@ Warning = _lasso.Warning ***********************************************************************/ -#define %nonewobject %feature("new","") - -#if defined(SWIGPYTHON) -%typemap(in,parse="z") char *, char [ANY] ""; -#endif - - -#if defined(SWIGPHP4) -%{ -/* ZVAL_STRING segfault when s is null */ -#undef ZVAL_STRING -#define ZVAL_STRING(z, s, duplicate) { \ - char *__s=(s); \ - if (__s) { \ - (z)->value.str.len = strlen(__s); \ - (z)->value.str.val = (duplicate?estrndup(__s, (z)->value.str.len):__s); \ - } else { \ - (z)->value.str.len = 0; \ - (z)->value.str.val = empty_string; \ - } \ - (z)->type = IS_STRING; \ - } -%} -#endif - /* GLib types */ #define gboolean bool @@ -188,7 +163,65 @@ int lasso_init(void); #endif int lasso_shutdown(void); -/* Helper variables and functions */ +/* Swig tuning */ + +#define %nonewobject %feature("new","") + +#if defined(SWIGPYTHON) +%typemap(in,parse="z") char * ""; +#endif + +#if defined(SWIGPHP4) + +%{ +/* ZVAL_STRING segfault when s is null */ +#undef ZVAL_STRING +#define ZVAL_STRING(z, s, duplicate) { \ + char *__s=(s); \ + if (__s) { \ + (z)->value.str.len = strlen(__s); \ + (z)->value.str.val = (duplicate?estrndup(__s, (z)->value.str.len):__s); \ + } else { \ + (z)->value.str.len = 0; \ + (z)->value.str.val = empty_string; \ + } \ + (z)->type = IS_STRING; \ +} +%} + +/* Override default typemap, to accept NULL pointer. Because SWIG_ConvertPtr doesn't accept NULL */ +/* values. */ +%typemap(in) SWIGTYPE * %{ + if (SWIG_ConvertPtr(*$input, (void **) &$1, $1_descriptor) < 0) { + if ((*$input)->type == IS_NULL) + $1 = 0; + else + zend_error(E_ERROR, "Type error in argument %d of $symname. Expected %s", + $argnum-argbase, $1_descriptor->name); + } +%} + +/* Override default typemap, to be able to return NULL pointers. */ +%typemap(out) SWIGTYPE * %{ + if (!$1) { + ZVAL_NULL(return_value); + } else { + SWIG_SetPointerZval(return_value, (void *)$1, $1_descriptor, $owner); + } +%} + +%typemap(out) SWIGTYPE *DYNAMIC %{ + if (!$1) { + ZVAL_NULL(return_value); + } else { + swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor, (void **) &$1); + SWIG_SetPointerZval(return_value, (void *)$1, ty, $owner); + } +%} + +#endif /* if defined(SWIGPHP4) */ + +/* Dynamic casting handling */ #if defined(SWIGCSHARP) || defined(SWIGJAVA) |