(root)/
gcc-13.2.0/
gcc/
rust/
backend/
rust-compile-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_COMPILE_ITEM
      20  #define RUST_COMPILE_ITEM
      21  
      22  #include "rust-compile-base.h"
      23  
      24  namespace Rust {
      25  namespace Compile {
      26  
      27  class CompileItem : private HIRCompileBase, protected HIR::HIRStmtVisitor
      28  {
      29  protected:
      30  public:
      31    static tree compile (HIR::Item *item, Context *ctx,
      32  		       TyTy::BaseType *concrete = nullptr,
      33  		       bool is_query_mode = false,
      34  		       Location ref_locus = Location ())
      35    {
      36      CompileItem compiler (ctx, concrete, ref_locus);
      37      item->accept_vis (compiler);
      38  
      39      if (is_query_mode && compiler.reference == error_mark_node)
      40        rust_internal_error_at (ref_locus, "failed to compile item: %s",
      41  			      item->as_string ().c_str ());
      42  
      43      return compiler.reference;
      44    }
      45  
      46    void visit (HIR::StaticItem &var) override;
      47    void visit (HIR::ConstantItem &constant) override;
      48    void visit (HIR::Function &function) override;
      49    void visit (HIR::ImplBlock &impl_block) override;
      50    void visit (HIR::ExternBlock &extern_block) override;
      51    void visit (HIR::Module &module) override;
      52  
      53    // Empty visit for unused Stmt HIR nodes.
      54    void visit (HIR::TupleStruct &) override {}
      55    void visit (HIR::EnumItem &) override {}
      56    void visit (HIR::EnumItemTuple &) override {}
      57    void visit (HIR::EnumItemStruct &) override {}
      58    void visit (HIR::EnumItemDiscriminant &) override {}
      59    void visit (HIR::TypePathSegmentFunction &) override {}
      60    void visit (HIR::TypePath &) override {}
      61    void visit (HIR::QualifiedPathInType &) override {}
      62    void visit (HIR::ExternCrate &) override {}
      63    void visit (HIR::UseDeclaration &) override {}
      64    void visit (HIR::TypeAlias &) override {}
      65    void visit (HIR::StructStruct &) override {}
      66    void visit (HIR::Enum &) override {}
      67    void visit (HIR::Union &) override {}
      68    void visit (HIR::Trait &) override {}
      69    void visit (HIR::EmptyStmt &) override {}
      70    void visit (HIR::LetStmt &) override {}
      71    void visit (HIR::ExprStmtWithoutBlock &) override {}
      72    void visit (HIR::ExprStmtWithBlock &) override {}
      73  
      74  protected:
      75    CompileItem (Context *ctx, TyTy::BaseType *concrete, Location ref_locus)
      76      : HIRCompileBase (ctx), concrete (concrete), reference (error_mark_node),
      77        ref_locus (ref_locus)
      78    {}
      79  
      80    TyTy::BaseType *concrete;
      81    tree reference;
      82    Location ref_locus;
      83  };
      84  
      85  } // namespace Compile
      86  } // namespace Rust
      87  
      88  #endif // RUST_COMPILE_ITEM