diff options
Diffstat (limited to 'src/ast')
-rw-r--r-- | src/ast/expr.cpp | 6 | ||||
-rw-r--r-- | src/ast/expr.hpp | 12 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp index 49ebdbe2..a2f9cbd1 100644 --- a/src/ast/expr.cpp +++ b/src/ast/expr.cpp @@ -380,6 +380,7 @@ void operator%(::Serialiser& s, const ExprNode_BinOp::Type t) { _(CMPGT); _(CMPGTE); _(RANGE); + _(RANGE_INC); _(BOOLAND); _(BOOLOR); _(BITAND); @@ -408,6 +409,7 @@ void operator%(::Deserialiser& s, ExprNode_BinOp::Type& t) { _(CMPGT); _(CMPGTE); _(RANGE); + _(RANGE_INC); _(BOOLAND); _(BOOLOR); _(BITAND); @@ -451,6 +453,7 @@ NODE(ExprNode_BinOp, { case ADD: os << "+"; break; case SUB: os << "-"; break; case RANGE: os << ".."; break; + case RANGE_INC: os << "..."; break; case PLACE_IN: os << "<-"; break; } os << " " << *m_right << ")"; @@ -465,6 +468,7 @@ void operator%(::Serialiser& s, const ExprNode_UniOp::Type t) { _(BOX) _(REF) _(REFMUT) + _(QMARK) #undef _ } } @@ -478,6 +482,7 @@ void operator%(::Deserialiser& s, enum ExprNode_UniOp::Type& t) { _(BOX) _(REF) _(REFMUT) + _(QMARK) #undef _ else throw ::std::runtime_error( FMT("No uniop type for '" << n << "'") ); @@ -493,6 +498,7 @@ NODE(ExprNode_UniOp, { case BOX: os << "(box "; break; case REF: os << "(&"; break; case REFMUT: os << "(&mut "; break; + case QMARK: os << "(" << *m_value << "?)"; return; } os << *m_value << ")"; }) diff --git a/src/ast/expr.hpp b/src/ast/expr.hpp index 19b7cddc..19c348cb 100644 --- a/src/ast/expr.hpp +++ b/src/ast/expr.hpp @@ -513,6 +513,7 @@ struct ExprNode_BinOp: CMPGTE, RANGE, + RANGE_INC, BOOLAND, BOOLOR, @@ -551,11 +552,12 @@ struct ExprNode_UniOp: public ExprNode { enum Type { - REF, - REFMUT, - BOX, - INVERT, - NEGATE, + REF, // '& <expr>' + REFMUT, // '&mut <expr>' + BOX, // 'box <expr>' + INVERT, // '!<expr>' + NEGATE, // '-<expr>' + QMARK, // '<expr>?' }; enum Type m_type; |