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; {