Merge branch 'develop' into update_travis_toolchain
Conflicts: .decent_ci-Windows.yaml CMakeLists.txt include/chaiscript/chaiscript_defines.hpp
This commit is contained in:
commit
947d7c2591
@ -2,8 +2,4 @@ compilers:
|
|||||||
- name: clang
|
- name: clang
|
||||||
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=$COMMIT_SHA
|
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=$COMMIT_SHA
|
||||||
build_package_generator: TBZ2
|
build_package_generator: TBZ2
|
||||||
- name: clang
|
|
||||||
build_type: Debug
|
|
||||||
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=$COMMIT_SHA
|
|
||||||
skip_packaging: true
|
|
||||||
|
|
||||||
|
@ -10,4 +10,12 @@ compilers:
|
|||||||
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=%COMMIT_SHA%
|
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=%COMMIT_SHA%
|
||||||
compiler_extra_flags: /analyze
|
compiler_extra_flags: /analyze
|
||||||
skip_packaging: true
|
skip_packaging: true
|
||||||
|
- name: Visual Studio
|
||||||
|
version: 14
|
||||||
|
build_type: Debug
|
||||||
|
architecture: Win64
|
||||||
|
cmake_extra_flags: -DBUILD_SAMPLES:BOOL=ON -DBUILD_PACKAGE:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCOMMIT_SHA=%COMMIT_SHA%
|
||||||
|
compiler_extra_flags: /analyze
|
||||||
|
skip_packaging: true
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,11 +158,14 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions(/W4)
|
add_definitions(/W4 /w14545 /w34242 /w34254 /w34287 /w44263 /w44265 /w44296 /w44311 /w44826 /we4289 /w14546 /w14547 /w14549 /w14555 /w14619 /w14905 /w14906 /w14928)
|
||||||
|
|
||||||
# VS2013 doesn't have magic statics
|
|
||||||
if (MSVC_VERSION STREQUAL "1800")
|
if (MSVC_VERSION STREQUAL "1800")
|
||||||
|
# VS2013 doesn't have magic statics
|
||||||
add_definitions(/w44640)
|
add_definitions(/w44640)
|
||||||
|
else()
|
||||||
|
# enum warnings are too noisy on MSVC2013
|
||||||
|
add_definitions(/w34062)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(/bigobj)
|
add_definitions(/bigobj)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
version: 5.7.2.{build}
|
version: 5.8.x.{build}
|
||||||
os: Visual Studio 2015
|
os: Visual Studio 2015
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
@ -14,3 +14,9 @@ build_script:
|
|||||||
cmake --build . --config Debug
|
cmake --build . --config Debug
|
||||||
test_script:
|
test_script:
|
||||||
- cmd: ctest -C Debug
|
- cmd: ctest -C Debug
|
||||||
|
notifications:
|
||||||
|
- provider: Webhook
|
||||||
|
url: https://webhooks.gitter.im/e/9ff725a985b5679d1d5d
|
||||||
|
on_build_success: true
|
||||||
|
on_build_failure: true
|
||||||
|
on_build_status_changed: false
|
||||||
|
@ -67,6 +67,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
namespace chaiscript {
|
namespace chaiscript {
|
||||||
static const int version_major = 6;
|
static const int version_major = 6;
|
||||||
@ -93,6 +95,72 @@ namespace chaiscript {
|
|||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
auto parse_num(const char *t_str) -> typename std::enable_if<std::is_integral<T>::value, T>::type
|
||||||
|
{
|
||||||
|
T t = 0;
|
||||||
|
for (char c = *t_str; (c = *t_str); ++t_str) {
|
||||||
|
if (c < '0' || c > '9') {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
t *= 10;
|
||||||
|
t += c - '0';
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
auto parse_num(const char *t_str) -> typename std::enable_if<!std::is_integral<T>::value, T>::type
|
||||||
|
{
|
||||||
|
T t = 0;
|
||||||
|
T base = 0;
|
||||||
|
T decimal_place = 0;
|
||||||
|
bool exponent = false;
|
||||||
|
bool neg_exponent = false;
|
||||||
|
|
||||||
|
const auto final_value = [](const T val, const T baseval, const bool hasexp, const bool negexp) -> T {
|
||||||
|
if (!hasexp) {
|
||||||
|
return val;
|
||||||
|
} else {
|
||||||
|
return baseval * std::pow(T(10), val*T(negexp?-1:1));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for(; *t_str != '\0'; ++t_str) {
|
||||||
|
char c = *t_str;
|
||||||
|
if (c == '.') {
|
||||||
|
decimal_place = 10;
|
||||||
|
} else if (c == 'e' || c == 'E') {
|
||||||
|
exponent = true;
|
||||||
|
decimal_place = 0;
|
||||||
|
base = t;
|
||||||
|
t = 0;
|
||||||
|
} else if (c == '-' && exponent) {
|
||||||
|
neg_exponent = true;
|
||||||
|
} else if (c == '+' && exponent) {
|
||||||
|
neg_exponent = false;
|
||||||
|
} else if (c < '0' || c > '9') {
|
||||||
|
return final_value(t, base, exponent, neg_exponent);
|
||||||
|
} else if (decimal_place < T(10)) {
|
||||||
|
t *= T(10);
|
||||||
|
t += T(c - '0');
|
||||||
|
} else {
|
||||||
|
t += (T(c - '0') / (T(decimal_place)));
|
||||||
|
decimal_place *= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return final_value(t, base, exponent, neg_exponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T parse_num(const std::string &t_str)
|
||||||
|
{
|
||||||
|
return parse_num<T>(t_str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,12 +43,13 @@ namespace chaiscript
|
|||||||
// this is OK, so we're disabling size/and sign type warnings
|
// this is OK, so we're disabling size/and sign type warnings
|
||||||
#ifdef CHAISCRIPT_MSVC
|
#ifdef CHAISCRIPT_MSVC
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable : 4244 4018 4389 4146 4365 4267)
|
#pragma warning(disable : 4244 4018 4389 4146 4365 4267 4242)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
|
||||||
#pragma GCC diagnostic ignored "-Wpragmas"
|
#pragma GCC diagnostic ignored "-Wpragmas"
|
||||||
#pragma GCC diagnostic ignored "-Wsign-compare"
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
||||||
|
@ -591,14 +591,14 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Adds a new scope to the stack
|
/// Adds a new scope to the stack
|
||||||
void new_scope(Stack_Holder &t_holder)
|
static void new_scope(Stack_Holder &t_holder)
|
||||||
{
|
{
|
||||||
get_stack_data(t_holder).emplace_back();
|
get_stack_data(t_holder).emplace_back();
|
||||||
t_holder.call_params.emplace_back();
|
t_holder.call_params.emplace_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Pops the current scope from the stack
|
/// Pops the current scope from the stack
|
||||||
void pop_scope(Stack_Holder &t_holder)
|
static void pop_scope(Stack_Holder &t_holder)
|
||||||
{
|
{
|
||||||
t_holder.call_params.pop_back();
|
t_holder.call_params.pop_back();
|
||||||
StackData &stack = get_stack_data(t_holder);
|
StackData &stack = get_stack_data(t_holder);
|
||||||
@ -910,8 +910,8 @@ namespace chaiscript
|
|||||||
return m_conversions;
|
return m_conversions;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_attribute_call(const std::vector<Proxy_Function> &t_funs, const std::vector<Boxed_Value> &t_params,
|
static bool is_attribute_call(const std::vector<Proxy_Function> &t_funs, const std::vector<Boxed_Value> &t_params,
|
||||||
bool t_has_params, const Type_Conversions_State &t_conversions) const
|
bool t_has_params, const Type_Conversions_State &t_conversions)
|
||||||
{
|
{
|
||||||
if (!t_has_params || t_params.empty()) {
|
if (!t_has_params || t_params.empty()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -621,11 +621,11 @@ namespace chaiscript
|
|||||||
|
|
||||||
if (float_)
|
if (float_)
|
||||||
{
|
{
|
||||||
return const_var(std::stof(t_val.substr(0,i)));
|
return const_var(parse_num<float>(t_val.substr(0,i)));
|
||||||
} else if (long_) {
|
} else if (long_) {
|
||||||
return const_var(std::stold(t_val.substr(0,i)));
|
return const_var(parse_num<long double>(t_val.substr(0,i)));
|
||||||
} else {
|
} else {
|
||||||
return const_var(std::stod(t_val.substr(0,i)));
|
return const_var(parse_num<double>(t_val.substr(0,i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,16 +212,16 @@ class JSON
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
JSON( T b, typename enable_if<is_same<T,bool>::value>::type* = 0 ) : Internal( b ), Type( Class::Boolean ){}
|
JSON( T b, typename enable_if<is_same<T,bool>::value>::type* = nullptr ) : Internal( b ), Type( Class::Boolean ){}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
JSON( T i, typename enable_if<is_integral<T>::value && !is_same<T,bool>::value>::type* = 0 ) : Internal( long(i) ), Type( Class::Integral ){}
|
JSON( T i, typename enable_if<is_integral<T>::value && !is_same<T,bool>::value>::type* = nullptr ) : Internal( long(i) ), Type( Class::Integral ){}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
JSON( T f, typename enable_if<is_floating_point<T>::value>::type* = 0 ) : Internal( double(f) ), Type( Class::Floating ){}
|
JSON( T f, typename enable_if<is_floating_point<T>::value>::type* = nullptr ) : Internal( double(f) ), Type( Class::Floating ){}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
JSON( T s, typename enable_if<is_convertible<T,string>::value>::type* = 0 ) : Internal( string( s ) ), Type( Class::String ){}
|
JSON( T s, typename enable_if<is_convertible<T,string>::value>::type* = nullptr ) : Internal( string( s ) ), Type( Class::String ){}
|
||||||
|
|
||||||
JSON( std::nullptr_t ) : Internal(), Type( Class::Null ){}
|
JSON( std::nullptr_t ) : Internal(), Type( Class::Null ){}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
<a href="https://www.patreon.com/bePatron?u=2977989&redirect_uri=https%3A%2F%2Fwww.patreon.com%2Flefticus">
|
||||||
|
<img height="40" width="204" src="https://s3-us-west-1.amazonaws.com/widget-images/become-patron-widget-medium%402x.png">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
Master Status: [](https://travis-ci.org/ChaiScript/ChaiScript) [](https://ci.appveyor.com/project/lefticus/chaiscript) [](http://codecov.io/github/ChaiScript/ChaiScript?branch=master)
|
Master Status: [](https://travis-ci.org/ChaiScript/ChaiScript) [](https://ci.appveyor.com/project/lefticus/chaiscript) [](http://codecov.io/github/ChaiScript/ChaiScript?branch=master)
|
||||||
|
|
||||||
Develop Status: [](https://travis-ci.org/ChaiScript/ChaiScript) [](https://ci.appveyor.com/project/lefticus/chaiscript/branch/develop) [](http://codecov.io/github/ChaiScript/ChaiScript?branch=develop)
|
Develop Status: [](https://travis-ci.org/ChaiScript/ChaiScript) [](https://ci.appveyor.com/project/lefticus/chaiscript/branch/develop) [](http://codecov.io/github/ChaiScript/ChaiScript?branch=develop)
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
Notes:
|
Notes:
|
||||||
=======
|
=======
|
||||||
Current Version: 5.8.0
|
Current Version: 5.8.1
|
||||||
|
|
||||||
|
### Changes since 5.8.0
|
||||||
|
* Fix parsing of floats to be locale independent #250
|
||||||
|
* Various warning fixes on various platforms
|
||||||
|
|
||||||
|
|
||||||
### Changes since 5.7.1
|
### Changes since 5.7.1
|
||||||
* Make all parser iterator operations range checked
|
* Make all parser iterator operations range checked
|
||||||
|
1
supporters.md
Normal file
1
supporters.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
3223
unittests/catch.hpp
3223
unittests/catch.hpp
File diff suppressed because it is too large
Load Diff
@ -1,33 +1,31 @@
|
|||||||
// All of these are necessary because of catch.hpp. It's OK, they'll be
|
// All of these are necessary because of catch.hpp. It's OK, they'll be
|
||||||
// caught in other cpp files if chaiscript causes them
|
// caught in other cpp files if chaiscript causes them
|
||||||
|
|
||||||
#include <chaiscript/utility/utility.hpp>
|
|
||||||
#include <chaiscript/dispatchkit/bootstrap_stl.hpp>
|
|
||||||
|
|
||||||
#ifdef CHAISCRIPT_MSVC
|
#ifdef _MSC_VER
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable : 4190 4640 28251 4702 6330)
|
#pragma warning(disable : 4062 4242 4640 4702 6330 28251)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wshadow"
|
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
|
||||||
#pragma GCC diagnostic ignored "-Wold-style-cast"
|
#pragma GCC diagnostic ignored "-Wparentheses"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __llvm__
|
|
||||||
#pragma clang diagnostic push
|
#include <chaiscript/chaiscript.hpp>
|
||||||
#pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
|
#include <chaiscript/utility/utility.hpp>
|
||||||
#pragma clang diagnostic ignored "-Wold-style-cast"
|
#include <chaiscript/dispatchkit/bootstrap_stl.hpp>
|
||||||
#pragma clang diagnostic ignored "-Wexit-time-destructors"
|
|
||||||
#pragma clang diagnostic ignored "-Wfloat-equal"
|
|
||||||
#pragma clang diagnostic ignored "-Wunreachable-code"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CATCH_CONFIG_MAIN
|
#define CATCH_CONFIG_MAIN
|
||||||
|
|
||||||
|
#include <clocale>
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
|
|
||||||
// lambda_tests
|
// lambda_tests
|
||||||
@ -933,7 +931,21 @@ TEST_CASE("Map conversions")
|
|||||||
)");
|
)");
|
||||||
|
|
||||||
CHECK(c == 42);
|
CHECK(c == 42);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("Parse floats with non-posix locale")
|
||||||
|
{
|
||||||
|
#ifdef CHAISCRIPT_MSVC
|
||||||
|
std::setlocale(LC_ALL, "en-ZA");
|
||||||
|
#else
|
||||||
|
std::setlocale(LC_ALL, "en_ZA.utf8");
|
||||||
|
#endif
|
||||||
|
chaiscript::ChaiScript chai;
|
||||||
|
const double parsed = chai.eval<double>("print(1.3); 1.3");
|
||||||
|
CHECK(parsed == Approx(1.3));
|
||||||
|
const std::string str = chai.eval<std::string>("to_string(1.3)");
|
||||||
|
CHECK(str == "1.3");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,30 +1,22 @@
|
|||||||
// Tests to make sure that the order in which function dispatches occur is correct
|
// Tests to make sure that the order in which function dispatches occur is correct
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable : 4062 4242 4640 4702 6330 28251)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
|
||||||
|
#pragma GCC diagnostic ignored "-Wparentheses"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <chaiscript/chaiscript_defines.hpp>
|
#include <chaiscript/chaiscript_defines.hpp>
|
||||||
#include <chaiscript/dispatchkit/type_info.hpp>
|
#include <chaiscript/dispatchkit/type_info.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#ifdef CHAISCRIPT_MSVC
|
|
||||||
#pragma warning(push)
|
|
||||||
#pragma warning(disable : 4190 4640 28251 4702 6330)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wshadow"
|
|
||||||
#pragma GCC diagnostic ignored "-Wold-style-cast"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __llvm__
|
|
||||||
#pragma clang diagnostic push
|
|
||||||
#pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
|
|
||||||
#pragma clang diagnostic ignored "-Wold-style-cast"
|
|
||||||
#pragma clang diagnostic ignored "-Wexit-time-destructors"
|
|
||||||
#pragma clang diagnostic ignored "-Wfloat-equal"
|
|
||||||
#pragma clang diagnostic ignored "-Wunreachable-code"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user