1 // Copyright (C) 2020-2024 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_HIR_TYPE_CHECK_TYPE
20 #define RUST_HIR_TYPE_CHECK_TYPE
22 #include "rust-hir-type-check-base.h"
23 #include "rust-hir-visitor.h"
29 // This simply fetches the HIR:::GenericArgs from the base class. Check to see
30 // if we can get rid of this class
31 class TypeCheckResolveGenericArguments
: public TypeCheckBase
34 static HIR::GenericArgs
resolve (HIR::TypePathSegment
*segment
);
36 void visit (HIR::TypePathSegmentGeneric
&generic
);
39 TypeCheckResolveGenericArguments (location_t locus
)
40 : TypeCheckBase (), args (HIR::GenericArgs::create_empty (locus
))
43 HIR::GenericArgs args
;
46 class TypeCheckType
: public TypeCheckBase
, public HIR::HIRTypeVisitor
49 static TyTy::BaseType
*Resolve (HIR::Type
*type
);
51 void visit (HIR::BareFunctionType
&fntype
) override
;
52 void visit (HIR::TupleType
&tuple
) override
;
53 void visit (HIR::TypePath
&path
) override
;
54 void visit (HIR::QualifiedPathInType
&path
) override
;
55 void visit (HIR::ArrayType
&type
) override
;
56 void visit (HIR::SliceType
&type
) override
;
57 void visit (HIR::ReferenceType
&type
) override
;
58 void visit (HIR::RawPointerType
&type
) override
;
59 void visit (HIR::InferredType
&type
) override
;
60 void visit (HIR::NeverType
&type
) override
;
61 void visit (HIR::TraitObjectType
&type
) override
;
63 void visit (HIR::TypePathSegmentFunction
&segment
) override
66 void visit (HIR::TraitBound
&bound
) override
69 void visit (HIR::ImplTraitType
&type
) override
72 void visit (HIR::ParenthesisedType
&type
) override
75 void visit (HIR::ImplTraitTypeOneBound
&type
) override
80 TypeCheckType (HirId id
)
81 : TypeCheckBase (), translated (new TyTy::ErrorType (id
))
84 TyTy::BaseType
*resolve_root_path (HIR::TypePath
&path
, size_t *offset
,
85 NodeId
*root_resolved_node_id
);
87 TyTy::BaseType
*resolve_segments (
88 NodeId root_resolved_node_id
, HirId expr_id
,
89 std::vector
<std::unique_ptr
<HIR::TypePathSegment
>> &segments
, size_t offset
,
90 TyTy::BaseType
*tyseg
, const Analysis::NodeMapping
&expr_mappings
,
91 location_t expr_locus
);
93 TyTy::BaseType
*translated
;
96 class TypeResolveGenericParam
: public TypeCheckBase
99 static TyTy::ParamType
*Resolve (HIR::GenericParam
*param
,
100 bool apply_sized
= true);
103 void visit (HIR::TypeParam
¶m
);
104 void visit (HIR::LifetimeParam
¶m
);
105 void visit (HIR::ConstGenericParam
¶m
);
108 TypeResolveGenericParam (bool apply_sized
)
109 : TypeCheckBase (), resolved (nullptr), apply_sized (apply_sized
)
112 TyTy::ParamType
*resolved
;
116 class ResolveWhereClauseItem
: public TypeCheckBase
118 // pair(a, b) => a: b
119 TyTy::RegionConstraints
®ion_constraints
;
122 static void Resolve (HIR::WhereClauseItem
&item
,
123 TyTy::RegionConstraints
®ion_constraints
);
126 void visit (HIR::LifetimeWhereClauseItem
&item
);
127 void visit (HIR::TypeBoundWhereClauseItem
&item
);
130 ResolveWhereClauseItem (TyTy::RegionConstraints
®ion_constraints
)
131 : region_constraints (region_constraints
)
135 } // namespace Resolver
138 #endif // RUST_HIR_TYPE_CHECK_TYPE