1 // Copyright (C) 2020-2025 Free Software Foundation, Inc.
3 // This file is part of GCC.
5 // GCC is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation; either version 3, or (at your option) any later
10 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // You should have received a copy of the GNU General Public License
16 // along with GCC; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
19 #ifndef RUST_TYTY_BOUNDS_H
20 #define RUST_TYTY_BOUNDS_H
22 #include "rust-location.h"
23 #include "rust-mapping-common.h"
29 class TraitItemReference
;
30 class AssociatedImplTrait
;
31 } // namespace Resolver
36 class TypeBoundPredicate
;
37 class TypeBoundPredicateItem
40 TypeBoundPredicateItem (const TypeBoundPredicate
*parent
,
41 const Resolver::TraitItemReference
*trait_item_ref
);
43 static TypeBoundPredicateItem
error ();
45 bool is_error () const;
47 BaseType
*get_tyty_for_receiver (const TyTy::BaseType
*receiver
);
49 const Resolver::TraitItemReference
*get_raw_item () const;
51 bool needs_implementation () const;
53 const TypeBoundPredicate
*get_parent () const;
55 location_t
get_locus () const;
58 const TypeBoundPredicate
*parent
;
59 const Resolver::TraitItemReference
*trait_item_ref
;
62 class TypeBoundsMappings
65 TypeBoundsMappings (std::vector
<TypeBoundPredicate
> specified_bounds
);
68 std::vector
<TypeBoundPredicate
> &get_specified_bounds ();
70 const std::vector
<TypeBoundPredicate
> &get_specified_bounds () const;
72 TypeBoundPredicate
lookup_predicate (DefId id
);
74 size_t num_specified_bounds () const;
76 std::string
raw_bounds_as_string () const;
78 std::string
bounds_as_string () const;
80 std::string
raw_bounds_as_name () const;
83 void add_bound (TypeBoundPredicate predicate
);
85 std::vector
<TypeBoundPredicate
> specified_bounds
;
91 #endif // RUST_TYTY_BOUNDS_H