[PR testsuite/116860] Testsuite adjustment for recently added tests
[official-gcc.git] / gcc / rust / typecheck / rust-hir-type-check-pattern.h
blobba45b65b340a385c57bea62b99fe08960ad1295d
1 // Copyright (C) 2020-2025 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_PATTERN
20 #define RUST_HIR_TYPE_CHECK_PATTERN
22 #include "rust-hir-type-check-base.h"
23 #include "rust-hir-visitor.h"
25 namespace Rust {
26 namespace Resolver {
28 class TypeCheckPattern : public TypeCheckBase, public HIR::HIRPatternVisitor
30 public:
31 static TyTy::BaseType *Resolve (HIR::Pattern *pattern,
32 TyTy::BaseType *parent);
34 void visit (HIR::PathInExpression &pattern) override;
35 void visit (HIR::StructPattern &pattern) override;
36 void visit (HIR::TupleStructPattern &pattern) override;
37 void visit (HIR::WildcardPattern &pattern) override;
38 void visit (HIR::TuplePattern &pattern) override;
39 void visit (HIR::LiteralPattern &pattern) override;
40 void visit (HIR::RangePattern &pattern) override;
41 void visit (HIR::IdentifierPattern &pattern) override;
42 void visit (HIR::QualifiedPathInExpression &pattern) override;
43 void visit (HIR::ReferencePattern &pattern) override;
44 void visit (HIR::SlicePattern &pattern) override;
45 void visit (HIR::AltPattern &pattern) override;
47 private:
48 TypeCheckPattern (TyTy::BaseType *parent);
50 TyTy::BaseType *typecheck_range_pattern_bound (
51 std::unique_ptr<Rust::HIR::RangePatternBound> &bound,
52 Analysis::NodeMapping mappings, location_t locus);
54 void emit_pattern_size_error (const HIR::Pattern &pattern,
55 size_t expected_field_count,
56 size_t got_field_count);
58 TyTy::BaseType *parent;
59 TyTy::BaseType *infered;
62 class ClosureParamInfer : private TypeCheckBase, private HIR::HIRPatternVisitor
64 public:
65 static TyTy::BaseType *Resolve (HIR::Pattern *pattern);
67 void visit (HIR::PathInExpression &pattern) override;
68 void visit (HIR::StructPattern &pattern) override;
69 void visit (HIR::TupleStructPattern &pattern) override;
70 void visit (HIR::WildcardPattern &pattern) override;
71 void visit (HIR::TuplePattern &pattern) override;
72 void visit (HIR::LiteralPattern &pattern) override;
73 void visit (HIR::RangePattern &pattern) override;
74 void visit (HIR::IdentifierPattern &pattern) override;
75 void visit (HIR::QualifiedPathInExpression &pattern) override;
76 void visit (HIR::ReferencePattern &pattern) override;
77 void visit (HIR::SlicePattern &pattern) override;
78 void visit (HIR::AltPattern &pattern) override;
80 private:
81 ClosureParamInfer ();
83 TyTy::BaseType *infered;
86 } // namespace Resolver
87 } // namespace Rust
89 #endif // RUST_HIR_TYPE_CHECK_PATTERN