diff options
author | John Hodge <tpg@mutabah.net> | 2016-02-21 21:19:31 +1100 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-02-21 21:19:31 +1100 |
commit | ea3291cbe5192fa20f1a5d4dc45d776e48c21b7d (patch) | |
tree | 65e465e32a2c38889b4fdda86509eb978250287f /src/ast/pattern.hpp | |
parent | e674cb99edf50de91f8f5aed3188e30ffb7c88d7 (diff) | |
download | mrust-ea3291cbe5192fa20f1a5d4dc45d776e48c21b7d.tar.gz |
Fixing parser deficiencies
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r-- | src/ast/pattern.hpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/ast/pattern.hpp b/src/ast/pattern.hpp index f28fe8e3..6cd78e91 100644 --- a/src/ast/pattern.hpp +++ b/src/ast/pattern.hpp @@ -11,6 +11,7 @@ namespace AST { using ::std::unique_ptr; using ::std::move; +class MacroInvocation; class ExprNode; @@ -19,8 +20,9 @@ class Pattern: { public: TAGGED_UNION(Data, Any, - (Any, () ), (MaybeBind, () ), + (Macro, (unique_ptr<::AST::MacroInvocation> inv;) ), + (Any, () ), (Box, (unique_ptr<Pattern> sub;) ), (Ref, (bool mut; unique_ptr<Pattern> sub;) ), (Value, (unique_ptr<ExprNode> start; unique_ptr<ExprNode> end;) ), @@ -36,6 +38,17 @@ public: Pattern() {} + struct TagMaybeBind {}; + Pattern(TagMaybeBind, ::std::string name): + m_binding(name), + m_data( Data::make_MaybeBind({}) ) + {} + + struct TagMacro {}; + Pattern(TagMacro, unique_ptr<::AST::MacroInvocation> inv): + m_data( Data::make_Macro({mv$(inv)}) ) + {} + // Wildcard = '..', distinct from '_' // TODO: Store wildcard as a different pattern type struct TagWildcard {}; @@ -47,12 +60,6 @@ public: m_binding(name) {} - struct TagMaybeBind {}; - Pattern(TagMaybeBind, ::std::string name): - m_binding(name), - m_data( Data::make_MaybeBind({}) ) - {} - struct TagBox {}; Pattern(TagBox, Pattern sub): m_data( Data::make_Box({ unique_ptr<Pattern>(new Pattern(mv$(sub))) }) ) |