| 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 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 ~ApiNativeScope() { | 635 ~ApiNativeScope() { |
| 630 ASSERT(Current() == this); | 636 ASSERT(Current() == this); |
| 631 OSThread::SetThreadLocal(Api::api_native_key_, 0); | 637 OSThread::SetThreadLocal(Api::api_native_key_, 0); |
| 632 } | 638 } |
| 633 | 639 |
| 634 static inline ApiNativeScope* Current() { | 640 static inline ApiNativeScope* Current() { |
| 635 return reinterpret_cast<ApiNativeScope*>( | 641 return reinterpret_cast<ApiNativeScope*>( |
| 636 OSThread::GetThreadLocal(Api::api_native_key_)); | 642 OSThread::GetThreadLocal(Api::api_native_key_)); |
| 637 } | 643 } |
| 638 | 644 |
| 639 Zone* zone() { return zone_.GetZone(); } | 645 Zone* zone() { |
| 646 Zone* result = zone_.GetZone(); |
| 647 ASSERT(result->handles()->CountScopedHandles() == 0); |
| 648 ASSERT(result->handles()->CountZoneHandles() == 0); |
| 649 return result; |
| 650 } |
| 640 | 651 |
| 641 private: | 652 private: |
| 642 ApiZone zone_; | 653 ApiZone zone_; |
| 643 }; | 654 }; |
| 644 | 655 |
| 645 | 656 |
| 646 // Api growable arrays use a zone for allocation. The constructor | 657 // Api growable arrays use a zone for allocation. The constructor |
| 647 // picks the zone from the current isolate if in an isolate | 658 // picks the zone from the current isolate if in an isolate |
| 648 // environment. When outside an isolate environment it picks the zone | 659 // environment. When outside an isolate environment it picks the zone |
| 649 // from the current native scope. | 660 // from the current native scope. |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 980 ref->set_peer(peer); | 991 ref->set_peer(peer); |
| 981 ref->set_callback(callback); | 992 ref->set_callback(callback); |
| 982 // This may trigger GC, so it must be called last. | 993 // This may trigger GC, so it must be called last. |
| 983 ref->SetExternalSize(external_size, isolate); | 994 ref->SetExternalSize(external_size, isolate); |
| 984 return ref; | 995 return ref; |
| 985 } | 996 } |
| 986 | 997 |
| 987 } // namespace dart | 998 } // namespace dart |
| 988 | 999 |
| 989 #endif // VM_DART_API_STATE_H_ | 1000 #endif // VM_DART_API_STATE_H_ |
| OLD | NEW |