diff --git a/src/macro/MacroValue.cc b/src/macro/MacroValue.cc index 737168c9..6088bdb2 100644 --- a/src/macro/MacroValue.cc +++ b/src/macro/MacroValue.cc @@ -18,6 +18,7 @@ */ #include +#include #include "MacroDriver.hh" @@ -198,6 +199,15 @@ IntMV::divide(const MacroValuePtr &mv) noexcept(false) return make_shared(value / mv2->value); } +MacroValuePtr +IntMV::power(const MacroValuePtr &mv) noexcept(false) +{ + auto mv2 = dynamic_pointer_cast(mv); + if (!mv2) + throw TypeError("Type mismatch for operands of ^ operator"); + return make_shared(pow(value, mv2->value)); +} + shared_ptr IntMV::is_less(const MacroValuePtr &mv) noexcept(false) { diff --git a/src/macro/MacroValue.hh b/src/macro/MacroValue.hh index f0eff55e..acb6447d 100644 --- a/src/macro/MacroValue.hh +++ b/src/macro/MacroValue.hh @@ -135,6 +135,7 @@ public: MacroValuePtr times(const MacroValuePtr &mv) noexcept(false) override; //! Computes arithmetic division MacroValuePtr divide(const MacroValuePtr &mv) noexcept(false) override; + MacroValuePtr power(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_less(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_greater(const MacroValuePtr &mv) noexcept(false) override; shared_ptr is_less_equal(const MacroValuePtr &mv) noexcept(false) override;