diff --git a/include/chaiscript/dispatchkit/proxy_functions.hpp b/include/chaiscript/dispatchkit/proxy_functions.hpp index 2bf81d36..e9f803d5 100644 --- a/include/chaiscript/dispatchkit/proxy_functions.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions.hpp @@ -819,7 +819,8 @@ namespace chaiscript plist.begin(), std::back_inserter(newplist), [](const Type_Info &ti, const Boxed_Value ¶m) -> Boxed_Value { - if (ti.is_arithmetic() && param.get_type_info().is_arithmetic()) { + if (ti.is_arithmetic() && param.get_type_info().is_arithmetic() + && param.get_type_info() != ti) { return Boxed_Number(param).get_as(ti).bv; } else { return param; @@ -827,8 +828,6 @@ namespace chaiscript } ); - - try { return (*(matching_func->second))(newplist, t_conversions); } catch (const exception::bad_boxed_cast &) { diff --git a/include/chaiscript/dispatchkit/type_info.hpp b/include/chaiscript/dispatchkit/type_info.hpp index 664e4d3c..592271a8 100644 --- a/include/chaiscript/dispatchkit/type_info.hpp +++ b/include/chaiscript/dispatchkit/type_info.hpp @@ -47,6 +47,16 @@ namespace chaiscript return m_type_info < ti.m_type_info; } + constexpr bool operator!=(const Type_Info &ti) const noexcept + { + return !(operator==(ti)); + } + + constexpr bool operator!=(const std::type_info &ti) const noexcept + { + return !(operator==(ti)); + } + constexpr bool operator==(const Type_Info &ti) const noexcept { return ti.m_type_info == m_type_info diff --git a/releasenotes.md b/releasenotes.md index 162bb752..551e82f1 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -38,8 +38,8 @@ Current Version: 6.0.0 * File location tracking has been rewritten; this currently means error location reporting is not as good as it was * Tracing capability needs to be tested and vetted - - +### Changes since 5.8.3 +* Fix case with some numeric conversions mixed with numerics that do not need conversion ### Changes since 5.8.2 * Add support for reference of pointer return types diff --git a/unittests/compiled_tests.cpp b/unittests/compiled_tests.cpp index 61e642a6..ff0e3230 100644 --- a/unittests/compiled_tests.cpp +++ b/unittests/compiled_tests.cpp @@ -952,4 +952,24 @@ TEST_CASE("Parse floats with non-posix locale") +bool FindBitmap(int &ox, int &oy, long) { + ox = 1; + oy = 2; + return true; +} + +TEST_CASE("Mismatched numeric types only convert necessary params") +{ + chaiscript::ChaiScript chai; + + chai.add(chaiscript::fun(&FindBitmap), "FindBitmap"); + int x = 0; + int y = 0; + chai.add(chaiscript::var(&x), "x"); + chai.add(chaiscript::var(&y), "y"); + chai.eval( "if ( FindBitmap ( x, y, 0) ) { print(\"found at \" + to_string(x) + \", \" + to_string(y))}" ); + CHECK(x == 1); + CHECK(y == 2); + +}