From 6a7250d71bf8d1d5e31098935dfeafe0309be960 Mon Sep 17 00:00:00 2001 From: Ahti Legonkov Date: Wed, 14 Jan 2015 18:59:53 +0200 Subject: [PATCH 1/2] Fix #307. --- Lib/csharp/enums.swg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/csharp/enums.swg b/Lib/csharp/enums.swg index 9b4acefc0..7bdef6f83 100644 --- a/Lib/csharp/enums.swg +++ b/Lib/csharp/enums.swg @@ -51,7 +51,7 @@ %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = (int)$1;" %typemap(csdirectorin) enum SWIGTYPE "($csclassname)$iminput" %typemap(csdirectorout) enum SWIGTYPE "(int)$cscall" From fd8dcf44bfbd874972c5e6a48e6e052a11489c51 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 14 Jan 2015 12:35:18 +0000 Subject: [PATCH 2/2] C++11 strongly typed enum fixes for directors Tests added for previous commit. Further refinements to patch #308 and fixes #307. --- Examples/test-suite/common.mk | 1 + Examples/test-suite/cpp11_director_enums.i | 14 ++++++++++++++ Lib/csharp/enums.swg | 2 +- Lib/csharp/enumsimple.swg | 4 ++-- Lib/csharp/enumtypesafe.swg | 4 ++-- Lib/go/go.swg | 2 +- 6 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 Examples/test-suite/cpp11_director_enums.i diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index ac2dfd4dd..742db540b 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -516,6 +516,7 @@ CPP11_TEST_CASES = \ cpp11_decltype \ cpp11_default_delete \ cpp11_delegating_constructors \ + cpp11_director_enums \ cpp11_explicit_conversion_operators \ cpp11_final_override \ cpp11_function_objects \ diff --git a/Examples/test-suite/cpp11_director_enums.i b/Examples/test-suite/cpp11_director_enums.i new file mode 100644 index 000000000..420b3c8c9 --- /dev/null +++ b/Examples/test-suite/cpp11_director_enums.i @@ -0,0 +1,14 @@ +%module(directors="1") cpp11_director_enums + +%warnfilter(SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) Cpp11DirectorEnumsCallback::g; + +%director Cpp11DirectorEnumsCallback; + +%inline %{ +enum class Color { Red, Green, Blue=10 }; +struct Cpp11DirectorEnumsCallback { + virtual Color f(Color c) = 0; + virtual const Color & g(const Color &c) = 0; + virtual ~Cpp11DirectorEnumsCallback() {} +}; +%} diff --git a/Lib/csharp/enums.swg b/Lib/csharp/enums.swg index 7bdef6f83..5cc265476 100644 --- a/Lib/csharp/enums.swg +++ b/Lib/csharp/enums.swg @@ -18,7 +18,7 @@ %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1;" +%typemap(directorin) const enum SWIGTYPE & "$input = (int)$1;" %typemap(csdirectorin) const enum SWIGTYPE & "($*csclassname)$iminput" %typemap(csdirectorout) const enum SWIGTYPE & "(int)$cscall" diff --git a/Lib/csharp/enumsimple.swg b/Lib/csharp/enumsimple.swg index 484443652..24e4bcf18 100644 --- a/Lib/csharp/enumsimple.swg +++ b/Lib/csharp/enumsimple.swg @@ -20,7 +20,7 @@ %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1;" +%typemap(directorin) const enum SWIGTYPE & "$input = (int)$1;" %typemap(csdirectorin) const enum SWIGTYPE & "$iminput" %typemap(csdirectorout) const enum SWIGTYPE & "$cscall" @@ -53,7 +53,7 @@ %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = (int)$1;" %typemap(csdirectorin) enum SWIGTYPE "$iminput" %typemap(csdirectorout) enum SWIGTYPE "$cscall" diff --git a/Lib/csharp/enumtypesafe.swg b/Lib/csharp/enumtypesafe.swg index b7079343c..fd6801730 100644 --- a/Lib/csharp/enumtypesafe.swg +++ b/Lib/csharp/enumtypesafe.swg @@ -19,7 +19,7 @@ %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1;" +%typemap(directorin) const enum SWIGTYPE & "$input = (int)$1;" %typemap(csdirectorin) const enum SWIGTYPE & "$*csclassname.swigToEnum($iminput)" %typemap(csdirectorout) const enum SWIGTYPE & "$cscall.swigValue" @@ -52,7 +52,7 @@ %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = (int)$1;" %typemap(csdirectorin) enum SWIGTYPE "$csclassname.swigToEnum($iminput)" %typemap(csdirectorout) enum SWIGTYPE "$cscall.swigValue" diff --git a/Lib/go/go.swg b/Lib/go/go.swg index c680844c4..e0ad5d147 100644 --- a/Lib/go/go.swg +++ b/Lib/go/go.swg @@ -379,7 +379,7 @@ %{ $result = (intgo)$1; %} %typemap(directorin) enum SWIGTYPE -%{ $input = ($1_ltype)$1; %} +%{ $input = (intgo)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %}