diff options
author | John Hodge <tpg@mutabah.net> | 2016-05-18 20:42:08 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-05-18 20:42:08 +0800 |
commit | 921db4d1205948cbf684bf7e1d3894bdb7c2b4d5 (patch) | |
tree | e0e1c5bf9a341dc12165d19e879362f065d2ac69 /src/hir/expr.hpp | |
parent | c9284d392f89c0108785189ff986efbece5c9b65 (diff) | |
download | mrust-921db4d1205948cbf684bf7e1d3894bdb7c2b4d5.tar.gz |
Tagged union cleanup hacks
Diffstat (limited to 'src/hir/expr.hpp')
-rw-r--r-- | src/hir/expr.hpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp index c47131b4..eb321bec 100644 --- a/src/hir/expr.hpp +++ b/src/hir/expr.hpp @@ -79,6 +79,27 @@ struct ExprNode_Let: NODE_METHODS(); }; +struct ExprNode_Match: + public ExprNode +{ + struct Arm + { + ::std::vector< ::HIR::Pattern> m_patterns; + ::HIR::ExprNodeP m_cond; + ::HIR::ExprNodeP m_code; + }; + + ::HIR::ExprNodeP m_value; + ::std::vector<Arm> m_arms; + + ExprNode_Match(::HIR::ExprNodeP val, ::std::vector<Arm> arms): + m_value( mv$(val) ), + m_arms( mv$(arms) ) + {} + + NODE_METHODS(); +}; + struct ExprNode_Assign: public ExprNode { @@ -251,6 +272,24 @@ struct ExprNode_Variable: NODE_METHODS(); }; +struct ExprNode_StructLiteral: + public ExprNode +{ + typedef ::std::vector< ::std::pair< ::std::string, ExprNodeP > > t_values; + + ::HIR::GenericPath m_path; + ::HIR::ExprNodeP m_base_value; + t_values m_values; + + ExprNode_StructLiteral(::HIR::GenericPath path, ::HIR::ExprNodeP base_value, t_values values): + m_path( mv$(path) ), + m_base_value( mv$(base_value) ), + m_values( mv$(values) ) + {} + + NODE_METHODS(); +}; + #undef NODE_METHODS class ExprVisitor @@ -263,6 +302,7 @@ public: NV(ExprNode_Let) NV(ExprNode_Loop) NV(ExprNode_LoopControl) + NV(ExprNode_Match) NV(ExprNode_Assign) NV(ExprNode_BinOp) @@ -275,6 +315,7 @@ public: NV(ExprNode_Literal); NV(ExprNode_PathValue); NV(ExprNode_Variable); + NV(ExprNode_StructLiteral); }; } |