From b33f0a08bce03dd8e8025475b0d3fa92d7b10348 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 29 Jan 2016 16:04:06 -0700 Subject: [PATCH] Remove initializer_list conversion due to the issues mentioned here: http://stackoverflow.com/questions/18895583/convert-a-vectort-to-initializer-listt --- .../dispatchkit/type_conversions.hpp | 42 ------------------- unittests/compiled_tests.cpp | 42 ------------------- 2 files changed, 84 deletions(-) diff --git a/include/chaiscript/dispatchkit/type_conversions.hpp b/include/chaiscript/dispatchkit/type_conversions.hpp index 1fcabe99..aaa089e0 100644 --- a/include/chaiscript/dispatchkit/type_conversions.hpp +++ b/include/chaiscript/dispatchkit/type_conversions.hpp @@ -310,48 +310,6 @@ namespace chaiscript private: Callable m_func; }; -#ifndef CHAISCRIPT_MSVC_12 - //http://stackoverflow.com/questions/18895583/convert-a-vectort-to-initializer-listt - constexpr size_t DEFAULT_MAX_LENGTH = 128; - - template struct backingValue { static V value; }; - template V backingValue::value; - - template struct backingList { static std::initializer_list list; }; - template - std::initializer_list backingList::list = { static_cast(backingValue::value)... }; - - template - static typename std::enable_if< sizeof...(Vcount) >= maxLength, - std::initializer_list >::type generate_n(It begin, It end, It current) - { - throw std::length_error("More than maxLength elements in range."); - } - - template - static typename std::enable_if< sizeof...(Vcount) < maxLength, - std::initializer_list >::type generate_n(It begin, It end, It current) - { - if (current != end) - { - return generate_n(begin, end, ++current); - } - - current = begin; - for (auto it = backingList::list.begin(); - it != backingList::list.end(); - ++current, ++it) - *const_cast(&*it) = *current; - - return backingList::list; - } - - template - std::initializer_list range_to_initializer_list(It begin, It end) - { - return detail::generate_n(begin, end, begin); - } -#endif } class Type_Conversions diff --git a/unittests/compiled_tests.cpp b/unittests/compiled_tests.cpp index 4d65bee2..28e7d4ca 100644 --- a/unittests/compiled_tests.cpp +++ b/unittests/compiled_tests.cpp @@ -913,46 +913,4 @@ TEST_CASE("Return of converted type from script") chai.add(chaiscript::user_type(), "Returned_Converted_Config"); } -#ifndef CHAISCRIPT_MSVC_12 -TEST_CASE("Return initializer_list") -{ - chaiscript::ChaiScript chai; - - chai.add(chaiscript::initializer_list_conversion>()); - - auto initlist = chai.eval>(R"( - return [11, 22, 33, 44]; - )"); - - CHECK(initlist.size() == 4); - CHECK(typeid(decltype(initlist)) == typeid(std::initializer_list)); -} - -bool initializer_list_of_enums_interface(std::initializer_list initlist) -{ - return initlist.size() == 3 && *initlist.begin() == THREE; -} - -TEST_CASE("Call from script with initializer_list argument") -{ - chaiscript::ChaiScript chai; - - chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module()); - chaiscript::utility::add_class(*m, - "Utility_Test_Numbers", - { { ONE, "ONE" }, - { TWO, "TWO" }, - { THREE, "THREE" } - } - ); - chai.add(m); - - chai.add(chaiscript::initializer_list_conversion>()); - chai.add(chaiscript::fun(&initializer_list_of_enums_interface), "initializer_list_of_enums_interface"); - - auto interface_result = chai.eval("return initializer_list_of_enums_interface([THREE, TWO, ONE]);"); - - CHECK(interface_result == true); -} -#endif