diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-07 09:15:08 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-07 09:15:08 +0800 |
commit | 6b3870cb04010f656aa6d20a0574df993a766511 (patch) | |
tree | 9b63dcbc1bf5a732596a98b4b38b1b1b847b9616 | |
parent | 4f29602290f5faa8ca6b0ee224d621ca86b85c39 (diff) | |
download | mrust-6b3870cb04010f656aa6d20a0574df993a766511.tar.gz |
AST Expr - Handle some null nodes in printing
-rw-r--r-- | src/ast/expr.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp index d856029a..b39a2c3a 100644 --- a/src/ast/expr.cpp +++ b/src/ast/expr.cpp @@ -108,14 +108,17 @@ NODE(ExprNode_Flow, { case BREAK: os << "break"; break; case CONTINUE: os << "continue"; break; } - os << " " << *m_value; + if(m_value) + os << " " << *m_value; },{ return NEWNODE(ExprNode_Flow, m_type, m_target, m_value ? m_value->clone() : nullptr); }) NODE(ExprNode_LetBinding, { - os << "let " << m_pat << ": " << m_type << " = " << *m_value; + os << "let " << m_pat << ": " << m_type; + if(m_value) + os << " = " << *m_value; },{ return NEWNODE(ExprNode_LetBinding, m_pat.clone(), m_type.clone(), OPT_CLONE(m_value)); }) @@ -169,7 +172,10 @@ NODE(ExprNode_CallObject, { }) NODE(ExprNode_Loop, { - os << "LOOP [" << m_label << "] " << m_pattern << " in/= " << *m_cond << " " << *m_code; + os << "LOOP [" << m_label << "] " << m_pattern; + if(m_cond) + os << " in/= " << *m_cond; + os << " " << *m_code; },{ return NEWNODE(ExprNode_Loop, m_label, m_type, m_pattern.clone(), OPT_CLONE(m_cond), m_code->clone()); }) @@ -180,7 +186,8 @@ NODE(ExprNode_Match, { { for( const auto& pat : arm.m_patterns ) os << " " << pat; - os << " if " << *arm.m_cond; + if( arm.m_cond ) + os << " if " << *arm.m_cond; os << " => " << *arm.m_code << ","; } @@ -199,7 +206,9 @@ NODE(ExprNode_Match, { }) NODE(ExprNode_If, { - os << "if " << *m_cond << " { " << *m_true << " } else { " << *m_false << " }"; + os << "if " << *m_cond << " { " << *m_true << " }"; + if(m_false) + os << " else { " << *m_false << " }"; },{ return NEWNODE(ExprNode_If, m_cond->clone(), m_true->clone(), OPT_CLONE(m_false)); }) |