summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hir/from_ast.cpp5
-rw-r--r--src/hir/hir.hpp8
-rw-r--r--src/hir/serialise.cpp3
-rw-r--r--src/hir/visitor.cpp4
-rw-r--r--src/hir_expand/reborrow.cpp2
-rw-r--r--src/hir_expand/ufcs_everything.cpp2
-rw-r--r--src/hir_typeck/expr_check.cpp5
-rw-r--r--src/hir_typeck/expr_cs.cpp3
-rw-r--r--src/hir_typeck/expr_visit.cpp2
-rw-r--r--src/mir/check.cpp2
-rw-r--r--src/mir/from_hir.cpp5
11 files changed, 19 insertions, 22 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp
index 554d5699..2119424f 100644
--- a/src/hir/from_ast.cpp
+++ b/src/hir/from_ast.cpp
@@ -766,7 +766,10 @@ namespace {
{
TU_MATCH(::AST::EnumVariantData, (var.m_data), (e),
(Value,
- variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Value(LowerHIR_Expr(e.m_value)) ) );
+ variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Value({
+ LowerHIR_Expr(e.m_value),
+ ::HIR::Literal {}
+ }) ) );
),
(Tuple,
if( e.m_sub_types.size() == 0 ) {
diff --git a/src/hir/hir.hpp b/src/hir/hir.hpp
index 86573c31..65012c48 100644
--- a/src/hir/hir.hpp
+++ b/src/hir/hir.hpp
@@ -120,7 +120,10 @@ class Enum
public:
TAGGED_UNION(Variant, Unit,
(Unit, struct{}),
- (Value, ::HIR::ExprPtr),
+ (Value, struct {
+ ::HIR::ExprPtr expr;
+ Literal val;
+ }),
(Tuple, t_tuple_fields),
(Struct, t_struct_fields)
);
@@ -163,8 +166,7 @@ struct AssociatedType
::std::vector< ::HIR::TraitPath> m_trait_bounds;
::HIR::TypeRef m_default;
};
-TAGGED_UNION(TraitValueItem, None,
- (None, struct {}),
+TAGGED_UNION(TraitValueItem, Constant,
(Constant, Constant),
(Static, Static),
(Function, Function)
diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp
index ec2d5974..fc157704 100644
--- a/src/hir/serialise.cpp
+++ b/src/hir/serialise.cpp
@@ -807,9 +807,6 @@ namespace {
{
write_tag( tvi.tag() );
TU_MATCHA( (tvi), (e),
- (None,
- BUG(Span(), "Found None TraitValueItem");
- ),
(Constant,
serialise(e);
),
diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp
index 2471bfa2..96c3a1d1 100644
--- a/src/hir/visitor.cpp
+++ b/src/hir/visitor.cpp
@@ -155,7 +155,7 @@ void ::HIR::Visitor::visit_trait(::HIR::ItemPath p, ::HIR::Trait& item)
for(auto& i : item.m_values) {
auto item_path = ::HIR::ItemPath(trait_ip, i.first.c_str());
TU_MATCH(::HIR::TraitValueItem, (i.second), (e),
- (None, ),
+ //(None, ),
(Constant,
DEBUG("constant " << i.first);
this->visit_constant(item_path, e);
@@ -198,7 +198,7 @@ void ::HIR::Visitor::visit_enum(::HIR::ItemPath p, ::HIR::Enum& item)
(Unit,
),
(Value,
- this->visit_expr(v);
+ this->visit_expr(v.expr);
),
(Tuple,
for(auto& ty : v) {
diff --git a/src/hir_expand/reborrow.cpp b/src/hir_expand/reborrow.cpp
index ccd6f378..a23d0cd6 100644
--- a/src/hir_expand/reborrow.cpp
+++ b/src/hir_expand/reborrow.cpp
@@ -173,7 +173,7 @@ namespace {
DEBUG("Enum value " << p << " - " << var.first);
ExprVisitor_Mutate ev(m_crate);
- ev.visit_node_ptr(e);
+ ev.visit_node_ptr(e.expr);
)
}
}
diff --git a/src/hir_expand/ufcs_everything.cpp b/src/hir_expand/ufcs_everything.cpp
index 91b6aaa3..550b9517 100644
--- a/src/hir_expand/ufcs_everything.cpp
+++ b/src/hir_expand/ufcs_everything.cpp
@@ -743,7 +743,7 @@ namespace {
DEBUG("Enum value " << p << " - " << var.first);
ExprVisitor_Mutate ev(m_crate);
- ev.visit_node_ptr(e);
+ ev.visit_node_ptr(e.expr);
)
}
}
diff --git a/src/hir_typeck/expr_check.cpp b/src/hir_typeck/expr_check.cpp
index 74002890..fa12d363 100644
--- a/src/hir_typeck/expr_check.cpp
+++ b/src/hir_typeck/expr_check.cpp
@@ -828,11 +828,10 @@ namespace {
const auto& trait = this->m_resolve.m_crate.get_trait_by_path(sp, e.trait.m_path);
auto it = trait.m_values.find( e.item );
- if( it == trait.m_values.end() || it->second.is_None() ) {
+ if( it == trait.m_values.end() ) {
ERROR(sp, E0000, "`" << e.item << "` is not a value member of trait " << e.trait.m_path);
}
TU_MATCH( ::HIR::TraitValueItem, (it->second), (ie),
- (None, throw ""; ),
(Constant,
TODO(sp, "Monomorpise associated constant type - " << ie.m_type);
),
@@ -972,7 +971,7 @@ namespace {
t_args tmp;
ExprVisitor_Validate ev(m_resolve, tmp, enum_type);
- ev.visit_root(*e);
+ ev.visit_root(*e.expr);
)
}
}
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp
index d6c5478a..bb7c6b5b 100644
--- a/src/hir_typeck/expr_cs.cpp
+++ b/src/hir_typeck/expr_cs.cpp
@@ -1187,11 +1187,10 @@ namespace {
// - If it's an associated `const`, will have to revisit
const auto& trait = this->context.m_crate.get_trait_by_path(sp, e.trait.m_path);
auto it = trait.m_values.find( e.item );
- if( it == trait.m_values.end() || it->second.is_None() ) {
+ if( it == trait.m_values.end() ) {
ERROR(sp, E0000, "`" << e.item << "` is not a value member of trait " << e.trait.m_path);
}
TU_MATCH( ::HIR::TraitValueItem, (it->second), (ie),
- (None, throw ""; ),
(Constant,
TODO(sp, "Monomorpise associated constant type - " << ie.m_type);
),
diff --git a/src/hir_typeck/expr_visit.cpp b/src/hir_typeck/expr_visit.cpp
index 2427f44f..4b581e0d 100644
--- a/src/hir_typeck/expr_visit.cpp
+++ b/src/hir_typeck/expr_visit.cpp
@@ -133,7 +133,7 @@ namespace {
TU_IFLET(::HIR::Enum::Variant, var.second, Value, e,
DEBUG("Enum value " << p << " - " << var.first);
t_args tmp;
- Typecheck_Code(m_ms, tmp, enum_type, e);
+ Typecheck_Code(m_ms, tmp, enum_type, e.expr);
)
}
}
diff --git a/src/mir/check.cpp b/src/mir/check.cpp
index dc208431..fd06efc3 100644
--- a/src/mir/check.cpp
+++ b/src/mir/check.cpp
@@ -138,7 +138,7 @@ namespace {
for(auto& var : item.m_variants)
{
TU_IFLET(::HIR::Enum::Variant, var.second, Value, e,
- MIR_Validate(m_resolve, *e.m_mir, {});
+ MIR_Validate(m_resolve, *e.expr.m_mir, {});
)
}
}
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp
index ede4ba88..dc890495 100644
--- a/src/mir/from_hir.cpp
+++ b/src/mir/from_hir.cpp
@@ -1230,9 +1230,6 @@ namespace {
auto it = tr.m_values.find(pe.item);
ASSERT_BUG(sp, it != tr.m_values.end(), "Cannot find trait item for " << node.m_path);
TU_MATCHA( (it->second), (e),
- (None,
- BUG(sp, "Path " << node.m_path << " points to a None trait item");
- ),
(Constant,
TODO(sp, "Associated constants - " << node.m_path);
),
@@ -1510,7 +1507,7 @@ namespace {
for(auto& var : item.m_variants)
{
TU_IFLET(::HIR::Enum::Variant, var.second, Value, e,
- e.m_mir = LowerMIR(m_resolve, e, {});
+ e.expr.m_mir = LowerMIR(m_resolve, e.expr, {});
)
}
}