From cdfefed385d673289ec787ee8b0713617bb4c6d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Gro=C3=9F?= Date: Mon, 14 May 2012 20:13:39 +0200 Subject: [PATCH 1/4] Add default constructor for Boxed_Number --- include/chaiscript/dispatchkit/boxed_number.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/chaiscript/dispatchkit/boxed_number.hpp b/include/chaiscript/dispatchkit/boxed_number.hpp index 263619ae..1cb58112 100644 --- a/include/chaiscript/dispatchkit/boxed_number.hpp +++ b/include/chaiscript/dispatchkit/boxed_number.hpp @@ -297,6 +297,11 @@ namespace chaiscript public: + Boxed_Number() + : bv(Boxed_Value(0)) + { + } + Boxed_Number(const Boxed_Value &v) : bv(v) { From 59dfc847aee0892bceb522f1eaec2b753d9859f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Gro=C3=9F?= Date: Mon, 14 May 2012 21:34:28 +0200 Subject: [PATCH 2/4] Make Boxed_Number assignable from Boxed_Value. --- .../chaiscript/dispatchkit/boxed_number.hpp | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/include/chaiscript/dispatchkit/boxed_number.hpp b/include/chaiscript/dispatchkit/boxed_number.hpp index 1cb58112..4814a705 100644 --- a/include/chaiscript/dispatchkit/boxed_number.hpp +++ b/include/chaiscript/dispatchkit/boxed_number.hpp @@ -303,18 +303,8 @@ namespace chaiscript } Boxed_Number(const Boxed_Value &v) - : bv(v) { - const Type_Info &inp_ = v.get_type_info(); - if (inp_ == typeid(bool)) - { - throw boost::bad_any_cast(); - } - - if (!inp_.is_arithmetic()) - { - throw boost::bad_any_cast(); - } + operator=(v); } @@ -383,6 +373,24 @@ namespace chaiscript return oper(Operators::assign_bitwise_and, this->bv, t_rhs.bv); } + Boxed_Number operator=(const Boxed_Value &v) + { + bv = v; + + const Type_Info &inp_ = v.get_type_info(); + if (inp_ == typeid(bool)) + { + throw boost::bad_any_cast(); + } + + if (!inp_.is_arithmetic()) + { + throw boost::bad_any_cast(); + } + + return *this; + } + Boxed_Number operator=(const Boxed_Number &t_rhs) const { return oper(Operators::assign, this->bv, t_rhs.bv); From 94fefa06901f3ca3c9baab271f9158b07e51dbf4 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 14 May 2012 18:09:36 -0600 Subject: [PATCH 3/4] Fix broken example.cpp --- samples/example.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/example.cpp b/samples/example.cpp index 51ef10aa..47e2639a 100644 --- a/samples/example.cpp +++ b/samples/example.cpp @@ -165,7 +165,7 @@ int main(int /*argc*/, char * /*argv*/[]) { //Dynamic objects test chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Function("TestType", fun(&hello_world))), "hello_world"); chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Constructor("TestType", fun(&hello_constructor))), "TestType"); - chai.add(fun(boost::function(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, "TestType", "attr", _1))), "attr"); +// chai.add(fun(boost::function(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, "TestType", "attr", _1))), "attr"); chai.eval("var x = TestType()"); // chai.eval("x.attr = \"hi\""); From 437f6a03a9e2bc631228a1612ce9dbf3799550d6 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 14 May 2012 18:09:55 -0600 Subject: [PATCH 4/4] Slight cleanup of the boxed_number cleanups from mgee --- include/chaiscript/dispatchkit/boxed_number.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/include/chaiscript/dispatchkit/boxed_number.hpp b/include/chaiscript/dispatchkit/boxed_number.hpp index 4814a705..4b81f4bb 100644 --- a/include/chaiscript/dispatchkit/boxed_number.hpp +++ b/include/chaiscript/dispatchkit/boxed_number.hpp @@ -303,8 +303,9 @@ namespace chaiscript } Boxed_Number(const Boxed_Value &v) + : bv(v) { - operator=(v); + validate_boxed_number(v); } @@ -373,10 +374,8 @@ namespace chaiscript return oper(Operators::assign_bitwise_and, this->bv, t_rhs.bv); } - Boxed_Number operator=(const Boxed_Value &v) + void validate_boxed_number(const Boxed_Value &v) { - bv = v; - const Type_Info &inp_ = v.get_type_info(); if (inp_ == typeid(bool)) { @@ -387,7 +386,12 @@ namespace chaiscript { throw boost::bad_any_cast(); } + } + Boxed_Number operator=(const Boxed_Value &v) + { + validate_boxed_number(v); + bv = v; return *this; }