diff options
author | John Hodge <tpg@mutabah.net> | 2016-05-29 22:30:28 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-05-29 22:30:28 +0800 |
commit | 7890a6dba8fcdb9454b2e58ea1363f270d2da2c5 (patch) | |
tree | fa51d39712f552c78b390d61d19793c737d5238a /src/ast/pattern.hpp | |
parent | 73bcd2fb0bda8f939a6c1385b419a67ad8eeef2c (diff) | |
download | mrust-7890a6dba8fcdb9454b2e58ea1363f270d2da2c5.tar.gz |
Parse/AST/HIR - Support Enum::Var(..) and Struct { .. } patters properly
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r-- | src/ast/pattern.hpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/ast/pattern.hpp b/src/ast/pattern.hpp index 79d349c2..699ed466 100644 --- a/src/ast/pattern.hpp +++ b/src/ast/pattern.hpp @@ -40,8 +40,9 @@ public: (Ref, struct { bool mut; unique_ptr<Pattern> sub; } ), (Value, struct { Value start; Value end; } ), (Tuple, struct { ::std::vector<Pattern> sub_patterns; } ), + (WildcardStructTuple, struct { Path path; } ), (StructTuple, struct { Path path; ::std::vector<Pattern> sub_patterns; } ), - (Struct, struct { Path path; ::std::vector< ::std::pair< ::std::string, Pattern> > sub_patterns; } ), + (Struct, struct { Path path; ::std::vector< ::std::pair< ::std::string, Pattern> > sub_patterns; bool is_exhaustive; } ), (Slice, struct { ::std::vector<Pattern> leading; ::std::string extra_bind; ::std::vector<Pattern> trailing; } ) ); private: @@ -110,13 +111,16 @@ public: {} struct TagEnumVariant {}; + Pattern(TagEnumVariant, Path path): + m_data( Data::make_WildcardStructTuple( { ::std::move(path) } ) ) + {} Pattern(TagEnumVariant, Path path, ::std::vector<Pattern> sub_patterns): m_data( Data::make_StructTuple( { ::std::move(path), ::std::move(sub_patterns) } ) ) {} struct TagStruct {}; - Pattern(TagStruct, Path path, ::std::vector< ::std::pair< ::std::string,Pattern> > sub_patterns): - m_data( Data::make_Struct( { ::std::move(path), ::std::move(sub_patterns) } ) ) + Pattern(TagStruct, Path path, ::std::vector< ::std::pair< ::std::string,Pattern> > sub_patterns, bool is_exhaustive): + m_data( Data::make_Struct( { ::std::move(path), ::std::move(sub_patterns), is_exhaustive } ) ) {} struct TagSlice {}; |