aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/hir/rust-ast-lower-item.cc6
-rw-r--r--gcc/rust/hir/rust-ast-lower-type.cc6
-rw-r--r--gcc/rust/hir/rust-hir-dump.cc18
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h6
-rw-r--r--gcc/rust/hir/tree/rust-hir-type.h8
-rw-r--r--gcc/rust/hir/tree/rust-hir.cc16
-rw-r--r--gcc/rust/util/rust-common.h7
-rw-r--r--gcc/rust/util/rust-hir-map.cc2
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);
}