summaryrefslogtreecommitdiff
path: root/src/hir
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-10 15:49:20 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-10 15:49:20 +0800
commit9744f22c07c28d1577de9ee7034e337c1cfc46de (patch)
tree31718bf84fb46ee2398b9493872089171ce02d74 /src/hir
parent8f3fa5853e80590f666e4852f4f373c7b7826d3b (diff)
downloadmrust-9744f22c07c28d1577de9ee7034e337c1cfc46de.tar.gz
HIR - Add EnumValue variant to Pattern
Diffstat (limited to 'src/hir')
-rw-r--r--src/hir/pattern.cpp12
-rw-r--r--src/hir/pattern.hpp5
-rw-r--r--src/hir/visitor.cpp3
3 files changed, 17 insertions, 3 deletions
diff --git a/src/hir/pattern.cpp b/src/hir/pattern.cpp
index 8a95fa53..386d1699 100644
--- a/src/hir/pattern.cpp
+++ b/src/hir/pattern.cpp
@@ -76,6 +76,9 @@ namespace HIR {
os << e.start << " ... " << e.end;
),
+ (EnumValue,
+ os << e.path;
+ ),
(EnumTuple,
os << e.path;
os << "(";
@@ -84,7 +87,7 @@ namespace HIR {
os << ")";
),
(EnumTupleWildcard,
- os << e.path;
+ os << e.path << "(..)";
),
(EnumStruct,
os << e.path;
@@ -204,14 +207,17 @@ namespace {
}));
),
+ (EnumValue,
+ return Pattern(m_binding, Data::make_EnumValue({ e.path.clone(), e.binding_ptr, e.binding_idx }));
+ ),
(EnumTuple,
return Pattern(m_binding, Data::make_EnumTupleWildcard({
- e.path.clone()
+ e.path.clone(), e.binding_ptr, e.binding_idx
}));
),
(EnumTupleWildcard,
return Pattern(m_binding, Data::make_EnumTupleWildcard({
- e.path.clone()
+ e.path.clone(), e.binding_ptr, e.binding_idx
}));
),
(EnumStruct,
diff --git a/src/hir/pattern.hpp b/src/hir/pattern.hpp
index 72cb061d..b02721b2 100644
--- a/src/hir/pattern.hpp
+++ b/src/hir/pattern.hpp
@@ -79,6 +79,11 @@ struct Pattern
// Refutable
(Value, struct { Value val; } ),
(Range, struct { Value start; Value end; } ),
+ (EnumValue, struct {
+ GenericPath path;
+ const Enum* binding_ptr;
+ unsigned binding_idx;
+ } ),
(EnumTuple, struct {
GenericPath path;
const Enum* binding_ptr;
diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp
index cb942123..9767996e 100644
--- a/src/hir/visitor.cpp
+++ b/src/hir/visitor.cpp
@@ -351,6 +351,9 @@ void ::HIR::Visitor::visit_pattern(::HIR::Pattern& pat)
this->visit_pattern_val(e.start);
this->visit_pattern_val(e.end);
),
+ (EnumValue,
+ this->visit_generic_path(e.path, ::HIR::Visitor::PathContext::TYPE);
+ ),
(EnumTupleWildcard,
this->visit_generic_path(e.path, ::HIR::Visitor::PathContext::TYPE);
),