Various cleanups and fixes for older compilers
This commit is contained in:
@@ -243,18 +243,18 @@ namespace chaiscript
|
|||||||
template<typename ContainerType>
|
template<typename ContainerType>
|
||||||
ModulePtr random_access_container_type(const std::string &/*type*/, ModulePtr m = std::make_shared<Module>())
|
ModulePtr random_access_container_type(const std::string &/*type*/, ModulePtr m = std::make_shared<Module>())
|
||||||
{
|
{
|
||||||
// cppcheck-suppress syntaxError
|
|
||||||
typedef typename ContainerType::reference(ContainerType::*indexoper)(size_t);
|
|
||||||
|
|
||||||
//In the interest of runtime safety for the m, we prefer the at() method for [] access,
|
//In the interest of runtime safety for the m, we prefer the at() method for [] access,
|
||||||
//to throw an exception in an out of bounds condition.
|
//to throw an exception in an out of bounds condition.
|
||||||
m->add(
|
m->add(
|
||||||
fun(std::function<typename ContainerType::reference (ContainerType *, int)>
|
fun(
|
||||||
(std::mem_fn(static_cast<indexoper>(&ContainerType::at)))), "[]");
|
[](ContainerType &c, int index) -> typename ContainerType::reference {
|
||||||
|
return c.at(index);
|
||||||
|
}), "[]");
|
||||||
|
|
||||||
m->add(
|
m->add(
|
||||||
fun(
|
fun(
|
||||||
[](const ContainerType *c, int index) -> typename ContainerType::const_reference {
|
[](const ContainerType &c, int index) -> typename ContainerType::const_reference {
|
||||||
return c->at(index);
|
return c.at(index);
|
||||||
}), "[]");
|
}), "[]");
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
@@ -60,7 +60,7 @@ namespace chaiscript
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void check_divide_by_zero(T t, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr)
|
inline static void check_divide_by_zero(T t, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr)
|
||||||
{
|
{
|
||||||
#ifndef CHAISCRIPT_NO_PROTECT_DIVIDEBYZERO
|
#ifndef CHAISCRIPT_NO_PROTECT_DIVIDEBYZERO
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
@@ -70,7 +70,7 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void check_divide_by_zero(T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr)
|
inline static void check_divide_by_zero(T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ namespace chaiscript
|
|||||||
{
|
{
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
inline static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
||||||
{
|
{
|
||||||
switch (t_oper)
|
switch (t_oper)
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,7 @@ namespace chaiscript
|
|||||||
struct binary
|
struct binary
|
||||||
{
|
{
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
static Boxed_Value go(Operators::Opers t_oper, T &t, const U &u, const Boxed_Value &t_lhs)
|
inline static Boxed_Value go(Operators::Opers t_oper, T &t, const U &u, const Boxed_Value &t_lhs)
|
||||||
{
|
{
|
||||||
switch (t_oper)
|
switch (t_oper)
|
||||||
{
|
{
|
||||||
@@ -140,7 +140,7 @@ namespace chaiscript
|
|||||||
struct binary_int
|
struct binary_int
|
||||||
{
|
{
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
static Boxed_Value go(Operators::Opers t_oper, T &t, const U &u, const Boxed_Value &t_lhs)
|
inline static Boxed_Value go(Operators::Opers t_oper, T &t, const U &u, const Boxed_Value &t_lhs)
|
||||||
{
|
{
|
||||||
switch (t_oper)
|
switch (t_oper)
|
||||||
{
|
{
|
||||||
@@ -173,7 +173,7 @@ namespace chaiscript
|
|||||||
struct const_binary_int
|
struct const_binary_int
|
||||||
{
|
{
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
inline static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
||||||
{
|
{
|
||||||
switch (t_oper)
|
switch (t_oper)
|
||||||
{
|
{
|
||||||
@@ -201,7 +201,7 @@ namespace chaiscript
|
|||||||
struct const_binary
|
struct const_binary
|
||||||
{
|
{
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
inline static Boxed_Value go(Operators::Opers t_oper, const T &t, const U &u, const Boxed_Value &)
|
||||||
{
|
{
|
||||||
switch (t_oper)
|
switch (t_oper)
|
||||||
{
|
{
|
||||||
@@ -227,7 +227,7 @@ namespace chaiscript
|
|||||||
template<typename LHS, typename RHS, bool Float>
|
template<typename LHS, typename RHS, bool Float>
|
||||||
struct Go
|
struct Go
|
||||||
{
|
{
|
||||||
static Boxed_Value go(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
inline static Boxed_Value go(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
||||||
{
|
{
|
||||||
if (t_oper > Operators::boolean_flag && t_oper < Operators::non_const_flag)
|
if (t_oper > Operators::boolean_flag && t_oper < Operators::non_const_flag)
|
||||||
{
|
{
|
||||||
@@ -249,7 +249,7 @@ namespace chaiscript
|
|||||||
template<typename LHS, typename RHS>
|
template<typename LHS, typename RHS>
|
||||||
struct Go<LHS, RHS, true>
|
struct Go<LHS, RHS, true>
|
||||||
{
|
{
|
||||||
static Boxed_Value go(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
inline static Boxed_Value go(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
||||||
{
|
{
|
||||||
if (t_oper > Operators::boolean_flag && t_oper < Operators::non_const_flag)
|
if (t_oper > Operators::boolean_flag && t_oper < Operators::non_const_flag)
|
||||||
{
|
{
|
||||||
@@ -269,7 +269,7 @@ namespace chaiscript
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename LHS, bool Float>
|
template<typename LHS, bool Float>
|
||||||
static Boxed_Value oper_rhs(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
inline static Boxed_Value oper_rhs(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
||||||
{
|
{
|
||||||
const auto &inp_ = t_rhs.get_type_info();
|
const auto &inp_ = t_rhs.get_type_info();
|
||||||
|
|
||||||
@@ -310,7 +310,7 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Boxed_Value oper(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
inline static Boxed_Value oper(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
|
||||||
{
|
{
|
||||||
const Type_Info &inp_ = t_lhs.get_type_info();
|
const Type_Info &inp_ = t_lhs.get_type_info();
|
||||||
|
|
||||||
|
@@ -47,29 +47,32 @@ namespace chaiscript {
|
|||||||
Ret (Class::*m_func)(Param...);
|
Ret (Class::*m_func)(Param...);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct Function_Signature
|
struct Function_Signature
|
||||||
{
|
{
|
||||||
|
|
||||||
template<typename Ret, typename ... Param>
|
|
||||||
static Ret deduce_ret_type(Function_Signature<Ret (Param...)> *);
|
|
||||||
|
|
||||||
typedef T Signature;
|
|
||||||
typedef Function_Signature<T> *ptr_type;
|
|
||||||
typedef decltype(deduce_ret_type(ptr_type(nullptr))) Return_Type;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename Ret, typename ... Params>
|
||||||
|
struct Function_Signature<Ret (Params...)>
|
||||||
|
{
|
||||||
|
typedef Ret Return_Type;
|
||||||
|
typedef Ret (Signature)(Params...);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Ret, typename T, typename ... Params>
|
||||||
|
struct Function_Signature<Ret (T::*)(Params...) const>
|
||||||
|
{
|
||||||
|
typedef Ret Return_Type;
|
||||||
|
typedef Ret (Signature)(Params...);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct Callable_Traits
|
struct Callable_Traits
|
||||||
{
|
{
|
||||||
|
typedef typename Function_Signature<decltype(&T::operator())>::Signature Signature;
|
||||||
template<typename Ret, typename ... Param>
|
typedef typename Function_Signature<decltype(&T::operator())>::Return_Type Return_Type;
|
||||||
static Function_Signature<Ret (Param...)> deduce_sig_type(Ret (T::*)(Param...) const);
|
|
||||||
|
|
||||||
typedef typename decltype(deduce_sig_type(&T::operator()))::Signature Signature;
|
|
||||||
typedef decltype(deduce_sig_type(&T::operator())) Signature_Object;
|
|
||||||
typedef typename Signature_Object::Return_Type Return_Type;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -558,7 +558,7 @@ namespace chaiscript
|
|||||||
public:
|
public:
|
||||||
Proxy_Function_Callable_Impl(Callable f)
|
Proxy_Function_Callable_Impl(Callable f)
|
||||||
: Proxy_Function_Impl_Base(detail::build_param_type_list(static_cast<Func *>(nullptr))),
|
: Proxy_Function_Impl_Base(detail::build_param_type_list(static_cast<Func *>(nullptr))),
|
||||||
m_f(std::move(f)), m_dummy_func(nullptr)
|
m_f(std::move(f))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,7 +566,7 @@ namespace chaiscript
|
|||||||
|
|
||||||
virtual bool compare_types_with_cast(const std::vector<Boxed_Value> &vals, const Type_Conversions &t_conversions) const CHAISCRIPT_OVERRIDE
|
virtual bool compare_types_with_cast(const std::vector<Boxed_Value> &vals, const Type_Conversions &t_conversions) const CHAISCRIPT_OVERRIDE
|
||||||
{
|
{
|
||||||
return detail::compare_types_cast(m_dummy_func, vals, t_conversions);
|
return detail::compare_types_cast(static_cast<Func *>(nullptr), vals, t_conversions);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool operator==(const Proxy_Function_Base &t_func) const CHAISCRIPT_OVERRIDE
|
virtual bool operator==(const Proxy_Function_Base &t_func) const CHAISCRIPT_OVERRIDE
|
||||||
@@ -582,10 +582,8 @@ namespace chaiscript
|
|||||||
return detail::Do_Call<Return_Type>::template go<Func>(m_f, params, t_conversions);
|
return detail::Do_Call<Return_Type>::template go<Func>(m_f, params, t_conversions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Callable m_f;
|
Callable m_f;
|
||||||
Func *m_dummy_func;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -611,17 +609,16 @@ namespace chaiscript
|
|||||||
public:
|
public:
|
||||||
Assignable_Proxy_Function_Impl(std::reference_wrapper<std::function<Func>> t_f, std::shared_ptr<std::function<Func>> t_ptr)
|
Assignable_Proxy_Function_Impl(std::reference_wrapper<std::function<Func>> t_f, std::shared_ptr<std::function<Func>> t_ptr)
|
||||||
: Assignable_Proxy_Function(detail::build_param_type_list(static_cast<Func *>(nullptr))),
|
: Assignable_Proxy_Function(detail::build_param_type_list(static_cast<Func *>(nullptr))),
|
||||||
m_f(std::move(t_f)), m_shared_ptr_holder(std::move(t_ptr)), m_dummy_func(nullptr)
|
m_f(std::move(t_f)), m_shared_ptr_holder(std::move(t_ptr))
|
||||||
{
|
{
|
||||||
assert(!m_shared_ptr_holder || m_shared_ptr_holder.get() == &m_f.get());
|
assert(!m_shared_ptr_holder || m_shared_ptr_holder.get() == &m_f.get());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~Assignable_Proxy_Function_Impl() {}
|
virtual ~Assignable_Proxy_Function_Impl() {}
|
||||||
|
|
||||||
virtual bool compare_types_with_cast(const std::vector<Boxed_Value> &vals, const Type_Conversions &t_conversions) const CHAISCRIPT_OVERRIDE
|
virtual bool compare_types_with_cast(const std::vector<Boxed_Value> &vals, const Type_Conversions &t_conversions) const CHAISCRIPT_OVERRIDE
|
||||||
{
|
{
|
||||||
return detail::compare_types_cast(m_dummy_func, vals, t_conversions);
|
return detail::compare_types_cast(static_cast<Func *>(nullptr), vals, t_conversions);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool operator==(const Proxy_Function_Base &t_func) const CHAISCRIPT_OVERRIDE
|
virtual bool operator==(const Proxy_Function_Base &t_func) const CHAISCRIPT_OVERRIDE
|
||||||
@@ -648,7 +645,6 @@ namespace chaiscript
|
|||||||
private:
|
private:
|
||||||
std::reference_wrapper<std::function<Func>> m_f;
|
std::reference_wrapper<std::function<Func>> m_f;
|
||||||
std::shared_ptr<std::function<Func>> m_shared_ptr_holder;
|
std::shared_ptr<std::function<Func>> m_shared_ptr_holder;
|
||||||
Func *m_dummy_func;
|
|
||||||
};
|
};
|
||||||
/// Attribute getter Proxy_Function implementation
|
/// Attribute getter Proxy_Function implementation
|
||||||
template<typename T, typename Class>
|
template<typename T, typename Class>
|
||||||
|
@@ -98,7 +98,7 @@ namespace chaiscript
|
|||||||
template<typename Ret, typename ... Params>
|
template<typename Ret, typename ... Params>
|
||||||
bool compare_types_cast(Ret (*)(Params...),
|
bool compare_types_cast(Ret (*)(Params...),
|
||||||
const std::vector<Boxed_Value> ¶ms, const Type_Conversions &t_conversions)
|
const std::vector<Boxed_Value> ¶ms, const Type_Conversions &t_conversions)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Try_Cast<Params...>::do_try(params, 0, t_conversions);
|
Try_Cast<Params...>::do_try(params, 0, t_conversions);
|
||||||
} catch (const exception::bad_boxed_cast &) {
|
} catch (const exception::bad_boxed_cast &) {
|
||||||
|
Reference in New Issue
Block a user