From: <ol...@us...> - 2009-12-03 05:21:54
|
Revision: 11767 http://swig.svn.sourceforge.net/swig/?rev=11767&view=rev Author: olly Date: 2009-12-03 05:21:48 +0000 (Thu, 03 Dec 2009) Log Message: ----------- Add long long and unsigned long long const reference typemaps. Modified Paths: -------------- trunk/Examples/test-suite/php/primitive_ref_runme.php trunk/Lib/php/php.swg Modified: trunk/Examples/test-suite/php/primitive_ref_runme.php =================================================================== --- trunk/Examples/test-suite/php/primitive_ref_runme.php 2009-12-03 04:48:54 UTC (rev 11766) +++ trunk/Examples/test-suite/php/primitive_ref_runme.php 2009-12-03 05:21:48 UTC (rev 11767) @@ -17,9 +17,9 @@ check::equal(ref_float(3.5), 3.5, "ref_float failed"); check::equal(ref_double(3.5), 3.5, "ref_double failed"); check::equal(ref_char('x'), 'x', "ref_char failed"); -//check::equal(ref_longlong(0x123456789ABCDEF0), 0x123456789ABCDEF0, "ref_longlong failed"); -//check::equal(ref_ulonglong(0xF23456789ABCDEF0), 0xF23456789ABCDEF0, "ref_ulonglong failed"); -printf("TODO: long long and unsigned long long const reference typemaps\n"); +check::equal(ref_longlong(0x123456789ABCDEF0), 0x123456789ABCDEF0, "ref_longlong failed"); +# 0xF23456789ABCDEF0 won't fit in a long, so PHP makes it a double, but SWIG opts to return it as a string. +check::equal((double)ref_ulonglong(0xF23456789ABCDEF0), 0xF23456789ABCDEF0, "ref_ulonglong failed"); check::done(); ?> Modified: trunk/Lib/php/php.swg =================================================================== --- trunk/Lib/php/php.swg 2009-12-03 04:48:54 UTC (rev 11766) +++ trunk/Lib/php/php.swg 2009-12-03 05:21:48 UTC (rev 11767) @@ -198,6 +198,29 @@ ZVAL_LONG(return_value,$1); } +%typemap(out) long long +%{ + if ((long long)LONG_MIN <= $1 && $1 <= (long long)LONG_MAX) { + return_value->value.lval = (long)($1); + return_value->type = IS_LONG; + } else { + char temp[256]; + sprintf(temp, "%lld", $1); + ZVAL_STRING(return_value, temp, 1); + } +%} +%typemap(out) unsigned long long +%{ + if ($1 <= (unsigned long long)LONG_MAX) { + return_value->value.lval = (long)($1); + return_value->type = IS_LONG; + } else { + char temp[256]; + sprintf(temp, "%llu", $1); + ZVAL_STRING(return_value, temp, 1); + } +%} + %typemap(out) const int &, const unsigned int &, const short &, @@ -213,6 +236,29 @@ ZVAL_LONG(return_value,*$1); } +%typemap(out) const long long & +%{ + if ((long long)LONG_MIN <= *$1 && *$1 <= (long long)LONG_MAX) { + return_value->value.lval = (long)(*$1); + return_value->type = IS_LONG; + } else { + char temp[256]; + sprintf(temp, "%lld", *$1); + ZVAL_STRING(return_value, temp, 1); + } +%} +%typemap(out) const unsigned long long & +%{ + if (*$1 <= (unsigned long long)LONG_MAX) { + return_value->value.lval = (long)(*$1); + return_value->type = IS_LONG; + } else { + char temp[256]; + sprintf(temp, "%llu", *$1); + ZVAL_STRING(return_value, temp, 1); + } +%} + %typemap(directorin) int, unsigned int, short, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |