From f7510720d3e6a0f08c774f464d8df8ae7042a1c6 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Tue, 10 Jan 2006 07:27:12 +0000 Subject: [PATCH] add native bool support git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8345 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Examples/test-suite/overload_simple.i | 8 +++++ .../test-suite/perl5/overload_simple_runme.pl | 9 +++++ SWIG/Lib/perl5/perlprimtypes.swg | 36 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/SWIG/Examples/test-suite/overload_simple.i b/SWIG/Examples/test-suite/overload_simple.i index d9d1e5e4f..3e3b322b0 100644 --- a/SWIG/Examples/test-suite/overload_simple.i +++ b/SWIG/Examples/test-suite/overload_simple.i @@ -108,6 +108,14 @@ static char *bar(void *) { }; +bool fbool(bool b) { + return b; +} + +int fbool(int b) { + return b; +} + char *fint(int) { return (char*) "fint:int"; } diff --git a/SWIG/Examples/test-suite/perl5/overload_simple_runme.pl b/SWIG/Examples/test-suite/perl5/overload_simple_runme.pl index 0335124f4..a2c50b8d2 100644 --- a/SWIG/Examples/test-suite/perl5/overload_simple_runme.pl +++ b/SWIG/Examples/test-suite/perl5/overload_simple_runme.pl @@ -286,3 +286,12 @@ if (!(overload_simple::fid("3.0", "3.0") eq "fid:doubledouble")) { if (!(overload_simple::fid("3", 3) eq "fid:intint")) { die("fid(int,int)"); } + + +if (!(overload_simple::fbool(0)) != overload_simple::fbool(1)) { + die("fbool(bool)"); +} + +if (2 != overload_simple::fbool(2)) { + die("fbool(int)"); +} diff --git a/SWIG/Lib/perl5/perlprimtypes.swg b/SWIG/Lib/perl5/perlprimtypes.swg index 7ab8a1be7..d59cdb590 100644 --- a/SWIG/Lib/perl5/perlprimtypes.swg +++ b/SWIG/Lib/perl5/perlprimtypes.swg @@ -2,6 +2,42 @@ * Primitive Types * ------------------------------------------------------------ */ +/* bool */ + +%fragment(SWIG_From_frag(bool),"header") { +SWIGINTERNINLINE SV * +SWIG_From_dec(bool)(bool value) +{ + SV *obj = sv_newmortal(); + if (value) { + sv_setsv(obj, &PL_sv_yes); + } else { + sv_setsv(obj, &PL_sv_no); + } + return obj; +} +} + +%fragment(SWIG_AsVal_frag(bool),"header", + fragment="SWIG_CanCastAsInteger") { +SWIGINTERN int +SWIG_AsVal_dec(bool)(SV *obj, bool* val) +{ + if (obj == &PL_sv_yes) { + if (val) *val = true; + return SWIG_OK; + } else if (obj == &PL_sv_no) { + if (val) *val = false; + return SWIG_OK; + } else { + if (val) *val = SvTRUE(obj) ? true: false; + return SWIG_AddCast(SWIG_OK); + } + return SWIG_TypeError; +} +} + + /* long */ %fragment(SWIG_From_frag(long),"header") {