| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_DART_API_STATE_H_ | 5 #ifndef VM_DART_API_STATE_H_ |
| 6 #define VM_DART_API_STATE_H_ | 6 #define VM_DART_API_STATE_H_ |
| 7 | 7 |
| 8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
| 9 | 9 |
| 10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 OS::PrintErr("*** Starting a new Api zone 0x%" Px "(0x%" Px ")\n", | 46 OS::PrintErr("*** Starting a new Api zone 0x%" Px "(0x%" Px ")\n", |
| 47 reinterpret_cast<intptr_t>(this), | 47 reinterpret_cast<intptr_t>(this), |
| 48 reinterpret_cast<intptr_t>(&zone_)); | 48 reinterpret_cast<intptr_t>(&zone_)); |
| 49 } | 49 } |
| 50 #endif | 50 #endif |
| 51 } | 51 } |
| 52 | 52 |
| 53 // Delete all memory associated with the zone. | 53 // Delete all memory associated with the zone. |
| 54 ~ApiZone() { | 54 ~ApiZone() { |
| 55 Isolate* isolate = Isolate::Current(); | 55 Isolate* isolate = Isolate::Current(); |
| 56 #if defined(DEBUG) |
| 57 if (isolate == NULL) { |
| 58 ASSERT(zone_.handles()->CountScopedHandles() == 0); |
| 59 ASSERT(zone_.handles()->CountZoneHandles() == 0); |
| 60 } |
| 61 #endif |
| 56 if ((isolate != NULL) && (isolate->current_zone() == &zone_)) { | 62 if ((isolate != NULL) && (isolate->current_zone() == &zone_)) { |
| 57 isolate->set_current_zone(zone_.previous_); | 63 isolate->set_current_zone(zone_.previous_); |
| 58 } | 64 } |
| 59 #ifdef DEBUG | 65 #ifdef DEBUG |
| 60 if (FLAG_trace_zones) { | 66 if (FLAG_trace_zones) { |
| 61 OS::PrintErr("*** Deleting Api zone 0x%" Px "(0x%" Px ")\n", | 67 OS::PrintErr("*** Deleting Api zone 0x%" Px "(0x%" Px ")\n", |
| 62 reinterpret_cast<intptr_t>(this), | 68 reinterpret_cast<intptr_t>(this), |
| 63 reinterpret_cast<intptr_t>(&zone_)); | 69 reinterpret_cast<intptr_t>(&zone_)); |
| 64 } | 70 } |
| 65 #endif | 71 #endif |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 ~ApiNativeScope() { | 631 ~ApiNativeScope() { |
| 626 ASSERT(Current() == this); | 632 ASSERT(Current() == this); |
| 627 OSThread::SetThreadLocal(Api::api_native_key_, 0); | 633 OSThread::SetThreadLocal(Api::api_native_key_, 0); |
| 628 } | 634 } |
| 629 | 635 |
| 630 static inline ApiNativeScope* Current() { | 636 static inline ApiNativeScope* Current() { |
| 631 return reinterpret_cast<ApiNativeScope*>( | 637 return reinterpret_cast<ApiNativeScope*>( |
| 632 OSThread::GetThreadLocal(Api::api_native_key_)); | 638 OSThread::GetThreadLocal(Api::api_native_key_)); |
| 633 } | 639 } |
| 634 | 640 |
| 635 Zone* zone() { return zone_.GetZone(); } | 641 Zone* zone() { |
| 642 Zone* result = zone_.GetZone(); |
| 643 ASSERT(result->handles()->CountScopedHandles() == 0); |
| 644 ASSERT(result->handles()->CountZoneHandles() == 0); |
| 645 return result; |
| 646 } |
| 636 | 647 |
| 637 private: | 648 private: |
| 638 ApiZone zone_; | 649 ApiZone zone_; |
| 639 }; | 650 }; |
| 640 | 651 |
| 641 | 652 |
| 642 // Api growable arrays use a zone for allocation. The constructor | 653 // Api growable arrays use a zone for allocation. The constructor |
| 643 // picks the zone from the current isolate if in an isolate | 654 // picks the zone from the current isolate if in an isolate |
| 644 // environment. When outside an isolate environment it picks the zone | 655 // environment. When outside an isolate environment it picks the zone |
| 645 // from the current native scope. | 656 // from the current native scope. |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 ref->set_peer(peer); | 987 ref->set_peer(peer); |
| 977 ref->set_callback(callback); | 988 ref->set_callback(callback); |
| 978 // This may trigger GC, so it must be called last. | 989 // This may trigger GC, so it must be called last. |
| 979 ref->SetExternalSize(external_size, isolate); | 990 ref->SetExternalSize(external_size, isolate); |
| 980 return ref; | 991 return ref; |
| 981 } | 992 } |
| 982 | 993 |
| 983 } // namespace dart | 994 } // namespace dart |
| 984 | 995 |
| 985 #endif // VM_DART_API_STATE_H_ | 996 #endif // VM_DART_API_STATE_H_ |
| OLD | NEW |