11#ifndef CHAISCRIPT_EVAL_HPP_
12#define CHAISCRIPT_EVAL_HPP_
61 if (!stack.empty() && stack.back().first ==
"__this") {
62 return &stack.back().second;
63 }
else if (!t_vals.empty()) {
71 if (thisobj && !has_this_capture) { state.
add_object(
"this", *thisobj); }
74 for (
const auto &local : *t_locals) {
79 for (
size_t i = 0; i < t_param_names.size(); ++i) {
80 if (t_param_names[i] !=
"this") {
86 return t_node.
eval(state);
88 return std::move(rv.
retval);
126 std::vector<std::reference_wrapper<AST_Node>>
get_children() const final {
127 std::vector<std::reference_wrapper<AST_Node>> retval;
130 retval.emplace_back(*child);
152 throw std::runtime_error(
"Undispatched ast_node (internal error)");
180 m_rhs(
std::move(t_rhs))
189 const std::string &t_oper_string,
const Boxed_Value &t_lhs)
const
209 throw exception::eval_error(
"Can not find appropriate '" + t_oper_string +
"' operator.",
e.parameters,
e.functions,
false, *t_ss);
216 mutable std::atomic_uint_fast32_t m_loc = {0};
228 auto lhs = this->
children[0]->eval(t_ss);
229 auto rhs = this->
children[1]->eval(t_ss);
230 return do_oper(t_ss, m_oper, this->
text, lhs, rhs);
255 throw exception::eval_error(
"Can not find appropriate '" + t_oper_string +
"' operator.",
e.parameters,
e.functions,
false, *t_ss);
261 mutable std::atomic_uint_fast32_t m_loc = {0};
296 catch (std::exception &) {
302 mutable std::atomic_uint_fast32_t m_loc = {0};
312 template<
bool Save_Params>
317 std::vector<Boxed_Value> params;
321 params.push_back(child->eval(t_ss));
335 throw exception::eval_error(std::string(
e.what()) +
" with function '" + this->children[0]->text +
"'",
e.parameters,
e.functions,
false, *t_ss);
398 }
else if (t_node.
children.size() == 1) {
406 std::vector<std::string> retval;
408 for (
const auto &node : t_node.
children)
427 std::vector<std::pair<std::string, Type_Info>> retval;
429 for (
const auto &child : t_node.
children)
443 { assert(this->
children.size() == 2); }
463 }
catch (
const std::exception &) {
472 || (!this->children[0]->children.empty()
496 throw exception::eval_error(
"Missing clone or copy constructor for right hand side of equation",
e.parameters,
e.functions,
false, *t_ss);
499 else if (this->
text ==
":=") {
520 mutable std::atomic_uint_fast32_t m_loc = {0};
521 mutable std::atomic_uint_fast32_t m_clone_loc = {0};
530 const std::string &idname =
531 [&]()->
const std::string & {
533 return this->
children[0]->children[0]->text;
551 const std::string &idname = this->
children[0]->text;
569 const std::string &idname = this->
children[0]->text;
581 mutable std::atomic_uint_fast32_t m_loc = {0};
593 const std::vector<Boxed_Value> params{this->
children[0]->eval(t_ss), this->
children[1]->eval(t_ss)};
600 throw exception::eval_error(
"Can not find appropriate array lookup operator '[]'.",
e.parameters,
e.functions,
false, *t_ss );
606 mutable std::atomic_uint_fast32_t m_loc = {0};
622 std::vector<Boxed_Value> params{retval};
624 bool has_function_params =
false;
626 has_function_params =
true;
628 params.push_back(child->eval(t_ss));
635 retval = t_ss->
call_member(m_fun_name, m_loc, std::move(params), has_function_params, t_ss.
conversions());
638 if (
e.functions.empty())
642 throw exception::eval_error(std::string(
e.what()) +
" for function '" + m_fun_name +
"'",
e.parameters,
e.functions,
true, *t_ss);
646 retval = std::move(rv.
retval);
654 throw exception::eval_error(
"Can not find appropriate array lookup operator '[]'.",
e.parameters,
e.functions,
true, *t_ss);
662 mutable std::atomic_uint_fast32_t m_loc = {0};
663 mutable std::atomic_uint_fast32_t m_array_loc = {0};
664 const std::string m_fun_name;
675 std::make_move_iterator(
std::prev(t_children.
end())))
679 m_lambda_node(
std::move(t_children.back()))
684 const auto captures = [&]()->std::map<std::string, Boxed_Value>{
685 std::map<std::string, Boxed_Value> named_captures;
687 named_captures.insert(std::make_pair(capture->children[0]->text, capture->children[0]->eval(t_ss)));
689 return named_captures;
692 const auto numparams = this->
children[1]->children.size();
695 std::reference_wrapper<chaiscript::detail::Dispatch_Engine> engine(*t_ss);
699 [engine, lambda_node = this->m_lambda_node, param_names = this->m_param_names, captures,
700 this_capture = this->m_this_capture] (
const std::vector<Boxed_Value> &t_params)
702 return detail::eval_function(engine, *lambda_node, param_names, t_params, &captures, this_capture);
704 static_cast<int>(numparams), m_lambda_node, param_types
711 [](
const auto &child){
712 return child->children[0]->text ==
"this";
718 const std::vector<std::string> m_param_names;
719 const bool m_this_capture =
false;
720 const std::shared_ptr<AST_Node_Impl<T>> m_lambda_node;
729 const auto num_children = this->
children.size();
730 for (
size_t i = 0; i < num_children-1; ++i) {
733 return this->
children.back()->eval(t_ss);
745 const auto num_children = this->
children.size();
746 for (
size_t i = 0; i < num_children-1; ++i) {
749 return this->
children.back()->eval(t_ss);
774 return std::move(*std::prev(vec.end(), 2));
782 return std::move(vec.back());
788 if (t_children.size() > 3 + offset) {
793 if (t_children.size() > 2 + offset) {
801 std::vector<std::string> t_param_names;
802 size_t numparams = 0;
807 numparams = this->
children[1]->children.size();
812 std::reference_wrapper<chaiscript::detail::Dispatch_Engine> engine(*t_ss);
813 std::shared_ptr<dispatch::Proxy_Function_Base> guard;
816 [engine, guardnode =
m_guard_node, t_param_names](
const std::vector<Boxed_Value> &t_params)
818 return detail::eval_function(engine, *guardnode, t_param_names, t_params);
824 const std::string & l_function_name = this->
children[0]->text;
827 [engine, func_node =
m_body_node, t_param_names](
const std::vector<Boxed_Value> &t_params)
829 return detail::eval_function(engine, *func_node, t_param_names, t_params);
832 param_types, guard), l_function_name);
896 return this->
children[1]->eval(t_ss);
898 return this->
children[2]->eval(t_ss);
907 { assert(this->
children.size() == 3); }
910 const auto get_function = [&t_ss](
const std::string &t_name,
auto &t_hint){
911 uint_fast32_t hint = t_hint;
913 if (funs.first != hint) { t_hint = uint_fast32_t(funs.first); }
914 return std::move(funs.second);
917 const auto call_function = [&t_ss](
const auto &t_funcs,
const Boxed_Value &t_param) {
922 const std::string &loop_var_name = this->
children[0]->text;
926 const auto do_loop = [&loop_var_name, &t_ss,
this](
const auto &ranged_thing){
928 for (
auto &&loop_var : ranged_thing) {
933 if (!std::is_same<std::decay_t<
decltype(loop_var)>,
Boxed_Value>::value) {
950 return do_loop(
boxed_cast<
const std::vector<Boxed_Value> &>(range_expression_result));
952 return do_loop(
boxed_cast<
const std::map<std::string, Boxed_Value> &>(range_expression_result));
954 const auto range_funcs = get_function(
"range", m_range_loc);
955 const auto empty_funcs = get_function(
"empty", m_empty_loc);
956 const auto front_funcs = get_function(
"front", m_front_loc);
957 const auto pop_front_funcs = get_function(
"pop_front", m_pop_front_loc);
960 const auto range_obj = call_function(range_funcs, range_expression_result);
963 t_ss.
add_get_object(loop_var_name, call_function(front_funcs, range_obj));
968 call_function(pop_front_funcs, range_obj);
979 mutable std::atomic_uint_fast32_t m_range_loc = {0};
980 mutable std::atomic_uint_fast32_t m_empty_loc = {0};
981 mutable std::atomic_uint_fast32_t m_front_loc = {0};
982 mutable std::atomic_uint_fast32_t m_pop_front_loc = {0};
990 { assert(this->
children.size() == 4); }
1019 template<
typename T>
1025 bool breaking =
false;
1026 size_t currentCase = 1;
1027 bool hasMatched =
false;
1033 while (!breaking && (currentCase < this->
children.size())) {
1039 this->
children[currentCase]->eval(t_ss);
1048 this->
children[currentCase]->eval(t_ss);
1060 mutable std::atomic_uint_fast32_t
m_loc = {0};
1063 template<
typename T>
1067 { assert(this->
children.size() == 2); }
1078 template<
typename T>
1082 { assert(this->
children.size() == 1); }
1094 template<
typename T>
1101 std::vector<Boxed_Value> vec;
1111 throw exception::eval_error(
"Can not find appropriate 'clone' or copy constructor for vector elements");
1116 mutable std::atomic_uint_fast32_t m_loc = {0};
1119 template<
typename T>
1127 std::map<std::string, Boxed_Value> retval;
1130 retval.insert(std::make_pair(t_ss->
boxed_cast<std::string>(child->children[0]->eval(t_ss)),
1137 throw exception::eval_error(
"Can not find appropriate copy constructor or 'clone' while inserting into Map.",
e.parameters,
e.functions,
false, *t_ss);
1142 mutable std::atomic_uint_fast32_t m_loc = {0};
1145 template<
typename T>
1160 template<
typename T>
1167 const auto num_children = this->
children.size();
1169 if (num_children > 0) {
1170 for (
size_t i = 0; i < num_children-1; ++i) {
1173 return this->
children.back()->eval(t_ss);
1185 template<
typename T>
1189 { assert(this->
children.size() == 1); }
1198 template<
typename T>
1214 throw exception::eval_error(
"Error with prefix operator evaluation: cannot modify constant value.");
1223 throw exception::eval_error(
"Error with prefix operator evaluation: '" + this->
text +
"'",
e.parameters,
e.functions,
false, *t_ss);
1229 mutable std::atomic_uint_fast32_t m_loc = {0};
1232 template<
typename T>
1242 template<
typename T>
1252 template<
typename T>
1266 template<
typename T>
1272 template<
typename T>
1278 template<
typename T>
1285 auto oper1 = this->
children[0]->children[0]->children[0]->eval(t_ss);
1286 auto oper2 = this->
children[0]->children[0]->children[1]->eval(t_ss);
1290 throw exception::eval_error(
"Unable to generate range vector, while calling 'generate_range'",
e.parameters,
e.functions,
false, *t_ss);
1295 mutable std::atomic_uint_fast32_t m_loc = {0};
1298 template<
typename T>
1307 size_t end_point = this->
children.size();
1309 assert(end_point > 0);
1310 end_point = this->
children.size() - 1;
1312 for (
size_t i = 1; i < end_point; ++i) {
1314 auto &catch_block = *this->
children[i];
1316 if (catch_block.children.size() == 1) {
1318 retval = catch_block.children[0]->eval(t_ss);
1320 }
else if (catch_block.children.size() == 2 || catch_block.children.size() == 3) {
1329 if (catch_block.children.size() == 2) {
1331 retval = catch_block.children[1]->eval(t_ss);
1334 else if (catch_block.children.size() == 3) {
1342 this->
children.back()->children[0]->eval(t_ss);
1347 retval = catch_block.children[2]->eval(t_ss);
1355 this->
children.back()->children[0]->eval(t_ss);
1371 retval = this->
children[0]->eval(t_ss);
1376 catch (
const std::runtime_error &
e) {
1379 catch (
const std::out_of_range &
e) {
1382 catch (
const std::exception &
e) {
1390 this->
children.back()->children[0]->eval(t_ss);
1397 retval = this->
children.back()->children[0]->eval(t_ss);
1405 template<
typename T>
1411 template<
typename T>
1417 template<
typename T>
1436 const std::string & class_name = this->
children[0]->text;
1439 std::vector<std::string> t_param_names{
"this"};
1445 t_param_names.insert(t_param_names.end(), args.begin(), args.end());
1449 const size_t numparams = t_param_names.size();
1451 std::shared_ptr<dispatch::Proxy_Function_Base> guard;
1452 std::reference_wrapper<chaiscript::detail::Dispatch_Engine> engine(*t_ss);
1455 [engine, t_param_names, guardnode =
m_guard_node](
const std::vector<Boxed_Value> &t_params) {
1456 return chaiscript::eval::detail::eval_function(engine, *guardnode, t_param_names, t_params);
1462 const std::string & function_name = this->
children[1]->text;
1464 if (function_name == class_name) {
1468 std::make_shared<dispatch::detail::Dynamic_Object_Constructor>(class_name,
1470 [engine, t_param_names, node =
m_body_node](
const std::vector<Boxed_Value> &t_params) {
1471 return chaiscript::eval::detail::eval_function(engine, *node, t_param_names, t_params);
1473 static_cast<int>(numparams),
m_body_node, param_types, guard
1481 auto type = t_ss->
get_type(class_name,
false);
1485 std::make_shared<dispatch::detail::Dynamic_Object_Function>(class_name,
1487 [engine, t_param_names, node =
m_body_node](
const std::vector<Boxed_Value> &t_params) {
1488 return chaiscript::eval::detail::eval_function(engine, *node, t_param_names, t_params);
1490 static_cast<int>(numparams),
m_body_node, param_types, guard), type),
1501 template<
typename T>
1508 std::string class_name = this->
children[0]->text;
1511 std::string attr_name = this->
children[1]->text;
1514 std::make_shared<dispatch::detail::Dynamic_Object_Function>(
1515 std::move(class_name),
1531 template<
typename T>
1535 { assert(this->
children.size() == 2); }
1545 template<
typename T>
1549 { assert(this->
children.size() == 2); }
Env e
Definition Common.cc:2
bool has_guard() const
Returns true if the function has a guard to it. Always returns false for a conglomerate function.
Definition GameApi_pl.cc:23060
static Boxed_Value clone(const Boxed_Value &t_bv)
Definition boxed_number.hpp:524
static Boxed_Value do_oper(Operators::Opers t_oper, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs)
Definition boxed_number.hpp:893
A wrapper for holding any valid C++ type. All types in ChaiScript are Boxed_Value objects.
Definition boxed_value.hpp:28
const void * get_const_ptr() const noexcept
Definition boxed_value.hpp:316
bool is_const() const noexcept
Definition boxed_value.hpp:235
Boxed_Value assign(const Boxed_Value &rhs)
Definition boxed_value.hpp:218
bool is_undef() const noexcept
return true if the object is uninitialized
Definition boxed_value.hpp:230
const Type_Info & get_type_info() const noexcept
Definition boxed_value.hpp:224
void reset_return_value() const noexcept
Definition boxed_value.hpp:301
static bool type_match(const Boxed_Value &l, const Boxed_Value &r) noexcept
Definition boxed_value.hpp:356
bool is_return_value() const noexcept
Definition boxed_value.hpp:296
Compile time deduced information about a type.
Definition type_info.hpp:34
constexpr bool bare_equal_type_info(const std::type_info &ti) const noexcept
Definition type_info.hpp:81
constexpr bool is_arithmetic() const noexcept
Definition type_info.hpp:89
Definition dispatchkit.hpp:438
Boxed_Value call_member(const std::string &t_name, std::atomic_uint_fast32_t &t_loc, const std::vector< Boxed_Value > ¶ms, bool t_has_params, const Type_Conversions_State &t_conversions)
Definition dispatchkit.hpp:959
decltype(auto) boxed_cast(const Boxed_Value &bv) const
casts an object while applying any Dynamic_Conversion available
Definition dispatchkit.hpp:462
Boxed_Value call_function(const std::string &t_name, std::atomic_uint_fast32_t &t_loc, const std::vector< Boxed_Value > ¶ms, const Type_Conversions_State &t_conversions) const
Definition dispatchkit.hpp:1079
std::pair< size_t, std::shared_ptr< std::vector< Proxy_Function > > > get_function(const std::string &t_name, const size_t t_hint) const
Return a function by name.
Definition dispatchkit.hpp:779
const StackData & get_stack_data() const
Definition dispatchkit.hpp:1274
Type_Info get_type(const std::string &name, bool t_throw=true) const
Returns the type info for a named type.
Definition dispatchkit.hpp:722
void add(const Type_Conversion &d)
Add a new conversion for upcasting to a base class.
Definition dispatchkit.hpp:469
Boxed_Value add_global_no_throw(const Boxed_Value &obj, const std::string &name)
Adds a new global (non-const) shared object, between all the threads.
Definition dispatchkit.hpp:569
Definition dispatchkit.hpp:1513
Stack_Holder & stack_holder() const
Definition dispatchkit.hpp:1530
Boxed_Value get_object(const std::string &t_name, std::atomic_uint_fast32_t &t_loc) const
Definition dispatchkit.hpp:1550
void add_object(const std::string &t_name, Boxed_Value obj) const
Definition dispatchkit.hpp:1546
const Type_Conversions_State & conversions() const
Definition dispatchkit.hpp:1534
Boxed_Value & add_get_object(const std::string &t_name, Boxed_Value obj) const
Definition dispatchkit.hpp:1542
Definition dynamic_object.hpp:44
const Boxed_Value & get_attr(const std::string &t_attr_name) const
Definition dynamic_object.hpp:78
Definition proxy_functions.hpp:52
void push_front(std::string t_name, Type_Info t_ti)
Definition proxy_functions.hpp:67
std::pair< bool, bool > match(const std::vector< Boxed_Value > &vals, const Type_Conversions_State &t_conversions) const
Definition proxy_functions.hpp:117
Definition proxy_functions.hpp:196
Thrown in the event that a Boxed_Value cannot be cast to the desired type.
Definition bad_boxed_cast.hpp:34
Exception thrown in the case that a method dispatch fails because no matching function was found.
Definition proxy_functions.hpp:814
Exception thrown if a function's guard fails.
Definition proxy_functions.hpp:327
Exception thrown in the case that an object name is invalid because it already exists in current cont...
Definition dispatchkit.hpp:110
iVBORw0KGgoAAAANSUhEUgAAANcAAAB5CAMAAACdtUQZAAAA51BMVEX</div ></div >< div style="padding: 0px 0px; width: 1324px;">< div style="height: 400px; width: 1324px;"></div >< div itemscope itemtype="https: </div><div itemscope itemtype="https:</div >< div itemscope itemtype="https: </div></div><p><div style="padding:0px 0px;width:1324px;"><div></div><div itemscope itemtype="https:< ul >< li >< b > Application name
8AkrcAgqgAs9wqQ0ey2tkAo8gAuuQfeI4hPUH09fXHy8z4+fng4uNKXF/Lz9BzfoAcgpkQMTUAKjAbOT4Qr9AXhJ8Rl7ktMCwTosA...
Definition meshpage.php:1610
n< br > font size
Definition meshpage.php:3536
Proxy_Function make_dynamic_proxy_function(Callable &&c, Arg &&... a)
Definition proxy_functions.hpp:504
Boxed_Value dispatch(const Funcs &funcs, const std::vector< Boxed_Value > &plist, const Type_Conversions_State &t_conversions)
Definition proxy_functions.hpp:936
Definition chaiscript_common.hpp:649
Boxed_Value clone_if_necessary(Boxed_Value incoming, std::atomic_uint_fast32_t &t_loc, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_eval.hpp:92
Classes and functions that are part of the runtime eval system.
Definition chaiscript_common.hpp:647
typename std::unique_ptr< AST_Node_Impl< T > > AST_Node_Impl_Ptr
Definition chaiscript_eval.hpp:50
Classes which may be thrown during error cases when ChaiScript is executing.
Definition bad_boxed_cast.hpp:27
Namespace chaiscript contains every API call that the average user will be concerned with.
std::shared_ptr< const dispatch::Proxy_Function_Base > Const_Proxy_Function
Const version of Proxy_Function. Points to a const Proxy_Function. This is how most registered functi...
Definition proxy_functions.hpp:321
Boxed_Value void_var()
Definition boxed_value.hpp:466
decltype(auto) boxed_cast(const Boxed_Value &bv, const Type_Conversions_State *t_conversions=nullptr)
Function for extracting a value stored in a Boxed_Value object.
Definition boxed_cast.hpp:76
Proxy_Function fun(const T &t)
Creates a new Proxy_Function object from a free function, member function or data member.
Definition register_function.hpp:43
AST_Node_Type
Types of AST nodes available to the parser and eval.
Definition chaiscript_common.hpp:65
@ Lambda
Definition chaiscript_common.hpp:67
@ Case
Definition chaiscript_common.hpp:69
@ Assign_Decl
Definition chaiscript_common.hpp:65
@ Array_Call
Definition chaiscript_common.hpp:66
@ Dot_Access
Definition chaiscript_common.hpp:66
@ Map_Pair
Definition chaiscript_common.hpp:67
@ Noop
Definition chaiscript_common.hpp:69
@ Var_Decl
Definition chaiscript_common.hpp:65
@ For
Definition chaiscript_common.hpp:67
@ While
Definition chaiscript_common.hpp:67
@ Id
Definition chaiscript_common.hpp:65
@ Scopeless_Block
Definition chaiscript_common.hpp:67
@ Global_Decl
Definition chaiscript_common.hpp:69
@ Method
Definition chaiscript_common.hpp:68
@ Compiled
Definition chaiscript_common.hpp:69
@ Logical_And
Definition chaiscript_common.hpp:69
@ Finally
Definition chaiscript_common.hpp:68
@ Reference
Definition chaiscript_common.hpp:69
@ Value_Range
Definition chaiscript_common.hpp:67
@ Binary
Definition chaiscript_common.hpp:69
@ Prefix
Definition chaiscript_common.hpp:67
@ Inline_Array
Definition chaiscript_common.hpp:67
@ If
Definition chaiscript_common.hpp:67
@ Default
Definition chaiscript_common.hpp:69
@ Arg_List
Definition chaiscript_common.hpp:65
@ Logical_Or
Definition chaiscript_common.hpp:69
@ Ranged_For
Definition chaiscript_common.hpp:67
@ Return
Definition chaiscript_common.hpp:67
@ Continue
Definition chaiscript_common.hpp:67
@ Switch
Definition chaiscript_common.hpp:69
@ Inline_Map
Definition chaiscript_common.hpp:67
@ Fun_Call
Definition chaiscript_common.hpp:65
@ Constant
Definition chaiscript_common.hpp:69
@ Def
Definition chaiscript_common.hpp:67
@ Break
Definition chaiscript_common.hpp:67
@ Try
Definition chaiscript_common.hpp:68
@ Attr_Decl
Definition chaiscript_common.hpp:68
@ Inline_Range
Definition chaiscript_common.hpp:68
Boxed_Value const_var(const T &t)
Takes an object and returns an immutable Boxed_Value. If the object is a std::reference or pointer ty...
Definition boxed_value.hpp:461
double f(const std::string &, double, bool) noexcept
Definition profile_cpp_calls_2.cpp:4
AST_Node(AST_Node &&)=default
const std::string text
Definition chaiscript_common.hpp:500
const AST_Node_Type identifier
Definition chaiscript_common.hpp:499
const File_Position & end() const
Definition chaiscript_common.hpp:511
Parse_Location location
Definition chaiscript_common.hpp:501
std::string pretty_print() const
Definition chaiscript_common.hpp:515
static bool get_bool_condition(const Boxed_Value &t_bv, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_common.hpp:546
Definition chaiscript_algebraic.hpp:21
Opers
Definition chaiscript_algebraic.hpp:23
@ pre_increment
Definition chaiscript_algebraic.hpp:27
@ pre_decrement
Definition chaiscript_algebraic.hpp:27
@ bitwise_and
Definition chaiscript_algebraic.hpp:33
@ assign
Definition chaiscript_algebraic.hpp:27
@ invalid
Definition chaiscript_algebraic.hpp:36
Definition chaiscript_common.hpp:101
Definition chaiscript_eval.hpp:112
static bool get_scoped_bool_condition(const AST_Node_Impl< T > &node, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_eval.hpp:120
Boxed_Value eval(const chaiscript::detail::Dispatch_State &t_e) const final
Definition chaiscript_eval.hpp:136
std::vector< AST_Node_Impl_Ptr< T > > children
Definition chaiscript_eval.hpp:147
AST_Node_Impl(std::string t_ast_node_text, AST_Node_Type t_id, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children=std::vector< AST_Node_Impl_Ptr< T > >())
Definition chaiscript_eval.hpp:113
std::vector< std::reference_wrapper< AST_Node > > get_children() const final
Definition chaiscript_eval.hpp:126
virtual Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &) const
Definition chaiscript_eval.hpp:150
Arg_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:383
Definition chaiscript_eval.hpp:389
static std::pair< std::string, Type_Info > get_arg_type(const AST_Node_Impl< T > &t_node, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_eval.hpp:416
static std::string get_arg_name(const AST_Node_Impl< T > &t_node)
Definition chaiscript_eval.hpp:394
Arg_List_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:390
static dispatch::Param_Types get_arg_types(const AST_Node_Impl< T > &t_node, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_eval.hpp:426
static std::vector< std::string > get_arg_names(const AST_Node_Impl< T > &t_node)
Definition chaiscript_eval.hpp:405
Array_Call_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:587
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:590
Assign_Decl_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:565
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:568
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1506
Attr_Decl_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1503
Binary_Operator_AST_Node(const std::string &t_oper, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:222
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:227
Boxed_Value do_oper(const chaiscript::detail::Dispatch_State &t_ss, Operators::Opers t_oper, const std::string &t_oper_string, const Boxed_Value &t_lhs, const Boxed_Value &t_rhs) const
Definition chaiscript_eval.hpp:234
Block_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:739
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:742
Break_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1234
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &) const override
Definition chaiscript_eval.hpp:1237
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1069
Case_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1065
Catch_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1407
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:872
Class_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:869
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:166
std::function< Boxed_Value(const std::vector< AST_Node_Impl_Ptr< T > > &, const chaiscript::detail::Dispatch_State &t_ss)> m_func
Definition chaiscript_eval.hpp:170
AST_Node_Impl_Ptr< T > m_original_node
Definition chaiscript_eval.hpp:171
Compiled_AST_Node(AST_Node_Impl_Ptr< T > t_original_node, std::vector< AST_Node_Impl_Ptr< T > > t_children, std::function< Boxed_Value(const std::vector< AST_Node_Impl_Ptr< T > > &, const chaiscript::detail::Dispatch_State &t_ss)> t_func)
Definition chaiscript_eval.hpp:159
Constant_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, Boxed_Value t_value)
Definition chaiscript_eval.hpp:267
Boxed_Value m_value
Definition chaiscript_eval.hpp:283
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &) const override
Definition chaiscript_eval.hpp:279
Constant_AST_Node(Boxed_Value t_value)
Definition chaiscript_eval.hpp:273
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &) const override
Definition chaiscript_eval.hpp:1247
Continue_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1244
Definition chaiscript_eval.hpp:754
Def_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:759
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:800
static std::shared_ptr< AST_Node_Impl< T > > get_guard_node(std::vector< AST_Node_Impl_Ptr< T > > &&vec, bool has_guard)
Definition chaiscript_eval.hpp:771
std::shared_ptr< AST_Node_Impl< T > > m_body_node
Definition chaiscript_eval.hpp:756
std::shared_ptr< AST_Node_Impl< T > > m_guard_node
Definition chaiscript_eval.hpp:757
static bool has_guard(const std::vector< AST_Node_Impl_Ptr< T > > &t_children, const std::size_t offset)
Definition chaiscript_eval.hpp:785
static std::shared_ptr< AST_Node_Impl< T > > get_body_node(std::vector< AST_Node_Impl_Ptr< T > > &&vec)
Definition chaiscript_eval.hpp:780
Default_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1080
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1084
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:617
Dot_Access_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:611
Equation_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:440
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:446
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1165
File_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1162
Finally_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1413
Fold_Right_Binary_Operator_AST_Node(const std::string &t_oper, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children, Boxed_Value t_rhs)
Definition chaiscript_eval.hpp:177
Boxed_Value do_oper(const chaiscript::detail::Dispatch_State &t_ss, const std::string &t_oper_string, const Boxed_Value &t_lhs) const
Definition chaiscript_eval.hpp:188
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:183
For_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:988
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:992
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:358
Fun_Call_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:307
Boxed_Value do_eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const
Definition chaiscript_eval.hpp:313
Global_Decl_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:526
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:529
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:292
Id_AST_Node(const std::string &t_ast_node_text, Parse_Location t_loc)
Definition chaiscript_eval.hpp:288
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:894
If_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:888
Inline_Array_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1096
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1099
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1124
Inline_Map_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1121
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1283
Inline_Range_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1280
Lambda_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:670
static bool has_this_capture(const std::vector< AST_Node_Impl_Ptr< T > > &children)
Definition chaiscript_eval.hpp:709
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:682
Logical_And_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1533
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1537
Logical_Or_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1547
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1551
Map_Pair_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1268
Method_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1422
std::shared_ptr< AST_Node_Impl< T > > m_body_node
Definition chaiscript_eval.hpp:1419
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1432
std::shared_ptr< AST_Node_Impl< T > > m_guard_node
Definition chaiscript_eval.hpp:1420
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &) const override
Definition chaiscript_eval.hpp:1258
Boxed_Value val
Definition chaiscript_eval.hpp:1263
Noop_AST_Node()
Definition chaiscript_eval.hpp:1254
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1205
Prefix_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1200
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:909
Ranged_For_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:905
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1191
Reference_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1187
Return_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1147
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1150
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:728
Scopeless_Block_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:725
std::atomic_uint_fast32_t m_loc
Definition chaiscript_eval.hpp:1060
Switch_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1021
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1024
Try_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1300
Boxed_Value handle_exception(const chaiscript::detail::Dispatch_State &t_ss, const Boxed_Value &t_except) const
Definition chaiscript_eval.hpp:1303
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:1364
Unused_Return_Fun_Call_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:368
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:371
Value_Range_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:1274
Var_Decl_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:547
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:550
Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const override
Definition chaiscript_eval.hpp:846
While_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector< AST_Node_Impl_Ptr< T > > t_children)
Definition chaiscript_eval.hpp:843
Special type indicating a call to 'break'.
Definition chaiscript_common.hpp:657
Special type indicating a call to 'continue'.
Definition chaiscript_common.hpp:663
Creates a new function call and pops it on destruction.
Definition chaiscript_common.hpp:694
void save_params(const std::vector< Boxed_Value > &t_params)
Definition chaiscript_common.hpp:711
Special type for returned values.
Definition chaiscript_common.hpp:651
Boxed_Value retval
Definition chaiscript_common.hpp:652
Creates a new scope then pops it on destruction.
Definition chaiscript_common.hpp:670
Creates a new scope then pops it on destruction.
Definition chaiscript_common.hpp:728
Definition boxed_number.hpp:33
Definition proxy_functions_detail.hpp:42
Errors generated during parsing or evaluation.
Definition chaiscript_common.hpp:168
std::vector< AST_Node_Trace > call_stack
Definition chaiscript_common.hpp:173