Remove unused Inplace Eval ast node
This commit is contained in:
@@ -34,7 +34,7 @@ namespace chaiscript
|
|||||||
/// Types of AST nodes available to the parser and eval
|
/// Types of AST nodes available to the parser and eval
|
||||||
class AST_Node_Type {
|
class AST_Node_Type {
|
||||||
public:
|
public:
|
||||||
enum Type { Error, Int, Float, Id, Char, Str, Eol, Fun_Call, Inplace_Fun_Call, Arg_List, Variable, Equation, Var_Decl,
|
enum Type { Error, Int, Float, Id, Char, Str, Eol, Fun_Call, Arg_List, Variable, Equation, Var_Decl,
|
||||||
Comparison, Addition, Subtraction, Multiplication, Division, Modulus, Array_Call, Dot_Access, Quoted_String, Single_Quoted_String,
|
Comparison, Addition, Subtraction, Multiplication, Division, Modulus, Array_Call, Dot_Access, Quoted_String, Single_Quoted_String,
|
||||||
Lambda, Block, Def, While, If, For, Inline_Array, Inline_Map, Return, File, Prefix, Break, Continue, Map_Pair, Value_Range,
|
Lambda, Block, Def, While, If, For, Inline_Array, Inline_Map, Return, File, Prefix, Break, Continue, Map_Pair, Value_Range,
|
||||||
Inline_Range, Annotation, Try, Catch, Finally, Method, Attr_Decl, Shift, Equality, Bitwise_And, Bitwise_Xor, Bitwise_Or,
|
Inline_Range, Annotation, Try, Catch, Finally, Method, Attr_Decl, Shift, Equality, Bitwise_And, Bitwise_Xor, Bitwise_Or,
|
||||||
@@ -47,7 +47,7 @@ namespace chaiscript
|
|||||||
|
|
||||||
/// Helper lookup to get the name of each node type
|
/// Helper lookup to get the name of each node type
|
||||||
const char *ast_node_type_to_string(int ast_node_type) {
|
const char *ast_node_type_to_string(int ast_node_type) {
|
||||||
const char *ast_node_types[] = { "Internal Parser Error", "Int", "Float", "Id", "Char", "Str", "Eol", "Fun_Call", "Inplace_Fun_Call", "Arg_List", "Variable", "Equation", "Var_Decl",
|
const char *ast_node_types[] = { "Internal Parser Error", "Int", "Float", "Id", "Char", "Str", "Eol", "Fun_Call", "Arg_List", "Variable", "Equation", "Var_Decl",
|
||||||
"Comparison", "Addition", "Subtraction", "Multiplication", "Division", "Modulus", "Array_Call", "Dot_Access", "Quoted_String", "Single_Quoted_String",
|
"Comparison", "Addition", "Subtraction", "Multiplication", "Division", "Modulus", "Array_Call", "Dot_Access", "Quoted_String", "Single_Quoted_String",
|
||||||
"Lambda", "Block", "Def", "While", "If", "For", "Inline_Array", "Inline_Map", "Return", "File", "Prefix", "Break", "Continue", "Map_Pair", "Value_Range",
|
"Lambda", "Block", "Def", "While", "If", "For", "Inline_Array", "Inline_Map", "Return", "File", "Prefix", "Break", "Continue", "Map_Pair", "Value_Range",
|
||||||
"Inline_Range", "Annotation", "Try", "Catch", "Finally", "Method", "Attr_Decl", "Shift", "Equality", "Bitwise_And", "Bitwise_Xor", "Bitwise_Or",
|
"Inline_Range", "Annotation", "Try", "Catch", "Finally", "Method", "Attr_Decl", "Shift", "Equality", "Bitwise_And", "Bitwise_Xor", "Bitwise_Or",
|
||||||
|
@@ -286,73 +286,6 @@ namespace chaiscript
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Used in the context of in-string ${} evals, so that no new scope is created
|
|
||||||
struct Inplace_Fun_Call_AST_Node : public AST_Node {
|
|
||||||
public:
|
|
||||||
Inplace_Fun_Call_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector<AST_NodePtr> t_children) :
|
|
||||||
AST_Node(t_ast_node_text, AST_Node_Type::Inplace_Fun_Call, std::move(t_loc), std::move(t_children))
|
|
||||||
{ assert(children.size() == 2); }
|
|
||||||
|
|
||||||
virtual ~Inplace_Fun_Call_AST_Node() {}
|
|
||||||
virtual Boxed_Value eval_internal(const chaiscript::detail::Dispatch_State &t_ss) const CHAISCRIPT_OVERRIDE{
|
|
||||||
chaiscript::eval::detail::Function_Push_Pop fpp(t_ss);
|
|
||||||
|
|
||||||
std::vector<Boxed_Value> params;
|
|
||||||
params.reserve(this->children[1]->children.size());
|
|
||||||
for (const auto &child : this->children[1]->children) {
|
|
||||||
params.push_back(child->eval(t_ss));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Const_Proxy_Function fn;
|
|
||||||
try {
|
|
||||||
Boxed_Value bv = this->children[0]->eval(t_ss);
|
|
||||||
try {
|
|
||||||
fn = t_ss->boxed_cast<const Const_Proxy_Function &>(bv);
|
|
||||||
} catch (const exception::bad_boxed_cast &) {
|
|
||||||
throw exception::eval_error("'" + this->children[0]->pretty_print() + "' does not evaluate to a function.");
|
|
||||||
}
|
|
||||||
return (*fn)(params, t_ss->conversions());
|
|
||||||
}
|
|
||||||
catch(const exception::dispatch_error &e){
|
|
||||||
throw exception::eval_error(std::string(e.what()) + " with function '" + this->children[0]->text + "'", e.parameters, e.functions, false, *t_ss);
|
|
||||||
}
|
|
||||||
catch(const exception::bad_boxed_cast &){
|
|
||||||
// handle the case where there is only 1 function to try to call and dispatch fails on it
|
|
||||||
throw exception::eval_error("Error calling function '" + this->children[0]->text + "'", params, {fn}, false, *t_ss);
|
|
||||||
}
|
|
||||||
catch(const exception::arity_error &e){
|
|
||||||
throw exception::eval_error(std::string(e.what()) + " with function '" + this->children[0]->text + "'");
|
|
||||||
}
|
|
||||||
catch(const exception::guard_error &e){
|
|
||||||
throw exception::eval_error(std::string(e.what()) + " with function '" + this->children[0]->text + "'");
|
|
||||||
}
|
|
||||||
catch(detail::Return_Value &rv) {
|
|
||||||
return rv.retval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::string pretty_print() const CHAISCRIPT_OVERRIDE
|
|
||||||
{
|
|
||||||
std::ostringstream oss;
|
|
||||||
int count = 0;
|
|
||||||
for (const auto &child : this->children) {
|
|
||||||
oss << child->pretty_print();
|
|
||||||
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
oss << "(";
|
|
||||||
}
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
|
|
||||||
oss << ")";
|
|
||||||
|
|
||||||
return oss.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Arg_AST_Node : public AST_Node {
|
struct Arg_AST_Node : public AST_Node {
|
||||||
public:
|
public:
|
||||||
Arg_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector<AST_NodePtr> t_children) :
|
Arg_AST_Node(std::string t_ast_node_text, Parse_Location t_loc, std::vector<AST_NodePtr> t_children) :
|
||||||
|
Reference in New Issue
Block a user