From 03bd7005bbbb6190280877b61a1f209b2c67bb22 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Mon, 3 May 2010 22:58:27 +0000 Subject: [PATCH] Fix typemap delete regression introduced in rev 11838 git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12008 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Examples/test-suite/common.mk | 1 + .../test-suite/python/typemap_delete_runme.py | 5 +++++ Examples/test-suite/typemap_delete.i | 16 ++++++++++++++++ Source/Swig/typemap.c | 8 ++++---- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 Examples/test-suite/python/typemap_delete_runme.py create mode 100644 Examples/test-suite/typemap_delete.i diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 64dea58b7..831b1b78f 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -387,6 +387,7 @@ CPP_TEST_CASES += \ typedef_scope \ typedef_sizet \ typedef_struct \ + typemap_delete \ typemap_global_scope \ typemap_namespace \ typemap_ns_using \ diff --git a/Examples/test-suite/python/typemap_delete_runme.py b/Examples/test-suite/python/typemap_delete_runme.py new file mode 100644 index 000000000..582a2167c --- /dev/null +++ b/Examples/test-suite/python/typemap_delete_runme.py @@ -0,0 +1,5 @@ +import typemap_delete + +r = typemap_delete.Rect(123) +if r.val != 123: + raise RuntimeError diff --git a/Examples/test-suite/typemap_delete.i b/Examples/test-suite/typemap_delete.i new file mode 100644 index 000000000..eb6abe73c --- /dev/null +++ b/Examples/test-suite/typemap_delete.i @@ -0,0 +1,16 @@ +%module typemap_delete + +%typemap(in) Rect* (Rect temp) { + $1 = 0; + will_not_compile +} + +%typemap(in) Rect*; + +%inline %{ +struct Rect +{ + int val; + Rect(int v) : val(v) {} +}; +%} diff --git a/Source/Swig/typemap.c b/Source/Swig/typemap.c index cbe881577..2bf806e66 100644 --- a/Source/Swig/typemap.c +++ b/Source/Swig/typemap.c @@ -724,7 +724,7 @@ static Hash *typemap_search(const_String_or_char_ptr tmap_method, SwigType *type /* Try to get an exact type-match */ tm = get_typemap(ts, ctype); result = typemap_search_helper(debug_display, tm, tm_method, ctype, cqualifiedname, cname, &backup); - if (result) + if (result && Getattr(result, "code")) goto ret_result; { @@ -734,7 +734,7 @@ static Hash *typemap_search(const_String_or_char_ptr tmap_method, SwigType *type tm = get_typemap(ts, template_prefix); result = typemap_search_helper(debug_display, tm, tm_method, template_prefix, cqualifiedname, cname, &backup); Delete(template_prefix); - if (result) + if (result && Getattr(result, "code")) goto ret_result; } } @@ -748,7 +748,7 @@ static Hash *typemap_search(const_String_or_char_ptr tmap_method, SwigType *type tm = get_typemap(ts, noarrays); result = typemap_search_helper(debug_display, tm, tm_method, noarrays, cqualifiedname, cname, &backup); Delete(noarrays); - if (result) + if (result && Getattr(result, "code")) goto ret_result; } @@ -780,7 +780,7 @@ static Hash *typemap_search(const_String_or_char_ptr tmap_method, SwigType *type while (primitive) { tm = get_typemap(ts, primitive); result = typemap_search_helper(debug_display, tm, tm_method, primitive, cqualifiedname, cname, &backup); - if (result) + if (result && Getattr(result, "code")) goto ret_result; {