| 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 "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 } else if (value == '\\') { | 412 } else if (value == '\\') { |
| 413 return '\\'; | 413 return '\\'; |
| 414 } else if (value == '$') { | 414 } else if (value == '$') { |
| 415 return '$'; | 415 return '$'; |
| 416 } | 416 } |
| 417 UNREACHABLE(); | 417 UNREACHABLE(); |
| 418 return '\0'; | 418 return '\0'; |
| 419 } | 419 } |
| 420 | 420 |
| 421 | 421 |
| 422 static void DeleteWeakPersistentHandle(Dart_WeakPersistentHandle handle) { | 422 static void DeleteWeakPersistentHandle(Dart_Isolate current_isolate, |
| 423 ApiState* state = Isolate::Current()->api_state(); | 423 Dart_WeakPersistentHandle handle) { |
| 424 Isolate* isolate = reinterpret_cast<Isolate*>(current_isolate); |
| 425 ApiState* state = isolate->api_state(); |
| 424 ASSERT(state != NULL); | 426 ASSERT(state != NULL); |
| 425 FinalizablePersistentHandle* weak_ref = | 427 FinalizablePersistentHandle* weak_ref = |
| 426 reinterpret_cast<FinalizablePersistentHandle*>(handle); | 428 reinterpret_cast<FinalizablePersistentHandle*>(handle); |
| 427 ASSERT(state->IsValidWeakPersistentHandle(handle)); | 429 ASSERT(state->IsValidWeakPersistentHandle(handle)); |
| 428 state->weak_persistent_handles().FreeHandle(weak_ref); | 430 state->weak_persistent_handles().FreeHandle(weak_ref); |
| 429 } | 431 } |
| 430 | 432 |
| 431 | 433 |
| 432 void Object::InitOnce() { | 434 void Object::InitOnce() { |
| 433 // TODO(iposva): NoGCScope needs to be added here. | 435 // TODO(iposva): NoGCScope needs to be added here. |
| (...skipping 6214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6648 RawExternalTypedData* TokenStream::GetStream() const { | 6650 RawExternalTypedData* TokenStream::GetStream() const { |
| 6649 return raw_ptr()->stream_; | 6651 return raw_ptr()->stream_; |
| 6650 } | 6652 } |
| 6651 | 6653 |
| 6652 | 6654 |
| 6653 void TokenStream::SetStream(const ExternalTypedData& value) const { | 6655 void TokenStream::SetStream(const ExternalTypedData& value) const { |
| 6654 StorePointer(&raw_ptr()->stream_, value.raw()); | 6656 StorePointer(&raw_ptr()->stream_, value.raw()); |
| 6655 } | 6657 } |
| 6656 | 6658 |
| 6657 | 6659 |
| 6658 void TokenStream::DataFinalizer(Dart_WeakPersistentHandle handle, void *peer) { | 6660 void TokenStream::DataFinalizer(Dart_Isolate isolate, |
| 6661 Dart_WeakPersistentHandle handle, |
| 6662 void *peer) { |
| 6659 ASSERT(peer != NULL); | 6663 ASSERT(peer != NULL); |
| 6660 ::free(peer); | 6664 ::free(peer); |
| 6661 DeleteWeakPersistentHandle(handle); | 6665 DeleteWeakPersistentHandle(isolate, handle); |
| 6662 } | 6666 } |
| 6663 | 6667 |
| 6664 | 6668 |
| 6665 RawString* TokenStream::PrivateKey() const { | 6669 RawString* TokenStream::PrivateKey() const { |
| 6666 return raw_ptr()->private_key_; | 6670 return raw_ptr()->private_key_; |
| 6667 } | 6671 } |
| 6668 | 6672 |
| 6669 | 6673 |
| 6670 void TokenStream::SetPrivateKey(const String& value) const { | 6674 void TokenStream::SetPrivateKey(const String& value) const { |
| 6671 StorePointer(&raw_ptr()->private_key_, value.raw()); | 6675 StorePointer(&raw_ptr()->private_key_, value.raw()); |
| (...skipping 9215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15887 Dart_PeerFinalizer cback) { | 15891 Dart_PeerFinalizer cback) { |
| 15888 ASSERT(!str.IsNull() && str.IsOneByteString()); | 15892 ASSERT(!str.IsNull() && str.IsOneByteString()); |
| 15889 ASSERT(peer != NULL); | 15893 ASSERT(peer != NULL); |
| 15890 ExternalStringData<uint8_t>* ext_data = | 15894 ExternalStringData<uint8_t>* ext_data = |
| 15891 new ExternalStringData<uint8_t>(NULL, peer, cback); | 15895 new ExternalStringData<uint8_t>(NULL, peer, cback); |
| 15892 AddFinalizer(str, ext_data, OneByteString::Finalize); | 15896 AddFinalizer(str, ext_data, OneByteString::Finalize); |
| 15893 Isolate::Current()->heap()->SetPeer(str.raw(), peer); | 15897 Isolate::Current()->heap()->SetPeer(str.raw(), peer); |
| 15894 } | 15898 } |
| 15895 | 15899 |
| 15896 | 15900 |
| 15897 void OneByteString::Finalize(Dart_WeakPersistentHandle handle, void* peer) { | 15901 void OneByteString::Finalize(Dart_Isolate isolate, |
| 15902 Dart_WeakPersistentHandle handle, |
| 15903 void* peer) { |
| 15898 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); | 15904 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); |
| 15899 DeleteWeakPersistentHandle(handle); | 15905 DeleteWeakPersistentHandle(isolate, handle); |
| 15900 } | 15906 } |
| 15901 | 15907 |
| 15902 | 15908 |
| 15903 RawTwoByteString* TwoByteString::EscapeSpecialCharacters(const String& str) { | 15909 RawTwoByteString* TwoByteString::EscapeSpecialCharacters(const String& str) { |
| 15904 intptr_t len = str.Length(); | 15910 intptr_t len = str.Length(); |
| 15905 if (len > 0) { | 15911 if (len > 0) { |
| 15906 intptr_t num_escapes = 0; | 15912 intptr_t num_escapes = 0; |
| 15907 for (intptr_t i = 0; i < len; i++) { | 15913 for (intptr_t i = 0; i < len; i++) { |
| 15908 if (IsSpecialCharacter(*CharAddr(str, i))) { | 15914 if (IsSpecialCharacter(*CharAddr(str, i))) { |
| 15909 num_escapes += 1; | 15915 num_escapes += 1; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16061 Dart_PeerFinalizer cback) { | 16067 Dart_PeerFinalizer cback) { |
| 16062 ASSERT(!str.IsNull() && str.IsTwoByteString()); | 16068 ASSERT(!str.IsNull() && str.IsTwoByteString()); |
| 16063 ASSERT(peer != NULL); | 16069 ASSERT(peer != NULL); |
| 16064 ExternalStringData<uint16_t>* ext_data = | 16070 ExternalStringData<uint16_t>* ext_data = |
| 16065 new ExternalStringData<uint16_t>(NULL, peer, cback); | 16071 new ExternalStringData<uint16_t>(NULL, peer, cback); |
| 16066 AddFinalizer(str, ext_data, TwoByteString::Finalize); | 16072 AddFinalizer(str, ext_data, TwoByteString::Finalize); |
| 16067 Isolate::Current()->heap()->SetPeer(str.raw(), peer); | 16073 Isolate::Current()->heap()->SetPeer(str.raw(), peer); |
| 16068 } | 16074 } |
| 16069 | 16075 |
| 16070 | 16076 |
| 16071 void TwoByteString::Finalize(Dart_WeakPersistentHandle handle, void* peer) { | 16077 void TwoByteString::Finalize(Dart_Isolate isolate, |
| 16078 Dart_WeakPersistentHandle handle, |
| 16079 void* peer) { |
| 16072 delete reinterpret_cast<ExternalStringData<uint16_t>*>(peer); | 16080 delete reinterpret_cast<ExternalStringData<uint16_t>*>(peer); |
| 16073 DeleteWeakPersistentHandle(handle); | 16081 DeleteWeakPersistentHandle(isolate, handle); |
| 16074 } | 16082 } |
| 16075 | 16083 |
| 16076 | 16084 |
| 16077 RawExternalOneByteString* ExternalOneByteString::New( | 16085 RawExternalOneByteString* ExternalOneByteString::New( |
| 16078 const uint8_t* data, | 16086 const uint8_t* data, |
| 16079 intptr_t len, | 16087 intptr_t len, |
| 16080 void* peer, | 16088 void* peer, |
| 16081 Dart_PeerFinalizer callback, | 16089 Dart_PeerFinalizer callback, |
| 16082 Heap::Space space) { | 16090 Heap::Space space) { |
| 16083 ASSERT(Isolate::Current()->object_store()-> | 16091 ASSERT(Isolate::Current()->object_store()-> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 16098 result ^= raw; | 16106 result ^= raw; |
| 16099 result.SetLength(len); | 16107 result.SetLength(len); |
| 16100 result.SetHash(0); | 16108 result.SetHash(0); |
| 16101 SetExternalData(result, external_data); | 16109 SetExternalData(result, external_data); |
| 16102 } | 16110 } |
| 16103 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); | 16111 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); |
| 16104 return ExternalOneByteString::raw(result); | 16112 return ExternalOneByteString::raw(result); |
| 16105 } | 16113 } |
| 16106 | 16114 |
| 16107 | 16115 |
| 16108 void ExternalOneByteString::Finalize(Dart_WeakPersistentHandle handle, | 16116 void ExternalOneByteString::Finalize(Dart_Isolate isolate, |
| 16117 Dart_WeakPersistentHandle handle, |
| 16109 void* peer) { | 16118 void* peer) { |
| 16110 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); | 16119 delete reinterpret_cast<ExternalStringData<uint8_t>*>(peer); |
| 16111 DeleteWeakPersistentHandle(handle); | 16120 DeleteWeakPersistentHandle(isolate, handle); |
| 16112 } | 16121 } |
| 16113 | 16122 |
| 16114 | 16123 |
| 16115 RawExternalTwoByteString* ExternalTwoByteString::New( | 16124 RawExternalTwoByteString* ExternalTwoByteString::New( |
| 16116 const uint16_t* data, | 16125 const uint16_t* data, |
| 16117 intptr_t len, | 16126 intptr_t len, |
| 16118 void* peer, | 16127 void* peer, |
| 16119 Dart_PeerFinalizer callback, | 16128 Dart_PeerFinalizer callback, |
| 16120 Heap::Space space) { | 16129 Heap::Space space) { |
| 16121 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != | 16130 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != |
| (...skipping 14 matching lines...) Expand all Loading... |
| 16136 result ^= raw; | 16145 result ^= raw; |
| 16137 result.SetLength(len); | 16146 result.SetLength(len); |
| 16138 result.SetHash(0); | 16147 result.SetHash(0); |
| 16139 SetExternalData(result, external_data); | 16148 SetExternalData(result, external_data); |
| 16140 } | 16149 } |
| 16141 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); | 16150 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); |
| 16142 return ExternalTwoByteString::raw(result); | 16151 return ExternalTwoByteString::raw(result); |
| 16143 } | 16152 } |
| 16144 | 16153 |
| 16145 | 16154 |
| 16146 void ExternalTwoByteString::Finalize(Dart_WeakPersistentHandle handle, | 16155 void ExternalTwoByteString::Finalize(Dart_Isolate isolate, |
| 16156 Dart_WeakPersistentHandle handle, |
| 16147 void* peer) { | 16157 void* peer) { |
| 16148 delete reinterpret_cast<ExternalStringData<uint16_t>*>(peer); | 16158 delete reinterpret_cast<ExternalStringData<uint16_t>*>(peer); |
| 16149 DeleteWeakPersistentHandle(handle); | 16159 DeleteWeakPersistentHandle(isolate, handle); |
| 16150 } | 16160 } |
| 16151 | 16161 |
| 16152 | 16162 |
| 16153 RawBool* Bool::New(bool value) { | 16163 RawBool* Bool::New(bool value) { |
| 16154 ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); | 16164 ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); |
| 16155 Bool& result = Bool::Handle(); | 16165 Bool& result = Bool::Handle(); |
| 16156 { | 16166 { |
| 16157 // Since the two boolean instances are singletons we allocate them straight | 16167 // Since the two boolean instances are singletons we allocate them straight |
| 16158 // in the old generation. | 16168 // in the old generation. |
| 16159 RawObject* raw = Object::Allocate(Bool::kClassId, | 16169 RawObject* raw = Object::Allocate(Bool::kClassId, |
| (...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17473 return "_MirrorReference"; | 17483 return "_MirrorReference"; |
| 17474 } | 17484 } |
| 17475 | 17485 |
| 17476 | 17486 |
| 17477 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { | 17487 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { |
| 17478 Instance::PrintToJSONStream(stream, ref); | 17488 Instance::PrintToJSONStream(stream, ref); |
| 17479 } | 17489 } |
| 17480 | 17490 |
| 17481 | 17491 |
| 17482 } // namespace dart | 17492 } // namespace dart |
| OLD | NEW |