/* @file IfExpr.cpp */ #include "IfExpr.hpp" #include "pretty_expression.hpp" #include "pretty_variable.hpp" //#include "xo/indentlog/print/vector.hpp" namespace xo { namespace ast { rp IfExpr::make(const rp & test, const rp & when_true, const rp & when_false) { /** TODO: verify test returns _boolean_ type **/ if (when_true->valuetype() != when_false->valuetype()) { throw std::runtime_error (tostr("IfExpr::make:" " types {T1,T2} found for branches of if-expr" " where equal types expected", xtag("T1", when_true->valuetype()->canonical_name()), xtag("T2", when_false->valuetype()->canonical_name()))); } /* arbitrary choice here */ auto ifexpr_type = when_true->valuetype(); return new IfExpr(ifexpr_type, test, when_true, when_false); } /*make*/ void IfExpr::display(std::ostream & os) const { os << ""; } /*display*/ std::uint32_t IfExpr::pretty_print(const ppindentinfo & ppii) const { return ppii.pps()->pretty_struct(ppii, "IfExpr", refrtag("test", test_), refrtag("when_true", when_true_), refrtag("when_false", when_false_)); } } /*namespace ast*/ } /*namespace xo*/ /* end IfExpr.cpp */