1 // Copyright (C) 2020-2023 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"
28 class TraitItemReference
;
29 class AssociatedImplTrait
;
30 } // namespace Resolver
35 class TypeBoundPredicate
;
36 class TypeBoundPredicateItem
39 TypeBoundPredicateItem (const TypeBoundPredicate
*parent
,
40 const Resolver::TraitItemReference
*trait_item_ref
);
42 static TypeBoundPredicateItem
error ();
44 bool is_error () const;
46 BaseType
*get_tyty_for_receiver (const TyTy::BaseType
*receiver
);
48 const Resolver::TraitItemReference
*get_raw_item () const;
50 bool needs_implementation () const;
52 const TypeBoundPredicate
*get_parent () const;
54 Location
get_locus () const;
57 const TypeBoundPredicate
*parent
;
58 const Resolver::TraitItemReference
*trait_item_ref
;
61 class TypeBoundsMappings
64 TypeBoundsMappings (std::vector
<TypeBoundPredicate
> specified_bounds
);
67 std::vector
<TypeBoundPredicate
> &get_specified_bounds ();
69 const std::vector
<TypeBoundPredicate
> &get_specified_bounds () const;
71 size_t num_specified_bounds () const;
73 std::string
raw_bounds_as_string () const;
75 std::string
bounds_as_string () const;
77 std::string
raw_bounds_as_name () const;
80 void add_bound (TypeBoundPredicate predicate
);
82 std::vector
<TypeBoundPredicate
> specified_bounds
;
88 #endif // RUST_TYTY_BOUNDS_H