libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / rust / typecheck / rust-hir-type-check-struct-field.h
blob792eebf3ff5e184ff0e5bd3b1d554326446c8e62
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
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_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"
27 namespace Rust {
29 struct Error;
31 namespace Resolver {
33 class TypeCheckStructExpr : public TypeCheckBase
35 public:
36 static TyTy::BaseType *Resolve (HIR::StructExprStructFields *expr);
38 // Helper for making any errors
39 static Error
40 make_missing_field_error (location_t locus,
41 const std::vector<std::string> &missing_field_names,
42 const std::string &struct_name);
44 protected:
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);
51 private:
52 TypeCheckStructExpr (HIR::Expr *e);
54 // result
55 TyTy::BaseType *resolved;
57 // internal state:
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
66 } // namespace Rust
68 #endif // RUST_HIR_TYPE_CHECK_STRUCT_FIELD