summaryrefslogtreecommitdiff
path: root/src/ast/expr.hpp
diff options
context:
space:
mode:
authorJohn Hodge (sonata) <tpg@mutabah.net>2015-01-16 09:14:38 +0800
committerJohn Hodge (sonata) <tpg@mutabah.net>2015-01-16 09:14:38 +0800
commit80e4060188913eb12ad8a774b07d3b938485a49a (patch)
treef8e978f4c1c93920aa16119199cf728b36915121 /src/ast/expr.hpp
parent7d04ce9d4c945cedf08ff2a7fa0af49ea4e6e1b0 (diff)
downloadmrust-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.hpp22
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);