xref: /freebsd/contrib/llvm-project/clang/include/clang/Sema/SemaPseudoObject.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1 //===----- SemaPseudoObject.h --- Semantic Analysis for Pseudo-Objects ----===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 /// \file
9 /// This file declares semantic analysis for expressions involving
10 //  pseudo-object references.
11 ///
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_SEMA_SEMAPSEUDOOBJECT_H
15 #define LLVM_CLANG_SEMA_SEMAPSEUDOOBJECT_H
16 
17 #include "clang/AST/Expr.h"
18 #include "clang/AST/OperationKinds.h"
19 #include "clang/Basic/SourceLocation.h"
20 #include "clang/Sema/Ownership.h"
21 #include "clang/Sema/Scope.h"
22 #include "clang/Sema/SemaBase.h"
23 
24 namespace clang {
25 
26 class SemaPseudoObject : public SemaBase {
27 public:
28   SemaPseudoObject(Sema &S);
29 
30   ExprResult checkIncDec(Scope *S, SourceLocation OpLoc,
31                          UnaryOperatorKind Opcode, Expr *Op);
32   ExprResult checkAssignment(Scope *S, SourceLocation OpLoc,
33                              BinaryOperatorKind Opcode, Expr *LHS, Expr *RHS);
34   ExprResult checkRValue(Expr *E);
35   Expr *recreateSyntacticForm(PseudoObjectExpr *E);
36 };
37 
38 } // namespace clang
39 
40 #endif // LLVM_CLANG_SEMA_SEMAPSEUDOOBJECT_H