summaryrefslogtreecommitdiff
path: root/src/ast/pattern.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r--src/ast/pattern.hpp21
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))) }) )