summaryrefslogtreecommitdiff
path: root/src/ast/pattern.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-05-29 22:30:28 +0800
committerJohn Hodge <tpg@mutabah.net>2016-05-29 22:30:28 +0800
commit7890a6dba8fcdb9454b2e58ea1363f270d2da2c5 (patch)
treefa51d39712f552c78b390d61d19793c737d5238a /src/ast/pattern.hpp
parent73bcd2fb0bda8f939a6c1385b419a67ad8eeef2c (diff)
downloadmrust-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.hpp10
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 {};