[PPL-devel] [GIT] ppl/ppl(master): Protect in_assert flag from exceptions.
Abramo Bagnara
abramo.bagnara at gmail.com
Sat Apr 21 11:53:01 CEST 2012
Module: ppl/ppl
Branch: master
Commit: 1fd3370f93b3fbc26ad024a1bedc2d280660ecc3
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=1fd3370f93b3fbc26ad024a1bedc2d280660ecc3
Author: Abramo Bagnara <abramo.bagnara at gmail.com>
Date: Sat Apr 21 11:52:50 2012 +0200
Protect in_assert flag from exceptions.
---
src/assert.hh | 3 +--
src/globals.cc | 4 +---
src/globals.defs.hh | 23 +++++++++++++++++------
src/globals.inlines.hh | 2 +-
4 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/src/assert.hh b/src/assert.hh
index 7751da2..3c64266 100644
--- a/src/assert.hh
+++ b/src/assert.hh
@@ -82,9 +82,8 @@ site: http://bugseng.com/products/ppl/ . */
#else
#define PPL_ASSERT_HEAVY(cond__) \
do { \
- ++Parma_Polyhedra_Library::Implementation::in_assert; \
+ Parma_Polyhedra_Library::In_Assert guard; \
PPL_ASSERT_IMPL_(cond__); \
- --Parma_Polyhedra_Library::Implementation::in_assert; \
} while (false)
#endif // !defined(NDEBUG)
diff --git a/src/globals.cc b/src/globals.cc
index ea28df1..7e11305 100644
--- a/src/globals.cc
+++ b/src/globals.cc
@@ -35,11 +35,9 @@ Weightwatch_Traits::Threshold Weightwatch_Traits::weight = 0;
void (*Weightwatch_Traits::check_function)(void) = 0;
#ifndef NDEBUG
-namespace Implementation {
-unsigned int in_assert = 0;
+unsigned int In_Assert::count = 0;
-} // namespace Implementation
#endif
diff --git a/src/globals.defs.hh b/src/globals.defs.hh
index 339aef3..e91ba78 100644
--- a/src/globals.defs.hh
+++ b/src/globals.defs.hh
@@ -146,12 +146,23 @@ struct Weightwatch_Traits {
#ifndef NDEBUG
-namespace Implementation {
-//! Non zero during evaluation of PPL_ASSERT expression.
-extern unsigned int in_assert;
+class In_Assert {
+private:
+ //! Non zero during evaluation of PPL_ASSERT expression.
+ static unsigned int count;
+public:
+ In_Assert() {
+ ++count;
+ }
+ ~In_Assert() {
+ ++count;
+ }
+ static bool asserting() {
+ return count != 0;
+ }
+};
-} // namespace Implementation
#endif
@@ -524,12 +535,12 @@ least_significant_one_mask(dimension_type i);
#define WEIGHT_BEGIN()
#define WEIGHT_ADD(delta) \
do { \
- if (Implementation::in_assert == 0) \
+ if (!In_Assert::asserting()) \
Weightwatch_Traits::weight += delta; \
} while (false)
#define WEIGHT_ADD_MUL(delta, factor) \
do { \
- if (Implementation::in_assert == 0) \
+ if (!In_Assert::asserting()) \
Weightwatch_Traits::weight += delta * factor; \
} while (false)
#endif
diff --git a/src/globals.inlines.hh b/src/globals.inlines.hh
index ed9dc55..748f6dc 100644
--- a/src/globals.inlines.hh
+++ b/src/globals.inlines.hh
@@ -76,7 +76,7 @@ Throwable::~Throwable() {
inline void
maybe_abandon() {
#ifndef NDEBUG
- if (Implementation::in_assert != 0)
+ if (In_Assert::asserting())
return;
#endif
if (Weightwatch_Traits::check_function != 0)
More information about the PPL-devel
mailing list