diff options
author | John Hodge <tpg@mutabah.net> | 2016-09-25 21:23:07 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-09-25 21:23:07 +0800 |
commit | 36e197f903ba19229b35cdd7c5bea045ca34dcdc (patch) | |
tree | 547ffd0f02cf00ebaba9dd40caf51c809d65cb0e /src/ast/expr_ptr.hpp | |
parent | adc6e7e42f05724d031c50d6d0092753e87cc79d (diff) | |
download | mrust-36e197f903ba19229b35cdd7c5bea045ca34dcdc.tar.gz |
Parse+AST - Support capturing :item (requires cloning AST items)
Diffstat (limited to 'src/ast/expr_ptr.hpp')
-rw-r--r-- | src/ast/expr_ptr.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ast/expr_ptr.hpp b/src/ast/expr_ptr.hpp new file mode 100644 index 00000000..eb60c49f --- /dev/null +++ b/src/ast/expr_ptr.hpp @@ -0,0 +1,33 @@ +/* + */ +#include <memory> + +namespace AST { + +class ExprNode; +class NodeVisitor; + +typedef ::std::unique_ptr<AST::ExprNode> ExprNodeP; +extern ::std::ostream& operator<<(::std::ostream& os, const ExprNode& node); + +class Expr +{ + ::std::shared_ptr<ExprNode> m_node; +public: + Expr(unique_ptr<ExprNode> node); + Expr(ExprNode* node); + Expr(); + + bool is_valid() const { return m_node.get() != nullptr; } + const ExprNode& node() const { assert(m_node.get()); return *m_node; } + ExprNode& node() { assert(m_node.get()); return *m_node; } + ::std::shared_ptr<ExprNode> take_node() { assert(m_node.get()); return ::std::move(m_node); } + void visit_nodes(NodeVisitor& v); + void visit_nodes(NodeVisitor& v) const; + + Expr clone() const; + + friend ::std::ostream& operator<<(::std::ostream& os, const Expr& pat); +}; + +} |