]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/rust/hir/rust-ast-lower-expr.h
Update copyright years.
[thirdparty/gcc.git] / gcc / rust / hir / rust-ast-lower-expr.h
CommitLineData
a945c346 1// Copyright (C) 2020-2024 Free Software Foundation, Inc.
7999cf32
PH
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_AST_LOWER_EXPR
20#define RUST_AST_LOWER_EXPR
21
7999cf32 22#include "rust-ast-lower-base.h"
7999cf32
PH
23
24namespace Rust {
25namespace HIR {
26
27class ASTLowerPathInExpression : public ASTLoweringBase
28{
29 using Rust::HIR::ASTLoweringBase::visit;
30
31public:
32 static HIR::PathInExpression *translate (AST::PathInExpression *expr)
33 {
34 ASTLowerPathInExpression compiler;
35 expr->accept_vis (compiler);
36 rust_assert (compiler.translated);
37 return compiler.translated;
38 }
39
40 void visit (AST::PathInExpression &expr) override;
41
42private:
43 ASTLowerPathInExpression () : translated (nullptr) {}
44
45 HIR::PathInExpression *translated;
46};
47
48class ASTLowerQualPathInExpression : public ASTLoweringBase
49{
50 using Rust::HIR::ASTLoweringBase::visit;
51
52public:
53 static HIR::QualifiedPathInExpression *
54 translate (AST::QualifiedPathInExpression *expr)
55 {
56 ASTLowerQualPathInExpression compiler;
57 expr->accept_vis (compiler);
58 rust_assert (compiler.translated);
59 return compiler.translated;
60 }
61
62 void visit (AST::QualifiedPathInExpression &expr) override;
63
64private:
65 ASTLowerQualPathInExpression () : translated (nullptr) {}
66
67 HIR::QualifiedPathInExpression *translated;
68};
69
70class ASTLoweringExpr : public ASTLoweringBase
71{
72 using Rust::HIR::ASTLoweringBase::visit;
73
74public:
870dd9d5
PH
75 static HIR::Expr *translate (AST::Expr *expr, bool *terminated = nullptr);
76
77 void visit (AST::TupleIndexExpr &expr) override;
78 void visit (AST::TupleExpr &expr) override;
79 void visit (AST::IfExpr &expr) override;
80 void visit (AST::IfExprConseqElse &expr) override;
81 void visit (AST::IfExprConseqIf &expr) override;
82 void visit (AST::BlockExpr &expr) override;
83 void visit (AST::UnsafeBlockExpr &expr) override;
84 void visit (AST::PathInExpression &expr) override;
85 void visit (AST::QualifiedPathInExpression &expr) override;
86 void visit (AST::ReturnExpr &expr) override;
87 void visit (AST::CallExpr &expr) override;
88 void visit (AST::MethodCallExpr &expr) override;
89 void visit (AST::AssignmentExpr &expr) override;
90 void visit (AST::IdentifierExpr &expr) override;
91 void visit (AST::ArrayExpr &expr) override;
92 void visit (AST::ArrayIndexExpr &expr) override;
93 void visit (AST::ArrayElemsValues &elems) override;
94 void visit (AST::ArrayElemsCopied &elems) override;
95 void visit (AST::LiteralExpr &expr) override;
96 void visit (AST::ArithmeticOrLogicalExpr &expr) override;
97 void visit (AST::ComparisonExpr &expr) override;
98 void visit (AST::LazyBooleanExpr &expr) override;
99 void visit (AST::NegationExpr &expr) override;
100 void visit (AST::TypeCastExpr &expr) override;
101 void visit (AST::CompoundAssignmentExpr &expr) override;
102 void visit (AST::StructExprStruct &struct_expr) override;
103 void visit (AST::StructExprStructFields &struct_expr) override;
104 void visit (AST::GroupedExpr &expr) override;
105 void visit (AST::FieldAccessExpr &expr) override;
106 void visit (AST::LoopExpr &expr) override;
107 void visit (AST::WhileLoopExpr &expr) override;
108 void visit (AST::ForLoopExpr &expr) override;
109 void visit (AST::BreakExpr &expr) override;
110 void visit (AST::ContinueExpr &expr) override;
111 void visit (AST::BorrowExpr &expr) override;
112 void visit (AST::DereferenceExpr &expr) override;
113 void visit (AST::MatchExpr &expr) override;
114 void visit (AST::RangeFromToExpr &expr) override;
115 void visit (AST::RangeFromExpr &expr) override;
116 void visit (AST::RangeToExpr &expr) override;
117 void visit (AST::RangeFullExpr &expr) override;
118 void visit (AST::RangeFromToInclExpr &expr) override;
119 void visit (AST::ClosureExprInner &expr) override;
120 void visit (AST::ClosureExprInnerTyped &expr) override;
7999cf32
PH
121
122private:
870dd9d5 123 ASTLoweringExpr ();
7999cf32
PH
124
125 HIR::Expr *translated;
126 HIR::ArrayElems *translated_array_elems;
127 bool terminated;
128};
129
130} // namespace HIR
131} // namespace Rust
132
133#endif // RUST_AST_LOWER_EXPR