1 //===--- CleanupInfo.cpp - Cleanup Control in Sema ------------------------===//
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 //
9 //  This file implements a set of operations on whether generating an
10 //  ExprWithCleanups in a full expression.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_SEMA_CLEANUPINFO_H
15 #define LLVM_CLANG_SEMA_CLEANUPINFO_H
16 
17 namespace clang {
18 
19 class CleanupInfo {
20   bool ExprNeedsCleanups = false;
21   bool CleanupsHaveSideEffects = false;
22 
23 public:
24   bool exprNeedsCleanups() const { return ExprNeedsCleanups; }
25 
26   bool cleanupsHaveSideEffects() const { return CleanupsHaveSideEffects; }
27 
28   void setExprNeedsCleanups(bool SideEffects) {
29     ExprNeedsCleanups = true;
30     CleanupsHaveSideEffects |= SideEffects;
31   }
32 
33   void reset() {
34     ExprNeedsCleanups = false;
35     CleanupsHaveSideEffects = false;
36   }
37 
38   void mergeFrom(CleanupInfo Rhs) {
39     ExprNeedsCleanups |= Rhs.ExprNeedsCleanups;
40     CleanupsHaveSideEffects |= Rhs.CleanupsHaveSideEffects;
41   }
42 };
43 
44 } // end namespace clang
45 
46 #endif
47