diff options
-rw-r--r-- | src/hir/from_ast.cpp | 5 | ||||
-rw-r--r-- | src/hir/hir.hpp | 8 | ||||
-rw-r--r-- | src/hir/serialise.cpp | 3 | ||||
-rw-r--r-- | src/hir/visitor.cpp | 4 | ||||
-rw-r--r-- | src/hir_expand/reborrow.cpp | 2 | ||||
-rw-r--r-- | src/hir_expand/ufcs_everything.cpp | 2 | ||||
-rw-r--r-- | src/hir_typeck/expr_check.cpp | 5 | ||||
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 3 | ||||
-rw-r--r-- | src/hir_typeck/expr_visit.cpp | 2 | ||||
-rw-r--r-- | src/mir/check.cpp | 2 | ||||
-rw-r--r-- | src/mir/from_hir.cpp | 5 |
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, {}); ) } } |