diff --git a/include/chaiscript/dispatchkit/bootstrap.hpp b/include/chaiscript/dispatchkit/bootstrap.hpp index 114a99a..5cf0f48 100644 --- a/include/chaiscript/dispatchkit/bootstrap.hpp +++ b/include/chaiscript/dispatchkit/bootstrap.hpp @@ -558,7 +558,7 @@ namespace chaiscript template Boxed_Value ptr_assign(Boxed_Value lhs, const boost::shared_ptr::type> &rhs) { - if (lhs.is_unknown() + if (lhs.is_undef() || (!lhs.get_type_info().is_const() && lhs.get_type_info().bare_equal(chaiscript::detail::Get_Type_Info::get()))) { lhs.assign(Boxed_Value(rhs)); @@ -580,7 +580,7 @@ namespace chaiscript */ static Boxed_Value unknown_assign(Boxed_Value lhs, Boxed_Value rhs) { - if (lhs.is_unknown()) + if (lhs.is_undef()) { return (lhs.assign(rhs)); } else { @@ -708,6 +708,7 @@ namespace chaiscript m->add(fun(&Dynamic_Object::get_attr), "get_attr"); m->eval("def Dynamic_Object::clone() { var new_o := Dynamic_Object(this.get_type_name()); for_each(this.get_attrs(), bind(fun(new_o, x) { new_o.get_attr(x.first) = x.second; }, new_o, _) ); return new_o; }"); + m->add(fun(&Boxed_Value::is_undef), "is_undef"); basic_constructors("bool", m); oper_assign(m); diff --git a/include/chaiscript/dispatchkit/boxed_value.hpp b/include/chaiscript/dispatchkit/boxed_value.hpp index 9a6bc56..e4b5c3b 100644 --- a/include/chaiscript/dispatchkit/boxed_value.hpp +++ b/include/chaiscript/dispatchkit/boxed_value.hpp @@ -293,9 +293,9 @@ namespace chaiscript /** * return true if the object is uninitialized */ - bool is_unknown() const + bool is_undef() const { - return m_data->m_type_info.is_unknown(); + return m_data->m_type_info.is_undef(); } boost::any get() const @@ -594,7 +594,7 @@ namespace chaiscript Boxed_POD_Value(const Boxed_Value &v) : d(0), i(0), m_isfloat(false) { - if (v.get_type_info().is_unknown()) + if (v.get_type_info().is_undef()) { throw boost::bad_any_cast(); } diff --git a/include/chaiscript/dispatchkit/proxy_functions.hpp b/include/chaiscript/dispatchkit/proxy_functions.hpp index 4f3b641..ebd85b9 100644 --- a/include/chaiscript/dispatchkit/proxy_functions.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions.hpp @@ -92,7 +92,7 @@ namespace chaiscript const Type_Info &ti = types[1]; - if (ti.is_unknown() || vals[0].get_type_info().is_unknown() + if (ti.is_undef() || vals[0].get_type_info().is_undef() || ti.bare_equal(user_type()) || ti.bare_equal(user_type()) || ti.bare_equal(vals[0].get_type_info())) diff --git a/include/chaiscript/dispatchkit/type_info.hpp b/include/chaiscript/dispatchkit/type_info.hpp index f16094c..3b3eb49 100644 --- a/include/chaiscript/dispatchkit/type_info.hpp +++ b/include/chaiscript/dispatchkit/type_info.hpp @@ -29,14 +29,14 @@ namespace chaiscript : m_is_const(t_is_const), m_is_reference(t_is_reference), m_is_pointer(t_is_pointer), m_is_void(t_is_void), m_type_info(t_ti), m_bare_type_info(t_bareti), - m_is_unknown(false) + m_is_undef(false) { } Type_Info() : m_is_const(false), m_is_reference(false), m_is_pointer(false), m_is_void(false), m_type_info(0), m_bare_type_info(0), - m_is_unknown(true) + m_is_undef(true) { } @@ -45,7 +45,7 @@ namespace chaiscript m_is_pointer(ti.m_is_pointer), m_is_void(ti.m_is_void), m_type_info(ti.m_type_info), m_bare_type_info(ti.m_bare_type_info), - m_is_unknown(ti.m_is_unknown) + m_is_undef(ti.m_is_undef) { } @@ -57,7 +57,7 @@ namespace chaiscript m_is_void = ti.m_is_void; m_type_info = ti.m_type_info; m_bare_type_info = ti.m_bare_type_info; - m_is_unknown = ti.m_is_unknown; + m_is_undef = ti.m_is_undef; return *this; } @@ -86,7 +86,7 @@ namespace chaiscript bool is_const() const { return m_is_const; } bool is_reference() const { return m_is_reference; } bool is_void() const { return m_is_void; } - bool is_unknown() const { return m_is_unknown || m_bare_type_info == 0; } + bool is_undef() const { return m_is_undef || m_bare_type_info == 0; } std::string bare_name() const { @@ -105,7 +105,7 @@ namespace chaiscript bool m_is_void; const std::type_info *m_type_info; const std::type_info *m_bare_type_info; - bool m_is_unknown; + bool m_is_undef; }; namespace detail diff --git a/include/chaiscript/language/chaiscript_eval.hpp b/include/chaiscript/language/chaiscript_eval.hpp index 8862895..3a639db 100644 --- a/include/chaiscript/language/chaiscript_eval.hpp +++ b/include/chaiscript/language/chaiscript_eval.hpp @@ -171,7 +171,7 @@ namespace chaiscript Boxed_Value lhs = eval_token(ss, node->children[i]); try { - if (lhs.is_unknown()) + if (lhs.is_undef()) { retval = ss.call_function("clone", Param_List_Builder() << retval); } @@ -191,7 +191,7 @@ namespace chaiscript } else if (node->children[i+1]->text == ":=") { Boxed_Value lhs = eval_token(ss, node->children[i]); - if (lhs.is_unknown() || type_match(lhs, retval)) { + if (lhs.is_undef() || type_match(lhs, retval)) { lhs.assign(retval); } else { diff --git a/unittests/is_undef.chai b/unittests/is_undef.chai new file mode 100644 index 0000000..384761d --- /dev/null +++ b/unittests/is_undef.chai @@ -0,0 +1,4 @@ +var i; +print(i.is_undef()); +i = 5; +print(i.is_undef()); diff --git a/unittests/is_undef.txt b/unittests/is_undef.txt new file mode 100644 index 0000000..da29283 --- /dev/null +++ b/unittests/is_undef.txt @@ -0,0 +1,2 @@ +true +false