(root)/
gcc-13.2.0/
gcc/
rust/
typecheck/
rust-hir-type-check-item.h
       1  // Copyright (C) 2020-2023 Free Software Foundation, Inc.
       2  
       3  // This file is part of GCC.
       4  
       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.
       9  
      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.
      14  
      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/>.
      18  
      19  #ifndef RUST_HIR_TYPE_CHECK_ITEM
      20  #define RUST_HIR_TYPE_CHECK_ITEM
      21  
      22  #include "rust-hir-type-check-base.h"
      23  
      24  namespace Rust {
      25  namespace Resolver {
      26  
      27  class TypeCheckItem : private TypeCheckBase, private HIR::HIRVisItemVisitor
      28  {
      29  public:
      30    static TyTy::BaseType *Resolve (HIR::Item &item);
      31  
      32    static TyTy::BaseType *ResolveImplItem (HIR::ImplBlock &impl_block,
      33  					  HIR::ImplItem &item);
      34  
      35    static TyTy::BaseType *ResolveImplBlockSelf (HIR::ImplBlock &impl_block);
      36  
      37    void visit (HIR::Module &module) override;
      38    void visit (HIR::Function &function) override;
      39    void visit (HIR::TypeAlias &alias) override;
      40    void visit (HIR::TupleStruct &struct_decl) override;
      41    void visit (HIR::StructStruct &struct_decl) override;
      42    void visit (HIR::Enum &enum_decl) override;
      43    void visit (HIR::Union &union_decl) override;
      44    void visit (HIR::StaticItem &var) override;
      45    void visit (HIR::ConstantItem &constant) override;
      46    void visit (HIR::ImplBlock &impl_block) override;
      47    void visit (HIR::ExternBlock &extern_block) override;
      48    void visit (HIR::Trait &trait_block) override;
      49  
      50    // nothing to do
      51    void visit (HIR::ExternCrate &) override {}
      52    void visit (HIR::UseDeclaration &) override {}
      53  
      54  protected:
      55    std::vector<TyTy::SubstitutionParamMapping>
      56    resolve_impl_block_substitutions (HIR::ImplBlock &impl_block,
      57  				    bool &failure_flag);
      58  
      59    void validate_trait_impl_block (
      60      HIR::ImplBlock &impl_block, TyTy::BaseType *self,
      61      std::vector<TyTy::SubstitutionParamMapping> &substitutions);
      62  
      63    TyTy::BaseType *resolve_impl_item (HIR::ImplBlock &impl_block,
      64  				     HIR::ImplItem &item);
      65  
      66    TyTy::BaseType *resolve_impl_block_self (HIR::ImplBlock &impl_block);
      67  
      68  private:
      69    TypeCheckItem ();
      70  
      71    TyTy::BaseType *infered;
      72  };
      73  
      74  } // namespace Resolver
      75  } // namespace Rust
      76  
      77  #endif // RUST_HIR_TYPE_CHECK_ITEM