diff --git a/Examples/test-suite/python/li_std_string.i b/Examples/test-suite/python/li_std_string.i index 9c32a47f1..3f4f6a7ca 100644 --- a/Examples/test-suite/python/li_std_string.i +++ b/Examples/test-suite/python/li_std_string.i @@ -1,7 +1,12 @@ %module li_std_string + +%naturalvar; + + %include %include + %inline %{ struct A : std::string diff --git a/Lib/std/std_basic_string.i b/Lib/std/std_basic_string.i index 2dc3cdb4b..7b0898a3e 100644 --- a/Lib/std/std_basic_string.i +++ b/Lib/std/std_basic_string.i @@ -8,6 +8,11 @@ #include %} +namespace std +{ + %naturalvar basic_string; +} + namespace std { diff --git a/Lib/std/std_string.i b/Lib/std/std_string.i index a3a3ae4f4..35fcdd16c 100644 --- a/Lib/std/std_string.i +++ b/Lib/std/std_string.i @@ -5,6 +5,7 @@ namespace std { %std_comp_methods(basic_string); + %naturalvar string; typedef basic_string string; } diff --git a/Lib/std/std_wstring.i b/Lib/std/std_wstring.i index ff06aa8bf..e54d21200 100644 --- a/Lib/std/std_wstring.i +++ b/Lib/std/std_wstring.i @@ -6,6 +6,7 @@ namespace std { %std_comp_methods(basic_string); + %naturalvar wstring; typedef basic_string wstring; } diff --git a/Lib/typemaps/std_string.swg b/Lib/typemaps/std_string.swg index ec44d39c5..691bf2ccf 100644 --- a/Lib/typemaps/std_string.swg +++ b/Lib/typemaps/std_string.swg @@ -1,6 +1,8 @@ // // String // + + #ifndef SWIG_STD_BASIC_STRING #define SWIG_STD_STRING @@ -12,6 +14,7 @@ namespace std { + %naturalvar string; class string; } diff --git a/Lib/typemaps/std_wstring.swg b/Lib/typemaps/std_wstring.swg index 6dcf59976..670685fca 100644 --- a/Lib/typemaps/std_wstring.swg +++ b/Lib/typemaps/std_wstring.swg @@ -12,6 +12,7 @@ namespace std { + %naturalvar wstring; class wstring; } diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx index 0aa72ffac..5c6a7062a 100644 --- a/Source/Modules/lang.cxx +++ b/Source/Modules/lang.cxx @@ -386,14 +386,12 @@ int use_naturalvar_mode(Node *n) { /* look for feature in the class */ SwigType *ty = Getattr(n,"type"); if (SwigType_isclass(ty)) { - SwigType *rty = SwigType_typedef_resolve_all(ty); - SwigType *qty = SwigType_typedef_qualified(rty); - Node *cn = classhash ? Getattr(classhash,qty) : 0; - if (cn) { - nvar = GetFlag(cn,"feature:naturalvar"); - } - Delete(rty); - Delete(qty); + Node *m = Copy(n); + SwigType *tys = SwigType_strip_qualifiers(ty); + Swig_features_get(Swig_cparse_features(), 0, tys, 0, m); + nvar = GetFlag(m,"feature:naturalvar"); + Delete(tys); + Delete(m); } } return nvar ? CWRAP_NATURAL_VAR : 0;