| Index: src/assert-scope.h
|
| diff --git a/src/assert-scope.h b/src/assert-scope.h
|
| index d32d680d1c18410f5c9bef37c52401e6c133bb26..e2ec542a7708230af2bee1fc4f4840218afd967e 100644
|
| --- a/src/assert-scope.h
|
| +++ b/src/assert-scope.h
|
| @@ -48,7 +48,7 @@ enum PerThreadAssertType {
|
| #ifdef DEBUG
|
| class PerThreadAssertData {
|
| public:
|
| - PerThreadAssertData() {
|
| + PerThreadAssertData() : nesting_level_(0) {
|
| for (int i = 0; i < LAST_PER_THREAD_ASSERT_TYPE; i++) {
|
| assert_states_[i] = true;
|
| }
|
| @@ -62,8 +62,12 @@ class PerThreadAssertData {
|
| return assert_states_[type];
|
| }
|
|
|
| + void increment_level() { ++nesting_level_; }
|
| + bool decrement_level() { return --nesting_level_ == 0; }
|
| +
|
| private:
|
| bool assert_states_[LAST_PER_THREAD_ASSERT_TYPE];
|
| + int nesting_level_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PerThreadAssertData);
|
| };
|
| @@ -72,7 +76,22 @@ class PerThreadAssertData {
|
|
|
| class PerThreadAssertScopeBase {
|
| #ifdef DEBUG
|
| +
|
| protected:
|
| + PerThreadAssertScopeBase() {
|
| + data_ = AssertData();
|
| + data_->increment_level();
|
| + }
|
| +
|
| + ~PerThreadAssertScopeBase() {
|
| + if (!data_->decrement_level()) return;
|
| + for (int i = 0; i < LAST_PER_THREAD_ASSERT_TYPE; i++) {
|
| + ASSERT(data_->get(static_cast<PerThreadAssertType>(i)));
|
| + }
|
| + delete data_;
|
| + Thread::SetThreadLocal(thread_local_key, NULL);
|
| + }
|
| +
|
| static PerThreadAssertData* AssertData() {
|
| PerThreadAssertData* data = reinterpret_cast<PerThreadAssertData*>(
|
| Thread::GetThreadLocal(thread_local_key));
|
| @@ -84,6 +103,7 @@ class PerThreadAssertScopeBase {
|
| }
|
|
|
| static Thread::LocalStorageKey thread_local_key;
|
| + PerThreadAssertData* data_;
|
| friend class Isolate;
|
| #endif // DEBUG
|
| };
|
| @@ -98,12 +118,11 @@ class PerThreadAssertScope : public PerThreadAssertScopeBase {
|
| static void SetIsAllowed(bool is_allowed) { }
|
| #else
|
| PerThreadAssertScope() {
|
| - PerThreadAssertData* data = AssertData();
|
| - old_state_ = data->get(type);
|
| - data->set(type, allow);
|
| + old_state_ = data_->get(type);
|
| + data_->set(type, allow);
|
| }
|
|
|
| - ~PerThreadAssertScope() { AssertData()->set(type, old_state_); }
|
| + ~PerThreadAssertScope() { data_->set(type, old_state_); }
|
|
|
| static bool IsAllowed() { return AssertData()->get(type); }
|
|
|
|
|