1010#include " checktestdataLexer.h"
1111
1212class Expression {
13- public:
14- const Value & eval () { return *callEval ().second ; }
15- void assign (const Value & v) { (this ->*assign_)(v); }
13+ public:
14+ const Value& eval () { return *callEval ().second ; }
15+ void assign (const Value& v) { (this ->*assign_)(v); }
1616 Expression () {}
1717 Expression (Value v);
18- Expression (Variable * variable, std::vector<Expression> idx);
19- Expression (const antlr4::Token * literal);
20- Expression (const antlr4::Token * binop, Expression a, Expression b);
21- Expression (const antlr4::Token * unop, Expression e);
22- Expression (const antlr4::Token * function, std::vector<Expression> arguments);
18+ Expression (Variable* variable, std::vector<Expression> idx);
19+ Expression (const antlr4::Token* literal);
20+ Expression (const antlr4::Token* binop, Expression a, Expression b);
21+ Expression (const antlr4::Token* unop, Expression e);
22+ Expression (const antlr4::Token* function, std::vector<Expression> arguments);
2323 template <typename F,
2424 typename _ = std::enable_if_t <std::is_invocable_v<F>, void >>
2525 Expression (F f)
2626 : eval_(&Expression::foldConst<&Expression::backdoorEval<F>>),
2727 context_ (std::move(f)) {}
2828
29- private:
29+ private:
3030 auto idx () {
3131 return boost::make_transform_iterator (
32- children_.begin (), [](Expression & child) { return child.eval (); });
32+ children_.begin (), [](Expression& child) { return child.eval (); });
3333 }
34- std::pair<bool , const Value *> callEval ();
35- std::pair<bool , const Value *> invalid ();
36- std::pair<bool , const Value *> constEval ();
34+ std::pair<bool , const Value*> callEval ();
35+ std::pair<bool , const Value*> invalid ();
36+ std::pair<bool , const Value*> constEval ();
3737 using EvalFn = decltype (&Expression::constEval);
38- template <EvalFn inner> std::pair<bool , const Value *> foldConst () {
38+ template <EvalFn inner>
39+ std::pair<bool , const Value*> foldConst () {
3940 auto result = (this ->*inner)();
4041 if (result.first ) {
4142 *this = Expression{std::move (*result.second )};
@@ -44,33 +45,39 @@ class Expression {
4445 }
4546 return callEval ();
4647 }
47- template <int op> std::pair<bool , const Value *> binopEval ();
48- std::pair<bool , const Value *> unaryMinusEval ();
49- std::pair<bool , const Value *> unaryNotEval ();
50- void invalidAssignment (const Value &value);
48+ template <int op>
49+ std::pair<bool , const Value*> binopEval ();
50+ std::pair<bool , const Value*> unaryMinusEval ();
51+ std::pair<bool , const Value*> unaryNotEval ();
52+ void invalidAssignment (const Value& value);
5153 using AssignFn = decltype (&Expression::invalidAssignment);
52- void variableAssignment (const Value &value);
53- std::pair<bool , const Value *> variableEval ();
54- std::pair<bool , const Value *> uniqueEval ();
55- std::pair<bool , const Value *> inarrayEval ();
56- std::pair<bool , const Value *> strlenEval ();
57- template <typename F> std::pair<bool , const Value *> backdoorEval () {
54+ void variableAssignment (const Value& value);
55+ std::pair<bool , const Value*> variableEval ();
56+ std::pair<bool , const Value*> uniqueEval ();
57+ std::pair<bool , const Value*> inarrayEval ();
58+ std::pair<bool , const Value*> strlenEval ();
59+ template <typename F>
60+ std::pair<bool , const Value*> backdoorEval () {
5861 return (*std::any_cast<F>(&context_))();
5962 }
60- template <size_t size> void variableArrayAssignment (const Value &value) {
63+ template <size_t size>
64+ void variableArrayAssignment (const Value& value) {
6165 variable_->set <size>(idx (), value);
6266 }
63- template <size_t size> std::pair<bool , const Value *> variableArrayEval () {
67+ template <size_t size>
68+ std::pair<bool , const Value*> variableArrayEval () {
6469 return {false , &variable_->get <size>(idx ())};
6570 }
6671
67- template <size_t size> EvalFn getVariableEval (size_t i);
72+ template <size_t size>
73+ EvalFn getVariableEval (size_t i);
6874
69- template <size_t size> AssignFn getVariableAssignment (size_t i);
75+ template <size_t size>
76+ AssignFn getVariableAssignment (size_t i);
7077
7178 Value value_;
72- Variable * variable_;
73- std::vector<const Variable *> variables_;
79+ Variable* variable_;
80+ std::vector<const Variable*> variables_;
7481 EvalFn eval_ = &Expression::invalid;
7582 AssignFn assign_ = &Expression::invalidAssignment;
7683 std::vector<Expression> children_;
0 commit comments