]>
Commit | Line | Data |
---|---|---|
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 | ||
26 | namespace Rust { | |
27 | namespace AST { | |
28 | ||
29 | // TODO: We might want to reuse this class somewhere else | |
30 | class Indent | |
31 | { | |
32 | public: | |
33 | Indent (); | |
34 | ||
35 | friend std::ostream &operator<< (std::ostream &stream, const Indent &indent); | |
36 | ||
37 | void increment (); | |
38 | void decrement (); | |
39 | ||
40 | private: | |
41 | size_t tabs; | |
42 | }; | |
43 | ||
44 | class Dump : public ASTVisitor | |
45 | { | |
46 | public: | |
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 | ||
55 | private: | |
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 ¶m); | |
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 ¶m); | |
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 ¯o_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 |