summaryrefslogtreecommitdiff
path: root/src/ast/pattern.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2018-06-02 12:27:16 +0800
committerJohn Hodge <tpg@mutabah.net>2018-06-02 12:27:16 +0800
commit092a639c36b8c64ba5401ffa6c4f1cd4065a0135 (patch)
treed926b96ac740eb218dd2eaccbc84714b0bbaf239 /src/ast/pattern.hpp
parent5098d733af5daa569bfb57b2a9a3c521df9aeb06 (diff)
downloadmrust-092a639c36b8c64ba5401ffa6c4f1cd4065a0135.tar.gz
AST - Annotate all patterns with spans
Diffstat (limited to 'src/ast/pattern.hpp')
-rw-r--r--src/ast/pattern.hpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/ast/pattern.hpp b/src/ast/pattern.hpp
index 583ce351..a5e97c40 100644
--- a/src/ast/pattern.hpp
+++ b/src/ast/pattern.hpp
@@ -106,40 +106,45 @@ public:
Pattern(Pattern&&) = default;
Pattern& operator=(Pattern&&) = default;
- Pattern(Data dat):
- m_binding(),
+ Pattern(Span sp, Data dat):
+ m_span( mv$(sp) ),
m_data( mv$(dat) )
{};
struct TagMaybeBind {};
- Pattern(TagMaybeBind, Ident name):
- m_binding(),
+ Pattern(TagMaybeBind, Span sp, Ident name):
+ m_span( mv$(sp) ),
m_data( Data::make_MaybeBind({ mv$(name) }) )
{}
struct TagMacro {};
- Pattern(TagMacro, unique_ptr<::AST::MacroInvocation> inv):
+ Pattern(TagMacro, Span sp, unique_ptr<::AST::MacroInvocation> inv):
+ m_span( mv$(sp) ),
m_data( Data::make_Macro({ mv$(inv) }) )
{}
struct TagBind {};
- Pattern(TagBind, Ident name, PatternBinding::Type ty = PatternBinding::Type::MOVE, bool is_mut=false):
+ Pattern(TagBind, Span sp, Ident name, PatternBinding::Type ty = PatternBinding::Type::MOVE, bool is_mut=false):
+ m_span( mv$(sp) ),
m_binding( PatternBinding(mv$(name), ty, is_mut) )
{}
struct TagBox {};
- Pattern(TagBox, Pattern sub):
+ Pattern(TagBox, Span sp, Pattern sub):
+ m_span( mv$(sp) ),
m_data( Data::make_Box({ unique_ptr<Pattern>(new Pattern(mv$(sub))) }) )
{}
struct TagValue {};
- Pattern(TagValue, Value val, Value end = Value()):
+ Pattern(TagValue, Span sp, Value val, Value end = Value()):
+ m_span( mv$(sp) ),
m_data( Data::make_Value({ ::std::move(val), ::std::move(end) }) )
{}
struct TagReference {};
- Pattern(TagReference, bool is_mutable, Pattern sub_pattern):
+ Pattern(TagReference, Span sp, bool is_mutable, Pattern sub_pattern):
+ m_span( mv$(sp) ),
m_data( Data::make_Ref( /*Data::Data_Ref */ {
is_mutable, unique_ptr<Pattern>(new Pattern(::std::move(sub_pattern)))
}) )
@@ -147,23 +152,28 @@ public:
}
struct TagTuple {};
- Pattern(TagTuple, ::std::vector<Pattern> pats):
+ Pattern(TagTuple, Span sp, ::std::vector<Pattern> pats):
+ m_span( mv$(sp) ),
m_data( Data::make_Tuple( TuplePat { mv$(pats), false, {} } ) )
{}
- Pattern(TagTuple, TuplePat pat):
+ Pattern(TagTuple, Span sp, TuplePat pat):
+ m_span( mv$(sp) ),
m_data( Data::make_Tuple( mv$(pat) ) )
{}
struct TagNamedTuple {};
- Pattern(TagNamedTuple, Path path, ::std::vector<Pattern> pats):
+ Pattern(TagNamedTuple, Span sp, Path path, ::std::vector<Pattern> pats):
+ m_span( mv$(sp) ),
m_data( Data::make_StructTuple( { mv$(path), TuplePat { mv$(pats), false, {} } } ) )
{}
- Pattern(TagNamedTuple, Path path, TuplePat pat = TuplePat { {}, false, {} }):
+ Pattern(TagNamedTuple, Span sp, Path path, TuplePat pat = TuplePat { {}, false, {} }):
+ m_span( mv$(sp) ),
m_data( Data::make_StructTuple( { ::std::move(path), ::std::move(pat) } ) )
{}
struct TagStruct {};
- Pattern(TagStruct, Path path, ::std::vector< ::std::pair< ::std::string,Pattern> > sub_patterns, bool is_exhaustive):
+ Pattern(TagStruct, Span sp, Path path, ::std::vector< ::std::pair< ::std::string,Pattern> > sub_patterns, bool is_exhaustive):
+ m_span( mv$(sp) ),
m_data( Data::make_Struct( { ::std::move(path), ::std::move(sub_patterns), is_exhaustive } ) )
{}
@@ -174,7 +184,6 @@ public:
const Span& span() const { return m_span; }
- void set_span(Span sp) { m_span = mv$(sp); }
Pattern clone() const;