]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/rust/ast/rust-ast-dump.h
Update copyright years.
[thirdparty/gcc.git] / gcc / rust / ast / rust-ast-dump.h
CommitLineData
83ffe9cd 1// Copyright (C) 2020-2023 Free Software Foundation, Inc.
5b981e9c
JP
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#include "rust-ast-visitor.h"
20#include "rust-ast.h"
21#include "rust-ast-full.h"
22
23#ifndef RUST_AST_DUMP_H
24#define RUST_AST_DUMP_H
25
26namespace Rust {
27namespace AST {
28
29// TODO: We might want to reuse this class somewhere else
30class Indent
31{
32public:
33 Indent ();
34
35 friend std::ostream &operator<< (std::ostream &stream, const Indent &indent);
36
37 void increment ();
38 void decrement ();
39
40private:
41 size_t tabs;
42};
43
44class Dump : public ASTVisitor
45{
46public:
47 Dump (std::ostream &stream);
48
49 /**
50 * Run the visitor on an entire crate and its items
51 */
52 void go (AST::Crate &crate);
53 void go (AST::Item &item);
54
55private:
56 std::ostream &stream;
57 Indent indentation;
58
59 // Format together common items of functions: Parameters, return type, block
60 void format_function_common (std::unique_ptr<Type> &return_type,
61 std::unique_ptr<BlockExpr> &block);
62
63 /**
64 * Format a function's definition parameter
65 */
66 void format_function_param (FunctionParam &param);
67 void emit_attrib (const Attribute &attrib);
68
69 // rust-ast.h
70 void visit (Token &tok);
71 void visit (DelimTokenTree &delim_tok_tree);
72 void visit (AttrInputMetaItemContainer &input);
73 void visit (IdentifierExpr &ident_expr);
74 void visit (Lifetime &lifetime);
75 void visit (LifetimeParam &lifetime_param);
76 void visit (ConstGenericParam &const_param);
77
78 // rust-path.h
79 void visit (PathInExpression &path);
80 void visit (TypePathSegment &segment);
81 void visit (TypePathSegmentGeneric &segment);
82 void visit (TypePathSegmentFunction &segment);
83 void visit (TypePath &path);
84 void visit (QualifiedPathInExpression &path);
85 void visit (QualifiedPathInType &path);
86
87 // rust-expr.h
88 void visit (LiteralExpr &expr);
89 void visit (AttrInputLiteral &attr_input);
90 void visit (MetaItemLitExpr &meta_item);
91 void visit (MetaItemPathLit &meta_item);
92 void visit (BorrowExpr &expr);
93 void visit (DereferenceExpr &expr);
94 void visit (ErrorPropagationExpr &expr);
95 void visit (NegationExpr &expr);
96 void visit (ArithmeticOrLogicalExpr &expr);
97 void visit (ComparisonExpr &expr);
98 void visit (LazyBooleanExpr &expr);
99 void visit (TypeCastExpr &expr);
100 void visit (AssignmentExpr &expr);
101 void visit (CompoundAssignmentExpr &expr);
102 void visit (GroupedExpr &expr);
103 void visit (ArrayElemsValues &elems);
104 void visit (ArrayElemsCopied &elems);
105 void visit (ArrayExpr &expr);
106 void visit (ArrayIndexExpr &expr);
107 void visit (TupleExpr &expr);
108 void visit (TupleIndexExpr &expr);
109 void visit (StructExprStruct &expr);
110 void visit (StructExprFieldIdentifier &field);
111 void visit (StructExprFieldIdentifierValue &field);
112 void visit (StructExprFieldIndexValue &field);
113 void visit (StructExprStructFields &expr);
114 void visit (StructExprStructBase &expr);
115 void visit (CallExpr &expr);
116 void visit (MethodCallExpr &expr);
117 void visit (FieldAccessExpr &expr);
118 void visit (ClosureExprInner &expr);
119 void visit (BlockExpr &expr);
120 void visit (ClosureExprInnerTyped &expr);
121 void visit (ContinueExpr &expr);
122 void visit (BreakExpr &expr);
123 void visit (RangeFromToExpr &expr);
124 void visit (RangeFromExpr &expr);
125 void visit (RangeToExpr &expr);
126 void visit (RangeFullExpr &expr);
127 void visit (RangeFromToInclExpr &expr);
128 void visit (RangeToInclExpr &expr);
129 void visit (ReturnExpr &expr);
130 void visit (UnsafeBlockExpr &expr);
131 void visit (LoopExpr &expr);
132 void visit (WhileLoopExpr &expr);
133 void visit (WhileLetLoopExpr &expr);
134 void visit (ForLoopExpr &expr);
135 void visit (IfExpr &expr);
136 void visit (IfExprConseqElse &expr);
137 void visit (IfExprConseqIf &expr);
138 void visit (IfExprConseqIfLet &expr);
139 void visit (IfLetExpr &expr);
140 void visit (IfLetExprConseqElse &expr);
141 void visit (IfLetExprConseqIf &expr);
142 void visit (IfLetExprConseqIfLet &expr);
143 void visit (MatchExpr &expr);
144 void visit (AwaitExpr &expr);
145 void visit (AsyncBlockExpr &expr);
146
147 // rust-item.h
148 void visit (TypeParam &param);
149 void visit (LifetimeWhereClauseItem &item);
150 void visit (TypeBoundWhereClauseItem &item);
151 void visit (Method &method);
152 void visit (Module &module);
153 void visit (ExternCrate &crate);
154 void visit (UseTreeGlob &use_tree);
155 void visit (UseTreeList &use_tree);
156 void visit (UseTreeRebind &use_tree);
157 void visit (UseDeclaration &use_decl);
158 void visit (Function &function);
159 void visit (TypeAlias &type_alias);
160 void visit (StructStruct &struct_item);
161 void visit (TupleStruct &tuple_struct);
162 void visit (EnumItem &item);
163 void visit (EnumItemTuple &item);
164 void visit (EnumItemStruct &item);
165 void visit (EnumItemDiscriminant &item);
166 void visit (Enum &enum_item);
167 void visit (Union &union_item);
168 void visit (ConstantItem &const_item);
169 void visit (StaticItem &static_item);
170 void visit (TraitItemFunc &item);
171 void visit (TraitItemMethod &item);
172 void visit (TraitItemConst &item);
173 void visit (TraitItemType &item);
174 void visit (Trait &trait);
175 void visit (InherentImpl &impl);
176 void visit (TraitImpl &impl);
177 void visit (ExternalStaticItem &item);
178 void visit (ExternalFunctionItem &item);
179 void visit (ExternBlock &block);
180
181 // rust-macro.h
182 void visit (MacroMatchFragment &match);
183 void visit (MacroMatchRepetition &match);
184 void visit (MacroMatcher &matcher);
185 void visit (MacroRulesDefinition &rules_def);
186 void visit (MacroInvocation &macro_invoc);
187 void visit (MetaItemPath &meta_item);
188 void visit (MetaItemSeq &meta_item);
189 void visit (MetaWord &meta_item);
190 void visit (MetaNameValueStr &meta_item);
191 void visit (MetaListPaths &meta_item);
192 void visit (MetaListNameValueStr &meta_item);
193
194 // rust-pattern.h
195 void visit (LiteralPattern &pattern);
196 void visit (IdentifierPattern &pattern);
197 void visit (WildcardPattern &pattern);
198 // void visit(RangePatternBound& bound);
199 void visit (RangePatternBoundLiteral &bound);
200 void visit (RangePatternBoundPath &bound);
201 void visit (RangePatternBoundQualPath &bound);
202 void visit (RangePattern &pattern);
203 void visit (ReferencePattern &pattern);
204 // void visit(StructPatternField& field);
205 void visit (StructPatternFieldTuplePat &field);
206 void visit (StructPatternFieldIdentPat &field);
207 void visit (StructPatternFieldIdent &field);
208 void visit (StructPattern &pattern);
209 // void visit(TupleStructItems& tuple_items);
210 void visit (TupleStructItemsNoRange &tuple_items);
211 void visit (TupleStructItemsRange &tuple_items);
212 void visit (TupleStructPattern &pattern);
213 // void visit(TuplePatternItems& tuple_items);
214 void visit (TuplePatternItemsMultiple &tuple_items);
215 void visit (TuplePatternItemsRanged &tuple_items);
216 void visit (TuplePattern &pattern);
217 void visit (GroupedPattern &pattern);
218 void visit (SlicePattern &pattern);
219
220 // rust-stmt.h
221 void visit (EmptyStmt &stmt);
222 void visit (LetStmt &stmt);
223 void visit (ExprStmtWithoutBlock &stmt);
224 void visit (ExprStmtWithBlock &stmt);
225
226 // rust-type.h
227 void visit (TraitBound &bound);
228 void visit (ImplTraitType &type);
229 void visit (TraitObjectType &type);
230 void visit (ParenthesisedType &type);
231 void visit (ImplTraitTypeOneBound &type);
232 void visit (TraitObjectTypeOneBound &type);
233 void visit (TupleType &type);
234 void visit (NeverType &type);
235 void visit (RawPointerType &type);
236 void visit (ReferenceType &type);
237 void visit (ArrayType &type);
238 void visit (SliceType &type);
239 void visit (InferredType &type);
240 void visit (BareFunctionType &type);
241};
242
243} // namespace AST
244} // namespace Rust
245
246#endif // !RUST_AST_DUMP_H