diff options
Diffstat (limited to 'devtools/swigwin-1.3.34/Lib/php4/utils.i')
| -rw-r--r-- | devtools/swigwin-1.3.34/Lib/php4/utils.i | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/devtools/swigwin-1.3.34/Lib/php4/utils.i b/devtools/swigwin-1.3.34/Lib/php4/utils.i new file mode 100644 index 0000000..f724118 --- /dev/null +++ b/devtools/swigwin-1.3.34/Lib/php4/utils.i @@ -0,0 +1,59 @@ + +%define CONVERT_BOOL_IN(lvar,t,invar) + convert_to_boolean_ex(invar); + lvar = (t) Z_LVAL_PP(invar); +%enddef + +%define CONVERT_INT_IN(lvar,t,invar) + convert_to_long_ex(invar); + lvar = (t) Z_LVAL_PP(invar); +%enddef + +%define CONVERT_INT_OUT(lvar,invar) + lvar = (t) Z_LVAL_PP(invar); +%enddef + +%define CONVERT_FLOAT_IN(lvar,t,invar) + convert_to_double_ex(invar); + lvar = (t) Z_DVAL_PP(invar); +%enddef + +%define CONVERT_CHAR_IN(lvar,t,invar) + convert_to_string_ex(invar); + lvar = (t) *Z_STRVAL_PP(invar); +%enddef + +%define CONVERT_STRING_IN(lvar,t,invar) + convert_to_string_ex(invar); + lvar = (t) Z_STRVAL_PP(invar); +%enddef + +%define %pass_by_val( TYPE, CONVERT_IN ) +%typemap(in) TYPE +%{ + CONVERT_IN($1,$1_ltype,$input); +%} +%enddef + +%fragment("t_output_helper","header") %{ +void +t_output_helper( zval **target, zval *o) { + if ( (*target)->type == IS_ARRAY ) { + /* it's already an array, just append */ + add_next_index_zval( *target, o ); + return; + } + if ( (*target)->type == IS_NULL ) { + REPLACE_ZVAL_VALUE(target,o,1); + return; + } + zval *tmp; + ALLOC_INIT_ZVAL(tmp); + *tmp = **target; + zval_copy_ctor(tmp); + array_init(*target); + add_next_index_zval( *target, tmp); + add_next_index_zval( *target, o); + +} +%} |