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 |