diff --git a/src/macro/Expressions.cc b/src/macro/Expressions.cc index 16a4553ac9792c6b1de87b73872a4922e86a64a1..b132a9abaf04ad3579968be547d334e98f064717 100644 --- a/src/macro/Expressions.cc +++ b/src/macro/Expressions.cc @@ -773,87 +773,86 @@ UnaryOp::eval() { try { - auto argbt = arg->eval(); switch (op_code) { case codes::UnaryOp::cast_bool: - return argbt->cast_bool(); + return arg->eval()->cast_bool(); case codes::UnaryOp::cast_real: - return argbt->cast_real(); + return arg->eval()->cast_real(); case codes::UnaryOp::cast_string: - return argbt->cast_string(); + return arg->eval()->cast_string(); case codes::UnaryOp::cast_tuple: - return argbt->cast_tuple(); + return arg->eval()->cast_tuple(); case codes::UnaryOp::cast_array: - return argbt->cast_array(); + return arg->eval()->cast_array(); case codes::UnaryOp::logical_not: - return argbt->logical_not(); + return arg->eval()->logical_not(); case codes::UnaryOp::unary_minus: - return argbt->unary_minus(); + return arg->eval()->unary_minus(); case codes::UnaryOp::unary_plus: - return argbt->unary_plus(); + return arg->eval()->unary_plus(); case codes::UnaryOp::length: - return argbt->length(); + return arg->eval()->length(); case codes::UnaryOp::isempty: - return argbt->isempty(); + return arg->eval()->isempty(); case codes::UnaryOp::isboolean: - return argbt->isboolean(); + return arg->eval()->isboolean(); case codes::UnaryOp::isreal: - return argbt->isreal(); + return arg->eval()->isreal(); case codes::UnaryOp::isstring: - return argbt->isstring(); + return arg->eval()->isstring(); case codes::UnaryOp::istuple: - return argbt->istuple(); + return arg->eval()->istuple(); case codes::UnaryOp::isarray: - return argbt->isarray(); + return arg->eval()->isarray(); case codes::UnaryOp::exp: - return argbt->exp(); + return arg->eval()->exp(); case codes::UnaryOp::ln: - return argbt->ln(); + return arg->eval()->ln(); case codes::UnaryOp::log10: - return argbt->log10(); + return arg->eval()->log10(); case codes::UnaryOp::sin: - return argbt->sin(); + return arg->eval()->sin(); case codes::UnaryOp::cos: - return argbt->cos(); + return arg->eval()->cos(); case codes::UnaryOp::tan: - return argbt->tan(); + return arg->eval()->tan(); case codes::UnaryOp::asin: - return argbt->asin(); + return arg->eval()->asin(); case codes::UnaryOp::acos: - return argbt->acos(); + return arg->eval()->acos(); case codes::UnaryOp::atan: - return argbt->atan(); + return arg->eval()->atan(); case codes::UnaryOp::sqrt: - return argbt->sqrt(); + return arg->eval()->sqrt(); case codes::UnaryOp::cbrt: - return argbt->cbrt(); + return arg->eval()->cbrt(); case codes::UnaryOp::sign: - return argbt->sign(); + return arg->eval()->sign(); case codes::UnaryOp::floor: - return argbt->floor(); + return arg->eval()->floor(); case codes::UnaryOp::ceil: - return argbt->ceil(); + return arg->eval()->ceil(); case codes::UnaryOp::trunc: - return argbt->trunc(); + return arg->eval()->trunc(); case codes::UnaryOp::sum: - return argbt->sum(); + return arg->eval()->sum(); case codes::UnaryOp::erf: - return argbt->erf(); + return arg->eval()->erf(); case codes::UnaryOp::erfc: - return argbt->erfc(); + return arg->eval()->erfc(); case codes::UnaryOp::gamma: - return argbt->gamma(); + return arg->eval()->gamma(); case codes::UnaryOp::lgamma: - return argbt->lgamma(); + return arg->eval()->lgamma(); case codes::UnaryOp::round: - return argbt->round(); + return arg->eval()->round(); case codes::UnaryOp::normpdf: - return argbt->normpdf(); + return arg->eval()->normpdf(); case codes::UnaryOp::normcdf: - return argbt->normcdf(); + return arg->eval()->normcdf(); case codes::UnaryOp::defined: - return argbt->defined(); + return arg->eval()->defined(); } } catch (StackTrace &ex) @@ -874,47 +873,46 @@ BinaryOp::eval() { try { - auto arg1bt = arg1->eval(); switch(op_code) { case codes::BinaryOp::plus: - return arg1bt->plus(arg2->eval()); + return arg1->eval()->plus(arg2->eval()); case codes::BinaryOp::minus: - return arg1bt->minus(arg2->eval()); + return arg1->eval()->minus(arg2->eval()); case codes::BinaryOp::times: - return arg1bt->times(arg2->eval()); + return arg1->eval()->times(arg2->eval()); case codes::BinaryOp::divide: - return arg1bt->divide(arg2->eval()); + return arg1->eval()->divide(arg2->eval()); case codes::BinaryOp::power: - return arg1bt->power( arg2->eval()); + return arg1->eval()->power( arg2->eval()); case codes::BinaryOp::equal_equal: - return arg1bt->is_equal(arg2->eval()); + return arg1->eval()->is_equal(arg2->eval()); case codes::BinaryOp::not_equal: - return arg1bt->is_different(arg2->eval()); + return arg1->eval()->is_different(arg2->eval()); case codes::BinaryOp::less: - return arg1bt->is_less(arg2->eval()); + return arg1->eval()->is_less(arg2->eval()); case codes::BinaryOp::greater: - return arg1bt->is_greater(arg2->eval()); + return arg1->eval()->is_greater(arg2->eval()); case codes::BinaryOp::less_equal: - return arg1bt->is_less_equal(arg2->eval()); + return arg1->eval()->is_less_equal(arg2->eval()); case codes::BinaryOp::greater_equal: - return arg1bt->is_greater_equal(arg2->eval()); + return arg1->eval()->is_greater_equal(arg2->eval()); case codes::BinaryOp::logical_and: - return arg1bt->logical_and(arg2); + return arg1->eval()->logical_and(arg2); case codes::BinaryOp::logical_or: - return arg1bt->logical_or(arg2); + return arg1->eval()->logical_or(arg2); case codes::BinaryOp::in: - return arg2->eval()->contains(arg1bt); + return arg2->eval()->contains(arg1->eval()); case codes::BinaryOp::set_union: - return arg1bt->set_union(arg2->eval()); + return arg1->eval()->set_union(arg2->eval()); case codes::BinaryOp::set_intersection: - return arg1bt->set_intersection(arg2->eval()); + return arg1->eval()->set_intersection(arg2->eval()); case codes::BinaryOp::max: - return arg1bt->max(arg2->eval()); + return arg1->eval()->max(arg2->eval()); case codes::BinaryOp::min: - return arg1bt->min(arg2->eval()); + return arg1->eval()->min(arg2->eval()); case codes::BinaryOp::mod: - return arg1bt->mod(arg2->eval()); + return arg1->eval()->mod(arg2->eval()); } } catch (StackTrace &ex) @@ -935,15 +933,12 @@ TrinaryOp::eval() { try { - auto arg1bt = arg1->eval(); - auto arg2bt = arg2->eval(); - auto arg3bt = arg3->eval(); switch(op_code) { case codes::TrinaryOp::normpdf: - return arg1bt->normpdf(arg2bt, arg3bt); + return arg1->eval()->normpdf(arg2->eval(), arg3->eval()); case codes::TrinaryOp::normcdf: - return arg1bt->normcdf(arg2bt, arg3bt); + return arg1->eval()->normcdf(arg2->eval(), arg3->eval()); } } catch (StackTrace &ex)