Line data Source code
1 : // Copyright (C) 2020-2026 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_NODE_H
20 : #define RUST_HIR_NODE_H
21 :
22 : namespace Rust {
23 :
24 : namespace HIR {
25 :
26 374022 : class Node
27 : {
28 : public:
29 : // Kind for downcasting various HIR nodes to other base classes when visiting
30 : // them
31 : enum BaseKind
32 : {
33 : /* class ExternalItem */
34 : EXTERNAL,
35 : /* class TraitItem */
36 : TRAIT_ITEM,
37 : /* class VisItem */
38 : VIS_ITEM,
39 : /* class Item */
40 : ITEM,
41 : /* class ImplItem */
42 : IMPL,
43 : /* class Type */
44 : TYPE,
45 : /* class Stmt */
46 : STMT,
47 : /* class Expr */
48 : EXPR,
49 : /* class Pattern */
50 : PATTERN,
51 : };
52 :
53 : /**
54 : * Get the kind of HIR node we are dealing with. This is useful for
55 : * downcasting to more precise types when necessary, i.e going from an `Item*`
56 : * to a `VisItem*`
57 : */
58 : virtual BaseKind get_hir_kind () = 0;
59 : };
60 :
61 : } // namespace HIR
62 : } // namespace Rust
63 : #endif
|