Macroprocessor: make method Expression::eval() const

master
Sébastien Villemot 2023-03-16 11:32:09 +01:00
parent df7144525d
commit 96e7a764b2
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 22 additions and 22 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2019-2022 Dynare Team * Copyright © 2019-2023 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -607,7 +607,7 @@ Tuple::cast_real(Environment &env) const
} }
BaseTypePtr BaseTypePtr
Range::eval(Environment &env) Range::eval(Environment &env) const
{ {
RealPtr incdbl = make_shared<Real>(1); RealPtr incdbl = make_shared<Real>(1);
if (inc) if (inc)
@ -630,7 +630,7 @@ Range::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
Array::eval(Environment &env) Array::eval(Environment &env) const
{ {
vector<ExpressionPtr> retval; vector<ExpressionPtr> retval;
for (const auto &it : arr) for (const auto &it : arr)
@ -639,7 +639,7 @@ Array::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
Tuple::eval(Environment &env) Tuple::eval(Environment &env) const
{ {
vector<ExpressionPtr> retval; vector<ExpressionPtr> retval;
for (const auto &it : tup) for (const auto &it : tup)
@ -648,7 +648,7 @@ Tuple::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
Variable::eval(Environment &env) Variable::eval(Environment &env) const
{ {
if (indices && !indices->empty()) if (indices && !indices->empty())
{ {
@ -731,7 +731,7 @@ Variable::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
Function::eval(Environment &env) Function::eval(Environment &env) const
{ {
FunctionPtr func; FunctionPtr func;
ExpressionPtr body; ExpressionPtr body;
@ -770,7 +770,7 @@ Function::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
UnaryOp::eval(Environment &env) UnaryOp::eval(Environment &env) const
{ {
try try
{ {
@ -870,7 +870,7 @@ UnaryOp::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
BinaryOp::eval(Environment &env) BinaryOp::eval(Environment &env) const
{ {
try try
{ {
@ -930,7 +930,7 @@ BinaryOp::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
TrinaryOp::eval(Environment &env) TrinaryOp::eval(Environment &env) const
{ {
try try
{ {
@ -956,7 +956,7 @@ TrinaryOp::eval(Environment &env)
} }
BaseTypePtr BaseTypePtr
Comprehension::eval(Environment &env) Comprehension::eval(Environment &env) const
{ {
ArrayPtr input_set; ArrayPtr input_set;
VariablePtr vp; VariablePtr vp;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2019-2022 Dynare Team * Copyright © 2019-2023 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -120,7 +120,7 @@ namespace macro
Node(move(location_arg)) { } Node(move(location_arg)) { }
virtual string to_string() const noexcept = 0; virtual string to_string() const noexcept = 0;
virtual void print(ostream &output, bool matlab_output = false) const noexcept = 0; virtual void print(ostream &output, bool matlab_output = false) const noexcept = 0;
virtual BaseTypePtr eval(Environment &env) = 0; virtual BaseTypePtr eval(Environment &env) const = 0;
virtual ExpressionPtr clone() const noexcept = 0; virtual ExpressionPtr clone() const noexcept = 0;
}; };
@ -131,7 +131,7 @@ namespace macro
explicit BaseType(Tokenizer::location location_arg = Tokenizer::location()) : explicit BaseType(Tokenizer::location location_arg = Tokenizer::location()) :
Expression(move(location_arg)) { } Expression(move(location_arg)) { }
virtual codes::BaseType getType() const noexcept = 0; virtual codes::BaseType getType() const noexcept = 0;
BaseTypePtr eval([[maybe_unused]] Environment &env) override { return shared_from_this(); } BaseTypePtr eval([[maybe_unused]] Environment &env) const override { return const_pointer_cast<BaseType>(shared_from_this()); }
public: public:
virtual BaseTypePtr plus([[maybe_unused]] const BaseTypePtr &bt) const { throw StackTrace("Operator + does not exist for this type"); } virtual BaseTypePtr plus([[maybe_unused]] const BaseTypePtr &bt) const { throw StackTrace("Operator + does not exist for this type"); }
virtual BaseTypePtr unary_plus() const { throw StackTrace("Unary operator + does not exist for this type"); } virtual BaseTypePtr unary_plus() const { throw StackTrace("Unary operator + does not exist for this type"); }
@ -400,7 +400,7 @@ namespace macro
codes::BaseType getType() const noexcept override { return codes::BaseType::Tuple; } codes::BaseType getType() const noexcept override { return codes::BaseType::Tuple; }
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr clone() const noexcept override; ExpressionPtr clone() const noexcept override;
public: public:
size_t size() const { return tup.size(); } size_t size() const { return tup.size(); }
@ -431,7 +431,7 @@ namespace macro
codes::BaseType getType() const noexcept override { return codes::BaseType::Array; } codes::BaseType getType() const noexcept override { return codes::BaseType::Array; }
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr clone() const noexcept override; ExpressionPtr clone() const noexcept override;
public: public:
size_t size() const { return arr.size(); } size_t size() const { return arr.size(); }
@ -480,7 +480,7 @@ namespace macro
return retval + end->to_string() + "]"; return retval + end->to_string() + "]";
} }
void print(ostream &output, [[maybe_unused]] bool matlab_output = false) const noexcept override { output << to_string(); } void print(ostream &output, [[maybe_unused]] bool matlab_output = false) const noexcept override { output << to_string(); }
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr ExpressionPtr
clone() const noexcept override clone() const noexcept override
{ {
@ -511,7 +511,7 @@ namespace macro
Expression(move(location_arg)), name{move(name_arg)}, indices{move(indices_arg)} { } Expression(move(location_arg)), name{move(name_arg)}, indices{move(indices_arg)} { }
string to_string() const noexcept override { return name; } string to_string() const noexcept override { return name; }
void print(ostream &output, [[maybe_unused]] bool matlab_output = false) const noexcept override { output << name; } void print(ostream &output, [[maybe_unused]] bool matlab_output = false) const noexcept override { output << name; }
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr ExpressionPtr
clone() const noexcept override clone() const noexcept override
{ {
@ -540,7 +540,7 @@ namespace macro
{ {
printName(output); printArgs(output); printName(output); printArgs(output);
} }
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr clone() const noexcept override; ExpressionPtr clone() const noexcept override;
public: public:
void printName(ostream &output) const noexcept { output << name; } void printName(ostream &output) const noexcept { output << name; }
@ -562,7 +562,7 @@ namespace macro
Expression(move(location_arg)), op_code{move(op_code_arg)}, arg{move(arg_arg)} { } Expression(move(location_arg)), op_code{move(op_code_arg)}, arg{move(arg_arg)} { }
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr ExpressionPtr
clone() const noexcept override clone() const noexcept override
{ {
@ -585,7 +585,7 @@ namespace macro
public: public:
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr ExpressionPtr
clone() const noexcept override clone() const noexcept override
{ {
@ -607,7 +607,7 @@ namespace macro
arg1{move(arg1_arg)}, arg2{move(arg2_arg)}, arg3{move(arg3_arg)} { } arg1{move(arg1_arg)}, arg2{move(arg2_arg)}, arg3{move(arg3_arg)} { }
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr ExpressionPtr
clone() const noexcept override clone() const noexcept override
{ {
@ -649,7 +649,7 @@ namespace macro
c_vars{move(c_vars_arg)}, c_set{move(c_set_arg)}, c_when{move(c_when_arg)} { } c_vars{move(c_vars_arg)}, c_set{move(c_set_arg)}, c_when{move(c_when_arg)} { }
string to_string() const noexcept override; string to_string() const noexcept override;
void print(ostream &output, bool matlab_output = false) const noexcept override; void print(ostream &output, bool matlab_output = false) const noexcept override;
BaseTypePtr eval(Environment &env) override; BaseTypePtr eval(Environment &env) const override;
ExpressionPtr clone() const noexcept override; ExpressionPtr clone() const noexcept override;
}; };
} }