From b33f0a08bce03dd8e8025475b0d3fa92d7b10348 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 29 Jan 2016 16:04:06 -0700 Subject: [PATCH 1/4] 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 1fcabe9..aaa089e 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 4d65bee..28e7d4c 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 From 7222390c9664c7db752938e187835319042b6e29 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 29 Jan 2016 16:12:10 -0700 Subject: [PATCH 2/4] Fix build --- .../dispatchkit/type_conversions.hpp | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/include/chaiscript/dispatchkit/type_conversions.hpp b/include/chaiscript/dispatchkit/type_conversions.hpp index aaa089e..b5bce8d 100644 --- a/include/chaiscript/dispatchkit/type_conversions.hpp +++ b/include/chaiscript/dispatchkit/type_conversions.hpp @@ -592,26 +592,6 @@ namespace chaiscript return chaiscript::make_shared>(user_type>(), user_type(), func); } -#ifndef CHAISCRIPT_MSVC_12 - template - Type_Conversion initializer_list_conversion() - { - auto func = [](const Boxed_Value &t_bv) -> Boxed_Value { - const std::vector &from_vec = detail::Cast_Helper &>::cast(t_bv, nullptr); - - std::vector vec; - vec.reserve(from_vec.size()); - for (const auto &bv : from_vec) - { - vec.push_back(detail::Cast_Helper::cast(bv, nullptr)); - } - - return Boxed_Value(detail::range_to_initializer_list(vec.begin(), vec.end())); - }; - auto ret = chaiscript::make_shared>(user_type>(), user_type(), func); - return ret; - } -#endif } From 5b1b1dbcb42e1be7ec529bd02a8d5672cf3c3b8d Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 29 Jan 2016 17:20:19 -0700 Subject: [PATCH 3/4] Added appveyor.yml --- appveyor.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..c402efe --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,16 @@ +version: 5.7.2.{build} +os: Visual Studio 2015 +environment: + matrix: + - {} +build_script: +- cmd: >- + mkdir build + + cd build + + cmake c:\Projects\chaiscript -G "Visual Studio 14" + + cmake --build . --config Debug +test_script: +- cmd: ctest -C Debug From b2ae317877b419a23fc9eb1c429bbcf6392e2bca Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 29 Jan 2016 19:13:10 -0700 Subject: [PATCH 4/4] Seperate out async moves into a separate test --- unittests/move_async.chai | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 unittests/move_async.chai diff --git a/unittests/move_async.chai b/unittests/move_async.chai new file mode 100644 index 0000000..7975a7c --- /dev/null +++ b/unittests/move_async.chai @@ -0,0 +1,17 @@ +load_module("stl_extra") + +auto x = List() +// push_back newly constructed return value that's non-copyable +x.push_front(async(fun(){})) + +// push_front newly constructed return value that's non-copyable +x.push_front(async(fun(){})) + + + +// push_back newly constructed return value that's non-copyable + +var v = [] +v.push_back(async(fun(){})) + +