From: <wsf...@us...> - 2011-02-19 14:54:00
|
Revision: 12480 http://swig.svn.sourceforge.net/swig/?rev=12480&view=rev Author: wsfulton Date: 2011-02-19 14:53:53 +0000 (Sat, 19 Feb 2011) Log Message: ----------- [PHP] Add missing INPUT, OUTPUT and INOUT typemaps in the typemaps.i library for primitive reference types as well as signed char * and bool *. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/php/typemaps.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2011-02-19 13:28:43 UTC (rev 12479) +++ trunk/CHANGES.current 2011-02-19 14:53:53 UTC (rev 12480) @@ -5,6 +5,10 @@ Version 2.0.2 (in progress) =========================== +2011-02-19: wsfulton + [PHP] Add missing INPUT, OUTPUT and INOUT typemaps in the typemaps.i library + for primitive reference types as well as signed char * and bool *. + 2011-02-19: olly [PHP] Address bug in PHP on some platforms/architectures which results in zend_error_noreturn() not being available using Modified: trunk/Lib/php/typemaps.i =================================================================== --- trunk/Lib/php/typemaps.i 2011-02-19 13:28:43 UTC (rev 12479) +++ trunk/Lib/php/typemaps.i 2011-02-19 14:53:53 UTC (rev 12480) @@ -24,76 +24,108 @@ * its value can be changed by foo(). * ----------------------------------------------------------------------------- */ -%define double_typemap(TYPE) -%typemap(in) TYPE *INPUT(TYPE temp) +%define BOOL_TYPEMAP(TYPE) +%typemap(in) TYPE *INPUT(TYPE temp), TYPE &INPUT(TYPE temp) %{ + convert_to_boolean_ex($input); + temp = Z_LVAL_PP($input) ? true : false; + $1 = &temp; +%} +%typemap(argout) TYPE *INPUT, TYPE &INPUT ""; +%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp), TYPE &OUTPUT(TYPE temp) "$1 = &temp;"; +%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT, TYPE &OUTPUT +{ + zval *o; + MAKE_STD_ZVAL(o); + ZVAL_BOOL(o,temp$argnum); + t_output_helper( &$result, o ); +} +%typemap(in) TYPE *REFERENCE (TYPE lvalue), TYPE &REFERENCE (TYPE lvalue) +%{ + convert_to_boolean_ex($input); + lvalue = (*$input)->value.lval ? true : false; + $1 = &lvalue; +%} +%typemap(argout) TYPE *REFERENCE, TYPE &REFERENCE +%{ + (*$arg)->value.lval = lvalue$argnum ? true : false; + (*$arg)->type = IS_BOOL; +%} +%enddef + +%define DOUBLE_TYPEMAP(TYPE) +%typemap(in) TYPE *INPUT(TYPE temp), TYPE &INPUT(TYPE temp) +%{ convert_to_double_ex($input); temp = (TYPE) Z_DVAL_PP($input); $1 = &temp; %} -%typemap(argout) TYPE *INPUT ""; -%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp) "$1 = &temp;"; -%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT +%typemap(argout) TYPE *INPUT, TYPE &INPUT ""; +%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp), TYPE &OUTPUT(TYPE temp) "$1 = &temp;"; +%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT, TYPE &OUTPUT { zval *o; MAKE_STD_ZVAL(o); ZVAL_DOUBLE(o,temp$argnum); t_output_helper( &$result, o ); } -%typemap(in) TYPE *REFERENCE (TYPE dvalue) +%typemap(in) TYPE *REFERENCE (TYPE dvalue), TYPE &REFERENCE (TYPE dvalue) %{ convert_to_double_ex($input); dvalue = (TYPE) (*$input)->value.dval; $1 = &dvalue; %} -%typemap(argout) TYPE *REFERENCE +%typemap(argout) TYPE *REFERENCE, TYPE &REFERENCE %{ $1->value.dval = (double)(lvalue$argnum); $1->type = IS_DOUBLE; %} %enddef -%define int_typemap(TYPE) -%typemap(in) TYPE *INPUT(TYPE temp) +%define INT_TYPEMAP(TYPE) +%typemap(in) TYPE *INPUT(TYPE temp), TYPE &INPUT(TYPE temp) %{ convert_to_long_ex($input); temp = (TYPE) Z_LVAL_PP($input); $1 = &temp; %} -%typemap(argout) TYPE *INPUT ""; -%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp) "$1 = &temp;"; -%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT +%typemap(argout) TYPE *INPUT, TYPE &INPUT ""; +%typemap(in,numinputs=0) TYPE *OUTPUT(TYPE temp), TYPE &OUTPUT(TYPE temp) "$1 = &temp;"; +%typemap(argout,fragment="t_output_helper") TYPE *OUTPUT, TYPE &OUTPUT { zval *o; MAKE_STD_ZVAL(o); ZVAL_LONG(o,temp$argnum); t_output_helper( &$result, o ); } -%typemap(in) TYPE *REFERENCE (TYPE lvalue) +%typemap(in) TYPE *REFERENCE (TYPE lvalue), TYPE &REFERENCE (TYPE lvalue) %{ convert_to_long_ex($input); lvalue = (TYPE) (*$input)->value.lval; $1 = &lvalue; %} -%typemap(argout) TYPE *REFERENCE +%typemap(argout) TYPE *REFERENCE, TYPE &REFERENCE %{ (*$arg)->value.lval = (long)(lvalue$argnum); (*$arg)->type = IS_LONG; %} %enddef -double_typemap(float); -double_typemap(double); +BOOL_TYPEMAP(bool); -int_typemap(int); -int_typemap(short); -int_typemap(long); -int_typemap(unsigned int); -int_typemap(unsigned short); -int_typemap(unsigned long); -int_typemap(unsigned char); +DOUBLE_TYPEMAP(float); +DOUBLE_TYPEMAP(double); -int_typemap(long long); +INT_TYPEMAP(int); +INT_TYPEMAP(short); +INT_TYPEMAP(long); +INT_TYPEMAP(unsigned int); +INT_TYPEMAP(unsigned short); +INT_TYPEMAP(unsigned long); +INT_TYPEMAP(unsigned char); +INT_TYPEMAP(signed char); + +INT_TYPEMAP(long long); %typemap(argout,fragment="t_output_helper") long long *OUTPUT { zval *o; @@ -134,7 +166,7 @@ ZVAL_STRING($result, temp, 1); } %} -int_typemap(unsigned long long); +INT_TYPEMAP(unsigned long long); %typemap(argout,fragment="t_output_helper") unsigned long long *OUTPUT { zval *o; @@ -176,6 +208,7 @@ } %} +%typemap(in) bool *INOUT = bool *INPUT; %typemap(in) float *INOUT = float *INPUT; %typemap(in) double *INOUT = double *INPUT; @@ -188,7 +221,9 @@ %typemap(in) unsigned long *INOUT = unsigned long *INPUT; %typemap(in) unsigned char *INOUT = unsigned char *INPUT; %typemap(in) unsigned long long *INOUT = unsigned long long *INPUT; +%typemap(in) signed char *INOUT = signed char *INPUT; +%typemap(in) bool &INOUT = bool *INPUT; %typemap(in) float &INOUT = float *INPUT; %typemap(in) double &INOUT = double *INPUT; @@ -203,7 +238,9 @@ %typemap(in) unsigned char &INOUT = unsigned char *INPUT; %typemap(in) unsigned long long &INOUT = unsigned long long *INPUT; %typemap(in) unsigned long long &INPUT = unsigned long long *INPUT; +%typemap(in) signed char &INOUT = signed char *INPUT; +%typemap(argout) bool *INOUT = bool *OUTPUT; %typemap(argout) float *INOUT = float *OUTPUT; %typemap(argout) double *INOUT= double *OUTPUT; @@ -215,7 +252,9 @@ %typemap(argout) unsigned long *INOUT = unsigned long *OUTPUT; %typemap(argout) unsigned char *INOUT = unsigned char *OUTPUT; %typemap(argout) unsigned long long *INOUT = unsigned long long *OUTPUT; +%typemap(argout) signed char *INOUT = signed char *OUTPUT; +%typemap(argout) bool &INOUT = bool *OUTPUT; %typemap(argout) float &INOUT = float *OUTPUT; %typemap(argout) double &INOUT= double *OUTPUT; @@ -227,6 +266,7 @@ %typemap(argout) unsigned long &INOUT = unsigned long *OUTPUT; %typemap(argout) unsigned char &INOUT = unsigned char *OUTPUT; %typemap(argout) unsigned long long &INOUT = unsigned long long *OUTPUT; +%typemap(argout) signed char &INOUT = signed char *OUTPUT; %typemap(in) char INPUT[ANY] ( char temp[$1_dim0] ) %{ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |