diff options
author | John McCall <rjmccall@apple.com> | 2011-07-12 20:27:29 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-07-12 20:27:29 +0000 |
commit | ad346f4f678ab1c3222425641d851dc63e9dfa1a (patch) | |
tree | ac5ab28888fb9041423b037fc6437038d831281d /lib/CodeGen/CodeGenFunction.h | |
parent | bb52786da8d055568eef6e5694288c1258bc8c2a (diff) |
Generalize Cleanup::Emit's "isForEH" parameter into a set
of flags. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134997 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index f1a7187013..6236f3e1e8 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -184,6 +184,32 @@ public: // Anchor the construction vtable. virtual void anchor(); public: + /// Generation flags. + class Flags { + enum { + F_IsForEH = 0x1, + F_IsNormalCleanupKind = 0x2, + F_IsEHCleanupKind = 0x4 + }; + unsigned flags; + + public: + Flags() : flags(0) {} + + /// isForEH - true if the current emission is for an EH cleanup. + bool isForEHCleanup() const { return flags & F_IsForEH; } + bool isForNormalCleanup() const { return !isForEHCleanup(); } + void setIsForEHCleanup() { flags |= F_IsForEH; } + + bool isNormalCleanupKind() const { return flags & F_IsNormalCleanupKind; } + void setIsNormalCleanupKind() { flags |= F_IsNormalCleanupKind; } + + /// isEHCleanupKind - true if the cleanup was pushed as an EH + /// cleanup. + bool isEHCleanupKind() const { return flags & F_IsEHCleanupKind; } + void setIsEHCleanupKind() { flags |= F_IsEHCleanupKind; } + }; + // Provide a virtual destructor to suppress a very common warning // that unfortunately cannot be suppressed without this. Cleanups // should not rely on this destructor ever being called. @@ -196,7 +222,7 @@ public: /// // \param IsForEHCleanup true if this is for an EH cleanup, false /// if for a normal cleanup. - virtual void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) = 0; + virtual void Emit(CodeGenFunction &CGF, Flags flags) = 0; }; /// ConditionalCleanupN stores the saved form of its N parameters, @@ -206,9 +232,9 @@ public: typedef typename DominatingValue<A0>::saved_type A0_saved; A0_saved a0_saved; - void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) { + void Emit(CodeGenFunction &CGF, Flags flags) { A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); - T(a0).Emit(CGF, IsForEHCleanup); + T(a0).Emit(CGF, flags); } public: @@ -223,10 +249,10 @@ public: A0_saved a0_saved; A1_saved a1_saved; - void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) { + void Emit(CodeGenFunction &CGF, Flags flags) { A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); - T(a0, a1).Emit(CGF, IsForEHCleanup); + T(a0, a1).Emit(CGF, flags); } public: @@ -243,11 +269,11 @@ public: A1_saved a1_saved; A2_saved a2_saved; - void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) { + void Emit(CodeGenFunction &CGF, Flags flags) { A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); A2 a2 = DominatingValue<A2>::restore(CGF, a2_saved); - T(a0, a1, a2).Emit(CGF, IsForEHCleanup); + T(a0, a1, a2).Emit(CGF, flags); } public: @@ -266,12 +292,12 @@ public: A2_saved a2_saved; A3_saved a3_saved; - void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) { + void Emit(CodeGenFunction &CGF, Flags flags) { A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); A2 a2 = DominatingValue<A2>::restore(CGF, a2_saved); A3 a3 = DominatingValue<A3>::restore(CGF, a3_saved); - T(a0, a1, a2, a3).Emit(CGF, IsForEHCleanup); + T(a0, a1, a2, a3).Emit(CGF, flags); } public: |