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_STRUCT_FIELD
20 #define RUST_HIR_TYPE_CHECK_STRUCT_FIELD
22 #include "rust-hir-type-check-base.h"
23 #include "rust-hir-full.h"
24 #include "rust-hir-type-check-type.h"
25 #include "rust-tyty.h"
33 class TypeCheckStructExpr
: public TypeCheckBase
36 static TyTy::BaseType
*Resolve (HIR::StructExprStructFields
*expr
);
38 // Helper for making any errors
40 make_missing_field_error (location_t locus
,
41 const std::vector
<std::string
> &missing_field_names
,
42 const std::string
&struct_name
);
45 void resolve (HIR::StructExprStructFields
&struct_expr
);
47 bool visit (HIR::StructExprFieldIdentifierValue
&field
);
48 bool visit (HIR::StructExprFieldIndexValue
&field
);
49 bool visit (HIR::StructExprFieldIdentifier
&field
);
52 TypeCheckStructExpr (HIR::Expr
*e
);
55 TyTy::BaseType
*resolved
;
58 TyTy::ADTType
*struct_path_resolved
;
59 TyTy::VariantDef
*variant
;
60 TyTy::BaseType
*resolved_field_value_expr
;
61 std::set
<std::string
> fields_assigned
;
62 std::map
<size_t, HIR::StructExprField
*> adtFieldIndexToField
;
65 } // namespace Resolver
68 #endif // RUST_HIR_TYPE_CHECK_STRUCT_FIELD