Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Side by Side Diff: runtime/vm/object.cc

Issue 9655011: Implement prologue weak persistent handles. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: minor pre-review changes Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/bigint_operations.h" 9 #include "vm/bigint_operations.h"
10 #include "vm/bootstrap.h" 10 #include "vm/bootstrap.h"
(...skipping 7819 matching lines...) Expand 10 before | Expand all | Expand 10 after
7830 return String::ToCString(); 7830 return String::ToCString();
7831 } 7831 }
7832 7832
7833 7833
7834 static void AddFinalizer(const Object& referent, 7834 static void AddFinalizer(const Object& referent,
7835 void* peer, 7835 void* peer,
7836 Dart_WeakPersistentHandleFinalizer callback) { 7836 Dart_WeakPersistentHandleFinalizer callback) {
7837 ASSERT(callback != NULL); 7837 ASSERT(callback != NULL);
7838 ApiState* state = Isolate::Current()->api_state(); 7838 ApiState* state = Isolate::Current()->api_state();
7839 ASSERT(state != NULL); 7839 ASSERT(state != NULL);
7840 WeakPersistentHandle* weak_ref = 7840 FinalizablePersistentHandle* weak_ref =
7841 state->weak_persistent_handles().AllocateHandle(); 7841 state->weak_persistent_handles().AllocateHandle();
7842 weak_ref->set_raw(referent); 7842 weak_ref->set_raw(referent);
7843 weak_ref->set_peer(peer); 7843 weak_ref->set_peer(peer);
7844 weak_ref->set_callback(callback); 7844 weak_ref->set_callback(callback);
7845 } 7845 }
7846 7846
7847 7847
7848 RawExternalOneByteString* ExternalOneByteString::New( 7848 RawExternalOneByteString* ExternalOneByteString::New(
7849 const uint8_t* data, 7849 const uint8_t* data,
7850 intptr_t len, 7850 intptr_t len,
(...skipping 18 matching lines...) Expand all
7869 result.SetExternalData(external_data); 7869 result.SetExternalData(external_data);
7870 } 7870 }
7871 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); 7871 AddFinalizer(result, external_data, ExternalOneByteString::Finalize);
7872 return result.raw(); 7872 return result.raw();
7873 } 7873 }
7874 7874
7875 7875
7876 static void DeleteWeakPersistentHandle(Dart_Handle handle) { 7876 static void DeleteWeakPersistentHandle(Dart_Handle handle) {
7877 ApiState* state = Isolate::Current()->api_state(); 7877 ApiState* state = Isolate::Current()->api_state();
7878 ASSERT(state != NULL); 7878 ASSERT(state != NULL);
7879 WeakPersistentHandle* weak_ref = 7879 FinalizablePersistentHandle* weak_ref =
7880 reinterpret_cast<WeakPersistentHandle*>(handle); 7880 reinterpret_cast<FinalizablePersistentHandle*>(handle);
7881 ASSERT(state->IsValidWeakPersistentHandle(handle)); 7881 ASSERT(state->IsValidWeakPersistentHandle(handle));
7882 state->weak_persistent_handles().FreeHandle(weak_ref); 7882 state->weak_persistent_handles().FreeHandle(weak_ref);
7883 } 7883 }
7884 7884
7885 7885
7886 void ExternalOneByteString::Finalize(Dart_Handle handle, void* peer) { 7886 void ExternalOneByteString::Finalize(Dart_Handle handle, void* peer) {
7887 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); 7887 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer);
7888 DeleteWeakPersistentHandle(handle); 7888 DeleteWeakPersistentHandle(handle);
7889 } 7889 }
7890 7890
(...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after
8819 result.set_num_args_tested(num_args_tested); 8819 result.set_num_args_tested(num_args_tested);
8820 // Number of array elements in one test entry (num_args_tested + 1) 8820 // Number of array elements in one test entry (num_args_tested + 1)
8821 intptr_t len = result.TestEntryLength(); 8821 intptr_t len = result.TestEntryLength();
8822 // IC data array must be null terminated (sentinel entry). 8822 // IC data array must be null terminated (sentinel entry).
8823 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld)); 8823 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld));
8824 result.set_ic_data(ic_data); 8824 result.set_ic_data(ic_data);
8825 return result.raw(); 8825 return result.raw();
8826 } 8826 }
8827 8827
8828 } // namespace dart 8828 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698