diff --git a/Examples/test-suite/li_std_string_extra.i b/Examples/test-suite/li_std_string_extra.i index 6bef12ff4..1fc2225ca 100644 --- a/Examples/test-suite/li_std_string_extra.i +++ b/Examples/test-suite/li_std_string_extra.i @@ -49,6 +49,14 @@ std::basic_string,std::allocator > test_value_ return x; } +std::basic_string,std::allocator > test_value_basic_overload(std::basic_string,std::allocator > x) { + return x; +} + +std::basic_string,std::allocator > test_value_basic_overload(int) { + return "int"; +} + #ifdef SWIGPYTHON_BUILTIN bool is_python_builtin() { return true; } #else diff --git a/Examples/test-suite/python/li_std_string_extra_runme.py b/Examples/test-suite/python/li_std_string_extra_runme.py index b65f0774a..9835eaa81 100644 --- a/Examples/test-suite/python/li_std_string_extra_runme.py +++ b/Examples/test-suite/python/li_std_string_extra_runme.py @@ -87,6 +87,24 @@ if li_std_string_extra.test_value_basic2(x) != x: if li_std_string_extra.test_value_basic3(x) != x: raise RuntimeError, "bad string mapping" +if li_std_string_extra.test_value_basic_overload(x) != x: + raise RuntimeError, "bad overload string" + +if li_std_string_extra.test_value_basic_overload(123) != "int": + raise RuntimeError, "bad overload int" + +try: + li_std_string_extra.test_value_basic_overload([x]) + raise RuntimeError, "should throw NotImplementedError" +except NotImplementedError: + pass + +try: + li_std_string_extra.test_value_basic_overload([123]) + raise RuntimeError, "should throw NotImplementedError" +except NotImplementedError: + pass + # Global variables s = "initial string" if li_std_string_extra.cvar.GlobalString2 != "global string 2": diff --git a/Lib/octave/std_basic_string.i b/Lib/octave/std_basic_string.i index 19712e8d0..01a2c34a2 100644 --- a/Lib/octave/std_basic_string.i +++ b/Lib/octave/std_basic_string.i @@ -10,24 +10,20 @@ %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsCharPtrAndSize") { SWIGINTERN int -SWIG_AsPtr(std::basic_string)(octave_value obj, std::string **val) -{ +SWIG_AsPtr(std::basic_string)(octave_value obj, std::string **val) { if (obj.is_string()) { if (val) *val = new std::string(obj.string_value()); return SWIG_NEWOBJ; } - if (val) - error("a string is expected"); - return 0; + return SWIG_ERROR; } } %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromCharPtrAndSize") { SWIGINTERNINLINE octave_value - SWIG_From(std::basic_string)(const std::string& s) - { + SWIG_From(std::basic_string)(const std::string& s) { return SWIG_FromCharPtrAndSize(s.data(), s.size()); } } @@ -45,41 +41,20 @@ SWIGINTERNINLINE octave_value %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsWCharPtrAndSize") { SWIGINTERN int - SWIG_AsPtr(std::basic_string)(PyObject* obj, std::wstring **val) - { - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string *"); - std::wstring *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { - if (val) *val = vptr; - return SWIG_OLDOBJ; - } else { - PyErr_Clear(); - wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { - if (buf) { - if (val) *val = new std::wstring(buf, size - 1); - if (alloc == SWIG_NEWOBJ) %delete_array(buf); - return SWIG_NEWOBJ; - } - } else { - PyErr_Clear(); - } - if (val) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(PyExc_TypeError,"a wstring is expected"); - SWIG_PYTHON_THREAD_END_BLOCK; - } - return 0; - } +SWIG_AsPtr(std::basic_string)(octave_value obj, std::wstring **val) { + if (obj.is_string()) { + if (val) + *val = new std::wstring(obj.string_value()); + return SWIG_NEWOBJ; } + return SWIG_ERROR; +} } %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromWCharPtrAndSize") { SWIGINTERNINLINE PyObject* - SWIG_From(std::basic_string)(const std::wstring& s) - { + SWIG_From(std::basic_string)(const std::wstring& s) { return SWIG_FromWCharPtrAndSize(s.data(), s.size()); } } diff --git a/Lib/python/std_basic_string.i b/Lib/python/std_basic_string.i index 7d3366db5..e3f524dbd 100644 --- a/Lib/python/std_basic_string.i +++ b/Lib/python/std_basic_string.i @@ -9,41 +9,34 @@ %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsCharPtrAndSize") { SWIGINTERN int -SWIG_AsPtr(std::basic_string)(PyObject* obj, std::string **val) -{ - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string *"); - std::string *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { +SWIG_AsPtr(std::basic_string)(PyObject* obj, std::string **val) { + static swig_type_info* string_info = SWIG_TypeQuery("std::basic_string *"); + std::string *vptr; + if (SWIG_IsOK(SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0))) { if (val) *val = vptr; return SWIG_OLDOBJ; } else { PyErr_Clear(); char* buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { + if (SWIG_IsOK(SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc))) { if (buf) { if (val) *val = new std::string(buf, size - 1); if (alloc == SWIG_NEWOBJ) %delete_array(buf); return SWIG_NEWOBJ; + } else { + if (val) *val = 0; + return SWIG_OLDOBJ; } - } else { - PyErr_Clear(); - } - if (val) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(PyExc_TypeError,"a string is expected"); - SWIG_PYTHON_THREAD_END_BLOCK; } - return 0; + return SWIG_ERROR; } -} +} } %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromCharPtrAndSize") { SWIGINTERNINLINE PyObject* - SWIG_From(std::basic_string)(const std::string& s) - { + SWIG_From(std::basic_string)(const std::string& s) { return SWIG_FromCharPtrAndSize(s.data(), s.size()); } } @@ -59,41 +52,34 @@ SWIGINTERNINLINE PyObject* %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsWCharPtrAndSize") { SWIGINTERN int - SWIG_AsPtr(std::basic_string)(PyObject* obj, std::wstring **val) - { - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string *"); - std::wstring *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { - if (val) *val = vptr; - return SWIG_OLDOBJ; - } else { - PyErr_Clear(); - wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { - if (buf) { - if (val) *val = new std::wstring(buf, size - 1); - if (alloc == SWIG_NEWOBJ) %delete_array(buf); - return SWIG_NEWOBJ; - } +SWIG_AsPtr(std::basic_string)(PyObject* obj, std::wstring **val) { + static swig_type_info* string_info = SWIG_TypeQuery("std::basic_string *"); + std::wstring *vptr; + if (SWIG_IsOK(SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0))) { + if (val) *val = vptr; + return SWIG_OLDOBJ; + } else { + PyErr_Clear(); + wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; + if (SWIG_IsOK(SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc))) { + if (buf) { + if (val) *val = new std::wstring(buf, size - 1); + if (alloc == SWIG_NEWOBJ) %delete_array(buf); + return SWIG_NEWOBJ; } else { - PyErr_Clear(); - } - if (val) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(PyExc_TypeError,"a wstring is expected"); - SWIG_PYTHON_THREAD_END_BLOCK; + if (val) *val = 0; + return SWIG_OLDOBJ; } - return 0; } + return SWIG_ERROR; } } +} %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromWCharPtrAndSize") { SWIGINTERNINLINE PyObject* - SWIG_From(std::basic_string)(const std::wstring& s) - { + SWIG_From(std::basic_string)(const std::wstring& s) { return SWIG_FromWCharPtrAndSize(s.data(), s.size()); } } diff --git a/Lib/ruby/std_basic_string.i b/Lib/ruby/std_basic_string.i index 4435b220d..ba13ba764 100644 --- a/Lib/ruby/std_basic_string.i +++ b/Lib/ruby/std_basic_string.i @@ -13,36 +13,30 @@ %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsCharPtrAndSize") { SWIGINTERN int -SWIG_AsPtr(std::basic_string)(VALUE obj, std::string **val) -{ - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string *"); - std::string *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { +SWIG_AsPtr(std::basic_string)(VALUE obj, std::string **val) { + static swig_type_info* string_info = SWIG_TypeQuery("std::basic_string *"); + std::string *vptr; + if (SWIG_IsOK(SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0))) { if (val) *val = vptr; return SWIG_OLDOBJ; } else { char* buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { + if (SWIG_IsOK(SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc))) { if (buf) { if (val) *val = new std::string(buf, size - 1); if (alloc == SWIG_NEWOBJ) %delete_array(buf); return SWIG_NEWOBJ; } } - if (val) { - rb_raise( rb_eTypeError, "a string is expected"); - } - return 0; + return SWIG_ERROR; } -} +} } %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromCharPtrAndSize") { SWIGINTERNINLINE VALUE - SWIG_From(std::basic_string)(const std::string& s) - { + SWIG_From(std::basic_string)(const std::string& s) { return SWIG_FromCharPtrAndSize(s.data(), s.size()); } } @@ -65,36 +59,30 @@ SWIGINTERNINLINE VALUE %fragment(SWIG_AsPtr_frag(std::basic_string),"header", fragment="SWIG_AsWCharPtrAndSize") { SWIGINTERN int - SWIG_AsPtr(std::basic_string)(VALUE obj, std::wstring **val) - { - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string *"); - std::wstring *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { - if (val) *val = vptr; - return SWIG_OLDOBJ; - } else { - wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { - if (buf) { - if (val) *val = new std::wstring(buf, size - 1); - if (alloc == SWIG_NEWOBJ) %delete_array(buf); - return SWIG_NEWOBJ; - } +SWIG_AsPtr(std::basic_string)(VALUE obj, std::wstring **val) { + static swig_type_info* string_info = SWIG_TypeQuery("std::basic_string *"); + std::wstring *vptr; + if (SWIG_IsOK(SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0))) { + if (val) *val = vptr; + return SWIG_OLDOBJ; + } else { + wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; + if (SWIG_IsOK(SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc))) { + if (buf) { + if (val) *val = new std::wstring(buf, size - 1); + if (alloc == SWIG_NEWOBJ) %delete_array(buf); + return SWIG_NEWOBJ; } - if (val) { - rb_raise( rb_eTypeError, "a string is expected"); - } - return 0; } + return SWIG_ERROR; } } +} %fragment(SWIG_From_frag(std::basic_string),"header", fragment="SWIG_FromWCharPtrAndSize") { SWIGINTERNINLINE VALUE - SWIG_From(std::basic_string)(const std::wstring& s) - { + SWIG_From(std::basic_string)(const std::wstring& s) { return SWIG_FromWCharPtrAndSize(s.data(), s.size()); } } diff --git a/Lib/scilab/std_basic_string.i b/Lib/scilab/std_basic_string.i index 43b660db6..b57353816 100644 --- a/Lib/scilab/std_basic_string.i +++ b/Lib/scilab/std_basic_string.i @@ -21,8 +21,7 @@ SWIG_AsPtr_dec(std::basic_string)(int _iVar, std::basic_string **_ps delete[] buf; } return SWIG_NEWOBJ; - } - else { + } else { if (_pstValue) { *_pstValue = NULL; }