| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #include "vm/thread_state.h" | |
| #include "vm/handles_impl.h" | |
| #include "vm/zone.h" | |
| namespace dart { | |
| ThreadState::ThreadState(bool is_os_thread) : BaseThread(is_os_thread) {} | |
| ThreadState::~ThreadState() {} | |
| bool ThreadState::IsValidZoneHandle(Dart_Handle object) const { | |
| Zone* zone = this->zone(); | |
| while (zone != nullptr) { | |
| if (zone->handles()->IsValidZoneHandle(reinterpret_cast<uword>(object))) { | |
| return true; | |
| } | |
| zone = zone->previous(); | |
| } | |
| return false; | |
| } | |
| intptr_t ThreadState::CountZoneHandles() const { | |
| intptr_t count = 0; | |
| Zone* zone = this->zone(); | |
| while (zone != nullptr) { | |
| count += zone->handles()->CountZoneHandles(); | |
| zone = zone->previous(); | |
| } | |
| ASSERT(count >= 0); | |
| return count; | |
| } | |
| bool ThreadState::IsValidScopedHandle(Dart_Handle object) const { | |
| Zone* zone = this->zone(); | |
| while (zone != nullptr) { | |
| if (zone->handles()->IsValidScopedHandle(reinterpret_cast<uword>(object))) { | |
| return true; | |
| } | |
| zone = zone->previous(); | |
| } | |
| return false; | |
| } | |
| intptr_t ThreadState::CountScopedHandles() const { | |
| intptr_t count = 0; | |
| Zone* zone = this->zone(); | |
| while (zone != nullptr) { | |
| count += zone->handles()->CountScopedHandles(); | |
| zone = zone->previous(); | |
| } | |
| ASSERT(count >= 0); | |
| return count; | |
| } | |
| } // namespace dart |