diff options
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-item.cc | 6 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-type.cc | 6 | ||||
-rw-r--r-- | gcc/rust/hir/rust-hir-dump.cc | 18 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir-item.h | 6 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir-type.h | 8 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir.cc | 16 | ||||
-rw-r--r-- | gcc/rust/util/rust-common.h | 7 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 2 |
8 files changed, 45 insertions, 24 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-item.cc b/gcc/rust/hir/rust-ast-lower-item.cc index 93659c2..6eaf75f 100644 --- a/gcc/rust/hir/rust-ast-lower-item.cc +++ b/gcc/rust/hir/rust-ast-lower-item.cc @@ -535,7 +535,7 @@ ASTLoweringItem::visit (AST::InherentImpl &impl_block) impl_item_ids.push_back (lowered->get_impl_mappings ().get_hirid ()); } - Polarity polarity = Positive; + BoundPolarity polarity = BoundPolarity::RegularBound; HIR::ImplBlock *hir_impl_block = new HIR::ImplBlock ( mapping, std::move (impl_items), std::move (generic_params), std::unique_ptr<HIR::Type> (impl_type), nullptr, where_clause, polarity, @@ -683,7 +683,9 @@ ASTLoweringItem::visit (AST::TraitImpl &impl_block) impl_item_ids.push_back (lowered->get_impl_mappings ().get_hirid ()); } - Polarity polarity = impl_block.is_exclam () ? Positive : Negative; + BoundPolarity polarity = impl_block.is_exclam () + ? BoundPolarity::RegularBound + : BoundPolarity::NegativeBound; HIR::ImplBlock *hir_impl_block = new HIR::ImplBlock ( mapping, std::move (impl_items), std::move (generic_params), std::unique_ptr<HIR::Type> (impl_type), diff --git a/gcc/rust/hir/rust-ast-lower-type.cc b/gcc/rust/hir/rust-ast-lower-type.cc index 768817b..5388f21 100644 --- a/gcc/rust/hir/rust-ast-lower-type.cc +++ b/gcc/rust/hir/rust-ast-lower-type.cc @@ -525,9 +525,11 @@ ASTLoweringTypeBounds::visit (AST::TraitBound &bound) mappings->get_next_hir_id (crate_num), UNKNOWN_LOCAL_DEFID); + BoundPolarity polarity = bound.has_opening_question_mark () + ? BoundPolarity::AntiBound + : BoundPolarity::RegularBound; translated = new HIR::TraitBound (mapping, *trait_path, bound.get_locus (), - bound.is_in_parens (), - bound.has_opening_question_mark ()); + bound.is_in_parens (), polarity); } void diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index bb1fea9..012e3cd 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -52,6 +52,21 @@ std::string Dump::delims[2][2] = { {std::string ("["), std::string ("]")}, }; +static std::string +BoundPolarityString (BoundPolarity polarity) +{ + switch (polarity) + { + case RegularBound: + return "regular"; + case NegativeBound: + return "negative"; + case AntiBound: + return "anti"; + } + return "unknown"; +} + void Dump::go (HIR::Crate &e) { @@ -2276,8 +2291,7 @@ Dump::visit (TraitBound &e) begin ("TraitBound"); do_mappings (e.get_mappings ()); put_field ("in_parens", std::to_string (e.get_in_parens ())); - put_field ("opening_question_mark", - std::to_string (e.get_opening_question_mark ())); + put_field ("polarity", BoundPolarityString (e.get_polarity ())); visit_collection ("for_lifetime", e.get_for_lifetimes ()); visit_field ("type_path", e.get_path ()); diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 75e02e9..b174acd 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -2733,7 +2733,7 @@ class ImplBlock : public VisItem, public WithInnerAttrs std::unique_ptr<Type> impl_type; std::unique_ptr<TypePath> trait_ref; WhereClause where_clause; - Polarity polarity; + BoundPolarity polarity; location_t locus; std::vector<std::unique_ptr<ImplItem>> impl_items; @@ -2743,7 +2743,7 @@ public: std::vector<std::unique_ptr<GenericParam>> generic_params, std::unique_ptr<Type> impl_type, std::unique_ptr<TypePath> trait_ref, WhereClause where_clause, - Polarity polarity, Visibility vis, AST::AttrVec inner_attrs, + BoundPolarity polarity, Visibility vis, AST::AttrVec inner_attrs, AST::AttrVec outer_attrs, location_t locus) : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), WithInnerAttrs (std::move (inner_attrs)), @@ -2817,7 +2817,7 @@ public: bool has_where_clause () const { return !where_clause.is_empty (); } // Returns the polarity of the impl. - Polarity get_polarity () const { return polarity; } + BoundPolarity get_polarity () const { return polarity; } location_t get_locus () const override final { return locus; } diff --git a/gcc/rust/hir/tree/rust-hir-type.h b/gcc/rust/hir/tree/rust-hir-type.h index 37d108e..8f068ef 100644 --- a/gcc/rust/hir/tree/rust-hir-type.h +++ b/gcc/rust/hir/tree/rust-hir-type.h @@ -33,7 +33,7 @@ class Lifetime; class TraitBound : public TypeParamBound { bool in_parens; - bool opening_question_mark; + BoundPolarity polarity; std::vector<LifetimeParam> for_lifetimes; TypePath type_path; location_t locus; @@ -46,10 +46,10 @@ public: TraitBound (Analysis::NodeMapping mapping, TypePath type_path, location_t locus, bool in_parens = false, - bool opening_question_mark = false, + BoundPolarity polarity = BoundPolarity::RegularBound, std::vector<LifetimeParam> for_lifetimes = std::vector<LifetimeParam> ()) - : in_parens (in_parens), opening_question_mark (opening_question_mark), + : in_parens (in_parens), polarity (polarity), for_lifetimes (std::move (for_lifetimes)), type_path (std::move (type_path)), locus (locus), mappings (mapping) {} @@ -67,7 +67,7 @@ public: std::vector<LifetimeParam> &get_for_lifetimes () { return for_lifetimes; } bool get_in_parens () { return in_parens; } - bool get_opening_question_mark () { return opening_question_mark; } + BoundPolarity get_polarity () { return polarity; } BoundType get_bound_type () const final override { return TRAITBOUND; } diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 6e626c6..ac1ae63 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -1986,14 +1986,16 @@ TraitBound::as_string () const { std::string str ("TraitBound:"); - str += "\n Has opening question mark: "; - if (opening_question_mark) + switch (polarity) { - str += "true"; - } - else - { - str += "false"; + case RegularBound: + break; + case NegativeBound: + str += "!"; + break; + case AntiBound: + str += "?"; + break; } str += "\n For lifetimes: "; diff --git a/gcc/rust/util/rust-common.h b/gcc/rust/util/rust-common.h index ed1935d..763771d 100644 --- a/gcc/rust/util/rust-common.h +++ b/gcc/rust/util/rust-common.h @@ -37,10 +37,11 @@ enum Unsafety Normal }; -enum Polarity +enum BoundPolarity { - Positive, - Negative + RegularBound, + NegativeBound, + AntiBound, }; enum AsyncConstStatus diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 9df7fe9..c50836c 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -100,7 +100,7 @@ Mappings::Mappings () Analysis::NodeMapping node (0, 0, 0, 0); builtinMarker = new HIR::ImplBlock (node, {}, {}, nullptr, nullptr, HIR::WhereClause ({}), - Positive, + BoundPolarity::RegularBound, HIR::Visibility (HIR::Visibility::VisType::PUBLIC), {}, {}, UNDEF_LOCATION); } |