[PR testsuite/116860] Testsuite adjustment for recently added tests
[official-gcc.git] / gcc / rust / typecheck / rust-tyty-bounds.h
blobbe309b2d5a8b2764a04be3a163d413f0deb2d5c6
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
8 // version.
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
13 // for more details.
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"
25 namespace Rust {
27 namespace Resolver {
28 class TraitReference;
29 class TraitItemReference;
30 class AssociatedImplTrait;
31 } // namespace Resolver
33 namespace TyTy {
35 class BaseType;
36 class TypeBoundPredicate;
37 class TypeBoundPredicateItem
39 public:
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;
57 private:
58 const TypeBoundPredicate *parent;
59 const Resolver::TraitItemReference *trait_item_ref;
62 class TypeBoundsMappings
64 protected:
65 TypeBoundsMappings (std::vector<TypeBoundPredicate> specified_bounds);
67 public:
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;
82 protected:
83 void add_bound (TypeBoundPredicate predicate);
85 std::vector<TypeBoundPredicate> specified_bounds;
88 } // namespace TyTy
89 } // namespace Rust
91 #endif // RUST_TYTY_BOUNDS_H