diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-19 10:27:38 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-19 10:27:38 +0800 |
commit | a3e8257c4f77f197c9be2dbae7aaddb81257abb2 (patch) | |
tree | 598c815b4e42041966e3a0834a118b9a7c56411f /src/ast/pattern.hpp | |
parent | 64c957b03ede8b0af825b50e6e551c61444a3275 (diff) | |
download | mrust-a3e8257c4f77f197c9be2dbae7aaddb81257abb2.tar.gz |
Patterns - Support tuples with .. (fully)
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r-- | src/ast/pattern.hpp | 22 |
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) } ) ) {} |