\brief perform all common bootstrap functions for std::string, void and POD types \param[in,out] m Module to add bootstrapped functions to \returns passed in Module
| 336 | /// \param[in,out] m Module to add bootstrapped functions to |
| 337 | /// \returns passed in Module |
| 338 | static void bootstrap(Module& m) |
| 339 | { |
| 340 | m.add(user_type<void>(), "void"); |
| 341 | m.add(user_type<bool>(), "bool"); |
| 342 | m.add(user_type<Boxed_Value>(), "Object"); |
| 343 | m.add(user_type<Boxed_Number>(), "Number"); |
| 344 | m.add(user_type<Proxy_Function>(), "Function"); |
| 345 | m.add(user_type<dispatch::Assignable_Proxy_Function>(), "Assignable_Function"); |
| 346 | m.add(user_type<std::exception>(), "exception"); |
| 347 | |
| 348 | m.add(fun(&dispatch::Proxy_Function_Base::get_arity), "get_arity"); |
| 349 | m.add(fun(&dispatch::Proxy_Function_Base::operator==), "=="); |
| 350 | |
| 351 | |
| 352 | m.add(fun(return_boxed_value_vector(&dispatch::Proxy_Function_Base::get_param_types)), "get_param_types"); |
| 353 | m.add(fun(return_boxed_value_vector(&dispatch::Proxy_Function_Base::get_contained_functions)), "get_contained_functions"); |
| 354 | |
| 355 | m.add(fun([](const std::exception &e){ return std::string(e.what()); }), "what"); |
| 356 | |
| 357 | m.add(user_type<std::out_of_range>(), "out_of_range"); |
| 358 | m.add(user_type<std::logic_error>(), "logic_error"); |
| 359 | m.add(chaiscript::base_class<std::exception, std::logic_error>()); |
| 360 | m.add(chaiscript::base_class<std::logic_error, std::out_of_range>()); |
| 361 | m.add(chaiscript::base_class<std::exception, std::out_of_range>()); |
| 362 | |
| 363 | m.add(user_type<std::runtime_error>(), "runtime_error"); |
| 364 | m.add(chaiscript::base_class<std::exception, std::runtime_error>()); |
| 365 | |
| 366 | m.add(constructor<std::runtime_error (const std::string &)>(), "runtime_error"); |
| 367 | |
| 368 | m.add(user_type<dispatch::Dynamic_Object>(), "Dynamic_Object"); |
| 369 | m.add(constructor<dispatch::Dynamic_Object (const std::string &)>(), "Dynamic_Object"); |
| 370 | m.add(constructor<dispatch::Dynamic_Object ()>(), "Dynamic_Object"); |
| 371 | m.add(fun(&dispatch::Dynamic_Object::get_type_name), "get_type_name"); |
| 372 | m.add(fun(&dispatch::Dynamic_Object::get_attrs), "get_attrs"); |
| 373 | m.add(fun(&dispatch::Dynamic_Object::set_explicit), "set_explicit"); |
| 374 | m.add(fun(&dispatch::Dynamic_Object::is_explicit), "is_explicit"); |
| 375 | m.add(fun(&dispatch::Dynamic_Object::has_attr), "has_attr"); |
| 376 | |
| 377 | m.add(fun(static_cast<Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &)>(&dispatch::Dynamic_Object::get_attr)), "get_attr"); |
| 378 | m.add(fun(static_cast<const Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &) const>(&dispatch::Dynamic_Object::get_attr)), "get_attr"); |
| 379 | |
| 380 | m.add(fun(static_cast<Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &)>(&dispatch::Dynamic_Object::method_missing)), "method_missing"); |
| 381 | m.add(fun(static_cast<const Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &) const>(&dispatch::Dynamic_Object::method_missing)), "method_missing"); |
| 382 | |
| 383 | m.add(fun(static_cast<Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &)>(&dispatch::Dynamic_Object::get_attr)), "[]"); |
| 384 | m.add(fun(static_cast<const Boxed_Value & (dispatch::Dynamic_Object::*)(const std::string &) const>(&dispatch::Dynamic_Object::get_attr)), "[]"); |
| 385 | |
| 386 | m.eval(R"chaiscript( |
| 387 | def Dynamic_Object::clone() { |
| 388 | auto &new_o = Dynamic_Object(this.get_type_name()); |
| 389 | for_each(this.get_attrs(), fun[new_o](x) { new_o.get_attr(x.first) = x.second; } ); |
| 390 | new_o; |
| 391 | } |
| 392 | |
| 393 | def `=`(Dynamic_Object lhs, Dynamic_Object rhs) : lhs.get_type_name() == rhs.get_type_name() |
| 394 | { |
| 395 | for_each(rhs.get_attrs(), fun[lhs](x) { lhs.get_attr(x.first) = clone(x.second); } ); |
nothing calls this directly
no test coverage detected