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_AST_LOWER_ITEM
      20  #define RUST_AST_LOWER_ITEM
      21  
      22  #include "rust-diagnostics.h"
      23  
      24  #include "rust-ast-lower.h"
      25  #include "rust-ast-lower-base.h"
      26  #include "rust-ast-lower-enumitem.h"
      27  #include "rust-ast-lower-type.h"
      28  #include "rust-ast-lower-implitem.h"
      29  #include "rust-ast-lower-stmt.h"
      30  #include "rust-ast-lower-expr.h"
      31  #include "rust-ast-lower-pattern.h"
      32  #include "rust-ast-lower-block.h"
      33  #include "rust-ast-lower-extern.h"
      34  #include "rust-hir-full-decls.h"
      35  
      36  namespace Rust {
      37  namespace HIR {
      38  
      39  class ASTLoweringItem : public ASTLoweringBase
      40  {
      41    using Rust::HIR::ASTLoweringBase::visit;
      42  
      43  public:
      44    static HIR::Item *translate (AST::Item *item);
      45  
      46    void visit (AST::Module &module) override;
      47    void visit (AST::TypeAlias &alias) override;
      48    void visit (AST::TupleStruct &struct_decl) override;
      49    void visit (AST::StructStruct &struct_decl) override;
      50    void visit (AST::Enum &enum_decl) override;
      51    void visit (AST::Union &union_decl) override;
      52    void visit (AST::StaticItem &var) override;
      53    void visit (AST::ConstantItem &constant) override;
      54    void visit (AST::Function &function) override;
      55    void visit (AST::InherentImpl &impl_block) override;
      56    void visit (AST::Trait &trait) override;
      57    void visit (AST::TraitImpl &impl_block) override;
      58    void visit (AST::ExternBlock &extern_block) override;
      59  
      60  private:
      61    ASTLoweringItem () : translated (nullptr) {}
      62  
      63    HIR::Item *translated;
      64  };
      65  
      66  class ASTLoweringSimplePath : public ASTLoweringBase
      67  {
      68  public:
      69    static HIR::SimplePath translate (const AST::SimplePath &path);
      70  
      71    HIR::SimplePathSegment lower (const AST::SimplePathSegment &segment);
      72    HIR::SimplePath lower (const AST::SimplePath &path);
      73  };
      74  
      75  } // namespace HIR
      76  } // namespace Rust
      77  
      78  #endif // RUST_AST_LOWER_ITEM