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_HIR_TYPE_CHECK_TYPE
20 #define RUST_HIR_TYPE_CHECK_TYPE
22 #include "rust-hir-type-check-base.h"
23 #include "rust-hir-full.h"
24 #include "rust-substitution-mapper.h"
25 #include "rust-hir-path-probe.h"
31 // This simply fetches the HIR:::GenericArgs from the base class. Check to see
32 // if we can get rid of this class
33 class TypeCheckResolveGenericArguments
: public TypeCheckBase
36 static HIR::GenericArgs
resolve (HIR::TypePathSegment
*segment
);
38 void visit (HIR::TypePathSegmentGeneric
&generic
);
41 TypeCheckResolveGenericArguments (Location locus
)
42 : TypeCheckBase (), args (HIR::GenericArgs::create_empty (locus
))
45 HIR::GenericArgs args
;
48 class TypeCheckType
: public TypeCheckBase
, public HIR::HIRTypeVisitor
51 static TyTy::BaseType
*Resolve (HIR::Type
*type
);
53 void visit (HIR::BareFunctionType
&fntype
) override
;
54 void visit (HIR::TupleType
&tuple
) override
;
55 void visit (HIR::TypePath
&path
) override
;
56 void visit (HIR::QualifiedPathInType
&path
) override
;
57 void visit (HIR::ArrayType
&type
) override
;
58 void visit (HIR::SliceType
&type
) override
;
59 void visit (HIR::ReferenceType
&type
) override
;
60 void visit (HIR::RawPointerType
&type
) override
;
61 void visit (HIR::InferredType
&type
) override
;
62 void visit (HIR::NeverType
&type
) override
;
63 void visit (HIR::TraitObjectType
&type
) override
;
65 void visit (HIR::TypePathSegmentFunction
&segment
) override
68 void visit (HIR::TraitBound
&bound
) override
71 void visit (HIR::ImplTraitType
&type
) override
74 void visit (HIR::ParenthesisedType
&type
) override
77 void visit (HIR::ImplTraitTypeOneBound
&type
) override
82 TypeCheckType (HirId id
)
83 : TypeCheckBase (), translated (new TyTy::ErrorType (id
))
86 TyTy::BaseType
*resolve_root_path (HIR::TypePath
&path
, size_t *offset
,
87 NodeId
*root_resolved_node_id
);
89 TyTy::BaseType
*resolve_segments (
90 NodeId root_resolved_node_id
, HirId expr_id
,
91 std::vector
<std::unique_ptr
<HIR::TypePathSegment
>> &segments
, size_t offset
,
92 TyTy::BaseType
*tyseg
, const Analysis::NodeMapping
&expr_mappings
,
95 TyTy::BaseType
*translated
;
98 class TypeResolveGenericParam
: public TypeCheckBase
101 static TyTy::ParamType
*Resolve (HIR::GenericParam
*param
);
104 void visit (HIR::TypeParam
¶m
);
105 void visit (HIR::LifetimeParam
¶m
);
106 void visit (HIR::ConstGenericParam
¶m
);
109 TypeResolveGenericParam () : TypeCheckBase (), resolved (nullptr) {}
111 TyTy::ParamType
*resolved
;
114 class ResolveWhereClauseItem
: public TypeCheckBase
117 static void Resolve (HIR::WhereClauseItem
&item
);
120 void visit (HIR::LifetimeWhereClauseItem
&item
);
121 void visit (HIR::TypeBoundWhereClauseItem
&item
);
124 ResolveWhereClauseItem () : TypeCheckBase () {}
127 } // namespace Resolver
130 #endif // RUST_HIR_TYPE_CHECK_TYPE