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_DUMP_H
      20  #define RUST_HIR_DUMP_H
      21  
      22  #include "rust-hir-visitor.h"
      23  #include "rust-hir.h"
      24  #include "rust-hir-full.h"
      25  
      26  namespace Rust {
      27  namespace HIR {
      28  
      29  class Dump : public HIRFullVisitor
      30  {
      31  public:
      32    Dump (std::ostream &stream);
      33    void go (HIR::Crate &crate);
      34  
      35  private:
      36    std::ostream &stream;
      37    std::size_t indent; // current indentation level
      38    char indent_char = '\t';
      39  
      40    virtual void visit (Lifetime &) override;
      41    virtual void visit (LifetimeParam &) override;
      42    virtual void visit (PathInExpression &) override;
      43    virtual void visit (TypePathSegment &) override;
      44    virtual void visit (TypePathSegmentGeneric &) override;
      45    virtual void visit (TypePathSegmentFunction &) override;
      46    virtual void visit (TypePath &) override;
      47    virtual void visit (QualifiedPathInExpression &) override;
      48    virtual void visit (QualifiedPathInType &) override;
      49  
      50    virtual void visit (LiteralExpr &) override;
      51    virtual void visit (BorrowExpr &) override;
      52    virtual void visit (DereferenceExpr &) override;
      53    virtual void visit (ErrorPropagationExpr &) override;
      54    virtual void visit (NegationExpr &) override;
      55    virtual void visit (ArithmeticOrLogicalExpr &) override;
      56    virtual void visit (ComparisonExpr &) override;
      57    virtual void visit (LazyBooleanExpr &) override;
      58    virtual void visit (TypeCastExpr &) override;
      59    virtual void visit (AssignmentExpr &) override;
      60    virtual void visit (CompoundAssignmentExpr &) override;
      61    virtual void visit (GroupedExpr &) override;
      62  
      63    virtual void visit (ArrayElemsValues &) override;
      64    virtual void visit (ArrayElemsCopied &) override;
      65    virtual void visit (ArrayExpr &) override;
      66    virtual void visit (ArrayIndexExpr &) override;
      67    virtual void visit (TupleExpr &) override;
      68    virtual void visit (TupleIndexExpr &) override;
      69    virtual void visit (StructExprStruct &) override;
      70  
      71    virtual void visit (StructExprFieldIdentifier &) override;
      72    virtual void visit (StructExprFieldIdentifierValue &) override;
      73  
      74    virtual void visit (StructExprFieldIndexValue &) override;
      75    virtual void visit (StructExprStructFields &) override;
      76    virtual void visit (StructExprStructBase &) override;
      77  
      78    virtual void visit (CallExpr &) override;
      79    virtual void visit (MethodCallExpr &) override;
      80    virtual void visit (FieldAccessExpr &) override;
      81    virtual void visit (ClosureExpr &) override;
      82    virtual void visit (BlockExpr &) override;
      83    virtual void visit (ContinueExpr &) override;
      84    virtual void visit (BreakExpr &) override;
      85    virtual void visit (RangeFromToExpr &) override;
      86    virtual void visit (RangeFromExpr &) override;
      87    virtual void visit (RangeToExpr &) override;
      88    virtual void visit (RangeFullExpr &) override;
      89    virtual void visit (RangeFromToInclExpr &) override;
      90    virtual void visit (RangeToInclExpr &) override;
      91    virtual void visit (ReturnExpr &) override;
      92    virtual void visit (UnsafeBlockExpr &) override;
      93    virtual void visit (LoopExpr &) override;
      94    virtual void visit (WhileLoopExpr &) override;
      95    virtual void visit (WhileLetLoopExpr &) override;
      96    virtual void visit (ForLoopExpr &) override;
      97    virtual void visit (IfExpr &) override;
      98    virtual void visit (IfExprConseqElse &) override;
      99    virtual void visit (IfExprConseqIf &) override;
     100    virtual void visit (IfExprConseqIfLet &) override;
     101    virtual void visit (IfLetExpr &) override;
     102    virtual void visit (IfLetExprConseqElse &) override;
     103    virtual void visit (IfLetExprConseqIf &) override;
     104    virtual void visit (IfLetExprConseqIfLet &) override;
     105  
     106    virtual void visit (MatchExpr &) override;
     107    virtual void visit (AwaitExpr &) override;
     108    virtual void visit (AsyncBlockExpr &) override;
     109  
     110    virtual void visit (TypeParam &) override;
     111    virtual void visit (ConstGenericParam &) override;
     112  
     113    virtual void visit (LifetimeWhereClauseItem &) override;
     114    virtual void visit (TypeBoundWhereClauseItem &) override;
     115    virtual void visit (Module &) override;
     116    virtual void visit (ExternCrate &) override;
     117  
     118    virtual void visit (UseTreeGlob &) override;
     119    virtual void visit (UseTreeList &) override;
     120    virtual void visit (UseTreeRebind &) override;
     121    virtual void visit (UseDeclaration &) override;
     122    virtual void visit (Function &) override;
     123    virtual void visit (TypeAlias &) override;
     124    virtual void visit (StructStruct &) override;
     125    virtual void visit (TupleStruct &) override;
     126    virtual void visit (EnumItem &) override;
     127    virtual void visit (EnumItemTuple &) override;
     128    virtual void visit (EnumItemStruct &) override;
     129    virtual void visit (EnumItemDiscriminant &) override;
     130    virtual void visit (Enum &) override;
     131    virtual void visit (Union &) override;
     132    virtual void visit (ConstantItem &) override;
     133    virtual void visit (StaticItem &) override;
     134    virtual void visit (TraitItemFunc &) override;
     135    virtual void visit (TraitItemConst &) override;
     136    virtual void visit (TraitItemType &) override;
     137    virtual void visit (Trait &) override;
     138    virtual void visit (ImplBlock &) override;
     139  
     140    virtual void visit (ExternalStaticItem &) override;
     141    virtual void visit (ExternalFunctionItem &) override;
     142    virtual void visit (ExternBlock &) override;
     143  
     144    virtual void visit (LiteralPattern &) override;
     145    virtual void visit (IdentifierPattern &) override;
     146    virtual void visit (WildcardPattern &) override;
     147  
     148    virtual void visit (RangePatternBoundLiteral &) override;
     149    virtual void visit (RangePatternBoundPath &) override;
     150    virtual void visit (RangePatternBoundQualPath &) override;
     151    virtual void visit (RangePattern &) override;
     152    virtual void visit (ReferencePattern &) override;
     153  
     154    virtual void visit (StructPatternFieldTuplePat &) override;
     155    virtual void visit (StructPatternFieldIdentPat &) override;
     156    virtual void visit (StructPatternFieldIdent &) override;
     157    virtual void visit (StructPattern &) override;
     158  
     159    virtual void visit (TupleStructItemsNoRange &) override;
     160    virtual void visit (TupleStructItemsRange &) override;
     161    virtual void visit (TupleStructPattern &) override;
     162  
     163    virtual void visit (TuplePatternItemsMultiple &) override;
     164    virtual void visit (TuplePatternItemsRanged &) override;
     165    virtual void visit (TuplePattern &) override;
     166    virtual void visit (SlicePattern &) override;
     167  
     168    virtual void visit (EmptyStmt &) override;
     169    virtual void visit (LetStmt &) override;
     170    virtual void visit (ExprStmtWithoutBlock &) override;
     171    virtual void visit (ExprStmtWithBlock &) override;
     172  
     173    virtual void visit (TraitBound &) override;
     174    virtual void visit (ImplTraitType &) override;
     175    virtual void visit (TraitObjectType &) override;
     176    virtual void visit (ParenthesisedType &) override;
     177    virtual void visit (ImplTraitTypeOneBound &) override;
     178    virtual void visit (TupleType &) override;
     179    virtual void visit (NeverType &) override;
     180    virtual void visit (RawPointerType &) override;
     181    virtual void visit (ReferenceType &) override;
     182    virtual void visit (ArrayType &) override;
     183    virtual void visit (SliceType &) override;
     184    virtual void visit (InferredType &) override;
     185    virtual void visit (BareFunctionType &) override;
     186  };
     187  
     188  } // namespace HIR
     189  } // namespace Rust
     190  
     191  #endif // !RUST_HIR_DUMP_H