diff options
Diffstat (limited to 'src/hir/pattern.hpp')
-rw-r--r-- | src/hir/pattern.hpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/hir/pattern.hpp b/src/hir/pattern.hpp index 2ff0a0d2..4d7668f6 100644 --- a/src/hir/pattern.hpp +++ b/src/hir/pattern.hpp @@ -12,10 +12,31 @@ namespace HIR { struct PatternBinding { + enum class Type { + Move, + Ref, + MutRef, + }; + + bool m_mutable; + Type m_type; ::std::string m_name; unsigned int m_slot; bool is_valid() const { return m_name == ""; } + + PatternBinding(): + m_mutable(false), + m_type(Type::Move), + m_name(""), + m_slot(0) + {} + PatternBinding(bool mut, Type type, ::std::string name, unsigned int slot): + m_mutable(mut), + m_type(type), + m_name( mv$(name) ), + m_slot( slot ) + {} }; struct Pattern @@ -30,16 +51,20 @@ struct Pattern ); TAGGED_UNION(Data, Any, + // Irrefutable / destructuring (Any, struct { } ), (Box, struct { ::std::unique_ptr<Pattern> sub; }), - (Ref, struct { bool mut; ::std::unique_ptr<Pattern> sub; } ), - (Value, struct { Value val; } ), - (Range, struct { Value start; Value end; } ), + (Ref, struct { ::HIR::BorrowType type; ::std::unique_ptr<Pattern> sub; } ), (Tuple, struct { ::std::vector<Pattern> sub_patterns; } ), (StructTuple, struct { GenericPath path; ::std::vector<Pattern> sub_patterns; } ), (Struct, struct { GenericPath path; ::std::vector< ::std::pair< ::std::string, Pattern> > sub_patterns; } ), + // Refutable + (Value, struct { Value val; } ), + (Range, struct { Value start; Value end; } ), + (EnumTuple, struct { GenericPath path; ::std::vector<Pattern> sub_patterns; } ), + (EnumStruct, struct { GenericPath path; ::std::vector< ::std::pair< ::std::string, Pattern> > sub_patterns; } ), (Slice, struct { - ::std::vector<Pattern> leading; + ::std::vector<Pattern> sub_patterns; } ), (SplitSlice, struct { ::std::vector<Pattern> leading; |