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 #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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |