summaryrefslogtreecommitdiff
path: root/src/ast/pattern.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-19 10:27:38 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-19 10:27:38 +0800
commita3e8257c4f77f197c9be2dbae7aaddb81257abb2 (patch)
tree598c815b4e42041966e3a0834a118b9a7c56411f /src/ast/pattern.hpp
parent64c957b03ede8b0af825b50e6e551c61444a3275 (diff)
downloadmrust-a3e8257c4f77f197c9be2dbae7aaddb81257abb2.tar.gz
Patterns - Support tuples with .. (fully)
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r--src/ast/pattern.hpp22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/ast/pattern.hpp b/src/ast/pattern.hpp
index 4db20fd5..687d1e34 100644
--- a/src/ast/pattern.hpp
+++ b/src/ast/pattern.hpp
@@ -60,14 +60,10 @@ public:
(Named, Path)
);
- enum class TupleGlob {
- None, // (a, b)
- Start, // (.., a, b)
- End, // (a, b, ..)
- };
struct TuplePat {
- TupleGlob glob_pos;
- ::std::vector<Pattern> sub_patterns;
+ ::std::vector<Pattern> start;
+ bool has_wildcard;
+ ::std::vector<Pattern> end;
};
TAGGED_UNION(Data, Any,
@@ -136,18 +132,18 @@ public:
}
struct TagTuple {};
- Pattern(TagTuple, TuplePat pat):
- m_data( Data::make_Tuple( ::std::move(pat) ) )
- {}
Pattern(TagTuple, ::std::vector<Pattern> pats):
- m_data( Data::make_Tuple( TuplePat { TupleGlob::None, ::std::move(pats) } ) )
+ m_data( Data::make_Tuple( TuplePat { mv$(pats), false, {} } ) )
+ {}
+ Pattern(TagTuple, TuplePat pat):
+ m_data( Data::make_Tuple( mv$(pat) ) )
{}
struct TagNamedTuple {};
Pattern(TagNamedTuple, Path path, ::std::vector<Pattern> pats):
- m_data( Data::make_StructTuple( { ::std::move(path), TuplePat { TupleGlob::None, ::std::move(pats) } } ) )
+ m_data( Data::make_StructTuple( { mv$(path), TuplePat { mv$(pats), false, {} } } ) )
{}
- Pattern(TagNamedTuple, Path path, TuplePat pat = TuplePat { TupleGlob::Start, {} }):
+ Pattern(TagNamedTuple, Path path, TuplePat pat = TuplePat { {}, false, {} }):
m_data( Data::make_StructTuple( { ::std::move(path), ::std::move(pat) } ) )
{}