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 diff --git a/include/chaiscript/dispatchkit/type_conversions.hpp b/include/chaiscript/dispatchkit/type_conversions.hpp index 1fcabe9..b5bce8d 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 @@ -634,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 } 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 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(){})) + +