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

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: final revision 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
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/pages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7886 matching lines...) Expand 10 before | Expand all | Expand 10 after
7897 return String::ToCString(); 7897 return String::ToCString();
7898 } 7898 }
7899 7899
7900 7900
7901 static void AddFinalizer(const Object& referent, 7901 static void AddFinalizer(const Object& referent,
7902 void* peer, 7902 void* peer,
7903 Dart_WeakPersistentHandleFinalizer callback) { 7903 Dart_WeakPersistentHandleFinalizer callback) {
7904 ASSERT(callback != NULL); 7904 ASSERT(callback != NULL);
7905 ApiState* state = Isolate::Current()->api_state(); 7905 ApiState* state = Isolate::Current()->api_state();
7906 ASSERT(state != NULL); 7906 ASSERT(state != NULL);
7907 WeakPersistentHandle* weak_ref = 7907 FinalizablePersistentHandle* weak_ref =
7908 state->weak_persistent_handles().AllocateHandle(); 7908 state->weak_persistent_handles().AllocateHandle();
7909 weak_ref->set_raw(referent); 7909 weak_ref->set_raw(referent);
7910 weak_ref->set_peer(peer); 7910 weak_ref->set_peer(peer);
7911 weak_ref->set_callback(callback); 7911 weak_ref->set_callback(callback);
7912 } 7912 }
7913 7913
7914 7914
7915 RawExternalOneByteString* ExternalOneByteString::New( 7915 RawExternalOneByteString* ExternalOneByteString::New(
7916 const uint8_t* data, 7916 const uint8_t* data,
7917 intptr_t len, 7917 intptr_t len,
(...skipping 18 matching lines...) Expand all
7936 result.SetExternalData(external_data); 7936 result.SetExternalData(external_data);
7937 } 7937 }
7938 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); 7938 AddFinalizer(result, external_data, ExternalOneByteString::Finalize);
7939 return result.raw(); 7939 return result.raw();
7940 } 7940 }
7941 7941
7942 7942
7943 static void DeleteWeakPersistentHandle(Dart_Handle handle) { 7943 static void DeleteWeakPersistentHandle(Dart_Handle handle) {
7944 ApiState* state = Isolate::Current()->api_state(); 7944 ApiState* state = Isolate::Current()->api_state();
7945 ASSERT(state != NULL); 7945 ASSERT(state != NULL);
7946 WeakPersistentHandle* weak_ref = 7946 FinalizablePersistentHandle* weak_ref =
7947 reinterpret_cast<WeakPersistentHandle*>(handle); 7947 reinterpret_cast<FinalizablePersistentHandle*>(handle);
7948 ASSERT(state->IsValidWeakPersistentHandle(handle)); 7948 ASSERT(state->IsValidWeakPersistentHandle(handle));
7949 state->weak_persistent_handles().FreeHandle(weak_ref); 7949 state->weak_persistent_handles().FreeHandle(weak_ref);
7950 } 7950 }
7951 7951
7952 7952
7953 void ExternalOneByteString::Finalize(Dart_Handle handle, void* peer) { 7953 void ExternalOneByteString::Finalize(Dart_Handle handle, void* peer) {
7954 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); 7954 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer);
7955 DeleteWeakPersistentHandle(handle); 7955 DeleteWeakPersistentHandle(handle);
7956 } 7956 }
7957 7957
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
8769 const String& str = String::Handle(pattern()); 8769 const String& str = String::Handle(pattern());
8770 const char* format = "JSRegExp: pattern=%s flags=%s"; 8770 const char* format = "JSRegExp: pattern=%s flags=%s";
8771 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 8771 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
8772 char* chars = reinterpret_cast<char*>( 8772 char* chars = reinterpret_cast<char*>(
8773 Isolate::Current()->current_zone()->Allocate(len + 1)); 8773 Isolate::Current()->current_zone()->Allocate(len + 1));
8774 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 8774 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
8775 return chars; 8775 return chars;
8776 } 8776 }
8777 8777
8778 } // namespace dart 8778 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/pages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698