]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/rust/typecheck/rust-tyty-util.h
Update copyright years.
[thirdparty/gcc.git] / gcc / rust / typecheck / rust-tyty-util.h
1 // Copyright (C) 2020-2024 Free Software Foundation, Inc.
2
3 // This file is part of GCC.
4
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.
9
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.
14
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/>.
18
19 #ifndef RUST_TYTY_UTIL_H
20 #define RUST_TYTY_UTIL_H
21
22 #include "rust-hir-map.h"
23
24 namespace Rust {
25 namespace TyTy {
26
27 class BaseType;
28
29 // this is a placeholder for types that can change like inference variables
30 class TyVar
31 {
32 public:
33 explicit TyVar (HirId ref);
34
35 HirId get_ref () const { return ref; }
36
37 BaseType *get_tyty () const;
38
39 TyVar clone () const;
40
41 TyVar monomorphized_clone () const;
42
43 static TyVar get_implicit_infer_var (Location locus);
44
45 static TyVar subst_covariant_var (TyTy::BaseType *orig,
46 TyTy::BaseType *subst);
47
48 private:
49 HirId ref;
50 };
51
52 class TyWithLocation
53 {
54 public:
55 explicit TyWithLocation (BaseType *ty, Location locus);
56 explicit TyWithLocation (BaseType *ty);
57
58 BaseType *get_ty () const { return ty; }
59 Location get_locus () const { return locus; }
60
61 private:
62 BaseType *ty;
63 Location locus;
64 };
65
66 } // namespace TyTy
67 } // namespace Rust
68
69 #endif // RUST_TYTY_UTIL_H