diff options
author | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-16 09:14:38 +0800 |
---|---|---|
committer | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-16 09:14:38 +0800 |
commit | 80e4060188913eb12ad8a774b07d3b938485a49a (patch) | |
tree | f8e978f4c1c93920aa16119199cf728b36915121 /src/ast/expr.hpp | |
parent | 7d04ce9d4c945cedf08ff2a7fa0af49ea4e6e1b0 (diff) | |
download | mrust-80e4060188913eb12ad8a774b07d3b938485a49a.tar.gz |
Added associated type reference parse, and tuple value parse
Diffstat (limited to 'src/ast/expr.hpp')
-rw-r--r-- | src/ast/expr.hpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/ast/expr.hpp b/src/ast/expr.hpp index 340d0bb2..bf238c6f 100644 --- a/src/ast/expr.hpp +++ b/src/ast/expr.hpp @@ -202,6 +202,18 @@ struct ExprNode_StructLiteral: virtual void visit(NodeVisitor& nv) override; }; +// Tuple +struct ExprNode_Tuple: + public ExprNode +{ + ::std::vector< unique_ptr<ExprNode> > m_values; + + ExprNode_Tuple(::std::vector< unique_ptr<ExprNode> > vals): + m_values( ::std::move(vals) ) + {} + + virtual void visit(NodeVisitor& nv) override; +}; // Variable / Constant struct ExprNode_NamedValue: public ExprNode @@ -329,6 +341,10 @@ public: for( auto& val : node.m_values ) visit(val.second); } + virtual void visit(ExprNode_Tuple& node) { + for( auto& val : node.m_values ) + visit(val); + } virtual void visit(ExprNode_NamedValue& node) { // LEAF } @@ -357,8 +373,12 @@ public: m_node(node) { } + Expr(): + m_node(nullptr) + { + } - ::std::shared_ptr<ExprNode> take_node() { return ::std::move(m_node); } + ::std::shared_ptr<ExprNode> take_node() { assert(m_node.get()); return ::std::move(m_node); } void visit_nodes(NodeVisitor& v); friend ::std::ostream& operator<<(::std::ostream& os, const Expr& pat); |