C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html

This commit is contained in:
Arash Partow 2015-04-21 09:51:02 +10:00
parent ef91ad59e9
commit d303b70eed
1 changed files with 50 additions and 28 deletions

View File

@ -15668,7 +15668,7 @@ namespace exprtk
t.mode = mode;
t.token.type = lexer::token::e_error;
t.diagnostic = diagnostic;
exprtk_debug(((diagnostic + "\n").c_str()));
exprtk_debug(("%s\n",diagnostic .c_str()));
return t;
}
@ -15678,7 +15678,7 @@ namespace exprtk
t.mode = mode;
t.token = tk;
t.diagnostic = diagnostic;
exprtk_debug(((diagnostic + "\n").c_str()));
exprtk_debug(("%s\n",diagnostic .c_str()));
return t;
}
@ -16608,6 +16608,20 @@ namespace exprtk
scope_depth = 0;
}
#ifndef exprtk_enable_debugging
void activate_side_effect(const std::string&)
#else
void activate_side_effect(const std::string& source)
#endif
{
if (!side_effect_present)
{
side_effect_present = true;
exprtk_debug(("activate_side_effect() - caller: %s\n",source.c_str()));
}
}
bool parsing_return_stmt;
bool parsing_break_stmt;
bool return_stmt_present;
@ -19014,7 +19028,7 @@ namespace exprtk
{
exprtk_debug(("parse_for_loop() - INFO - Added new local variable: %s\n",nse.name.c_str()));
state_.side_effect_present = true;
state_.activate_side_effect("parse_for_loop()");
}
}
}
@ -19572,13 +19586,6 @@ namespace exprtk
tmp_expression_list.push_back(expression_list[i]);
}
if (
return_node_present ||
side_effect_list.back() ||
(expression_list.size() > 1)
)
state_.side_effect_present = true;
if (!return_node_present)
{
tmp_expression_list.push_back(expression_list.back());
@ -19593,6 +19600,13 @@ namespace exprtk
static_cast<int>(expression_list .size())));
}
if (
return_node_present ||
side_effect_list.back() ||
(expression_list.size() > 1)
)
state_.activate_side_effect("simplify()");
if (1 == expression_list.size())
return expression_list[0];
else
@ -20580,6 +20594,8 @@ namespace exprtk
}
}
state_.activate_side_effect("parse_break_statement()");
return node_allocator_.allocate<details::break_node<T> >(return_expr);
}
else
@ -20598,7 +20614,10 @@ namespace exprtk
if (!brkcnt_list_.empty())
{
next_token();
brkcnt_list_.front() = true;
state_.activate_side_effect("parse_continue_statement()");
return node_allocator_.allocate<details::continue_node<T> >();
}
else
@ -20853,10 +20872,10 @@ namespace exprtk
exprtk_debug(("parse_define_vector_statement() - INFO - Added new local vector: %s[%d]\n",
nse.name.c_str(),
static_cast<int>(nse.size)));
state_.side_effect_present = true;
}
state_.activate_side_effect("parse_define_vector_statement()");
lodge_symbol(vec_name,e_st_local_vector);
expression_node_ptr result =
@ -20929,12 +20948,12 @@ namespace exprtk
str_node = nse.str_node;
exprtk_debug(("parse_define_string_statement() - INFO - Added new local string variable: %s\n",nse.name.c_str()));
state_.side_effect_present = true;
}
lodge_symbol(str_name,e_st_local_string);
state_.activate_side_effect("parse_define_string_statement()");
expression_node_ptr branch[2] = {0};
branch[0] = str_node;
@ -21115,10 +21134,10 @@ namespace exprtk
var_node = nse.var_node;
exprtk_debug(("parse_define_var_statement() - INFO - Added new local variable: %s\n",nse.name.c_str()));
state_.side_effect_present = true;
}
state_.activate_side_effect("parse_define_var_statement()");
lodge_symbol(var_name,e_st_local_variable);
expression_node_ptr branch[2] = {0};
@ -21200,13 +21219,14 @@ namespace exprtk
return error_node();
}
exprtk_debug(("parse_uninitialised_var_statement() - INFO - Added new local variable: %s\n",nse.name.c_str()));
state_.side_effect_present = true;
exprtk_debug(("parse_uninitialised_var_statement() - INFO - Added new local variable: %s\n",
nse.name.c_str()));
}
lodge_symbol(var_name,e_st_local_variable);
state_.activate_side_effect("parse_uninitialised_var_statement()");
return expression_generator_(T(0));
}
@ -21427,7 +21447,7 @@ namespace exprtk
else
result = node_allocator_.allocate<details::swap_generic_node<T> >(variable0,variable1);
state_.side_effect_present = true;
state_.activate_side_effect("parse_swap_statement()");
return result;
}
@ -21513,6 +21533,8 @@ namespace exprtk
state_.return_stmt_present = true;
state_.activate_side_effect("parse_return_statement()");
return result;
}
@ -23785,7 +23807,7 @@ namespace exprtk
result = node_allocator_->allocate<literal_node_t>(v);
}
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("vararg_function_call()");
return result;
}
@ -23827,7 +23849,7 @@ namespace exprtk
}
else if (genfunc_node_ptr->init_branches())
{
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("generic_function_call()");
return result;
}
else
@ -23875,7 +23897,7 @@ namespace exprtk
}
else if (strfunc_node_ptr->init_branches())
{
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("string_function_call()");
return result;
}
else
@ -23903,7 +23925,7 @@ namespace exprtk
if (return_node_ptr->init_branches())
{
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("return_call()");
return result;
}
else
@ -23962,7 +23984,7 @@ namespace exprtk
exprtk_debug(("vector_element() - INFO - Added new local vector element: %s\n",nse.name.c_str()));
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("vector_element()");
result = nse.var_node;
}
@ -24007,7 +24029,7 @@ namespace exprtk
void lodge_assignment(symbol_type cst, expression_node_ptr node)
{
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("lodge_assignment()");
if (!parser_->dec_.collect_assignments())
return;
@ -24367,7 +24389,7 @@ namespace exprtk
return error_node();
}
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("synthesize_swap_expression()");
return result;
}
@ -30344,7 +30366,7 @@ namespace exprtk
return node_allocator_->allocate<literal_node_t>(v);
}
parser_->state_.side_effect_present = true;
parser_->state_.activate_side_effect("synthesize_expression(function<NT,N>)");
return expression_point;
}