| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 2643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2654 ENTER_V8(isolate); | 2654 ENTER_V8(isolate); |
| 2655 i::HandleScope scope(isolate); | 2655 i::HandleScope scope(isolate); |
| 2656 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); | 2656 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); |
| 2657 i::Handle<i::Object> value = Utils::OpenHandle(*v8_value); | 2657 i::Handle<i::Object> value = Utils::OpenHandle(*v8_value); |
| 2658 if (!key->IsJSReceiver() && !key->IsSymbol()) { | 2658 if (!key->IsJSReceiver() && !key->IsSymbol()) { |
| 2659 DCHECK(false); | 2659 DCHECK(false); |
| 2660 return; | 2660 return; |
| 2661 } | 2661 } |
| 2662 i::Handle<i::ObjectHashTable> table( | 2662 i::Handle<i::ObjectHashTable> table( |
| 2663 i::ObjectHashTable::cast(weak_collection->table())); | 2663 i::ObjectHashTable::cast(weak_collection->table())); |
| 2664 if (!table->IsKey(*key)) { | 2664 if (!table->IsKey(isolate, *key)) { |
| 2665 DCHECK(false); | 2665 DCHECK(false); |
| 2666 return; | 2666 return; |
| 2667 } | 2667 } |
| 2668 int32_t hash = i::Object::GetOrCreateHash(isolate, key)->value(); | 2668 int32_t hash = i::Object::GetOrCreateHash(isolate, key)->value(); |
| 2669 i::JSWeakCollection::Set(weak_collection, key, value, hash); | 2669 i::JSWeakCollection::Set(weak_collection, key, value, hash); |
| 2670 } | 2670 } |
| 2671 | 2671 |
| 2672 | 2672 |
| 2673 Local<Value> NativeWeakMap::Get(Local<Value> v8_key) { | 2673 Local<Value> NativeWeakMap::Get(Local<Value> v8_key) { |
| 2674 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); | 2674 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); |
| 2675 i::Isolate* isolate = weak_collection->GetIsolate(); | 2675 i::Isolate* isolate = weak_collection->GetIsolate(); |
| 2676 ENTER_V8(isolate); | 2676 ENTER_V8(isolate); |
| 2677 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); | 2677 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); |
| 2678 if (!key->IsJSReceiver() && !key->IsSymbol()) { | 2678 if (!key->IsJSReceiver() && !key->IsSymbol()) { |
| 2679 DCHECK(false); | 2679 DCHECK(false); |
| 2680 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 2680 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 2681 } | 2681 } |
| 2682 i::Handle<i::ObjectHashTable> table( | 2682 i::Handle<i::ObjectHashTable> table( |
| 2683 i::ObjectHashTable::cast(weak_collection->table())); | 2683 i::ObjectHashTable::cast(weak_collection->table())); |
| 2684 if (!table->IsKey(*key)) { | 2684 if (!table->IsKey(isolate, *key)) { |
| 2685 DCHECK(false); | 2685 DCHECK(false); |
| 2686 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 2686 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 2687 } | 2687 } |
| 2688 i::Handle<i::Object> lookup(table->Lookup(key), isolate); | 2688 i::Handle<i::Object> lookup(table->Lookup(key), isolate); |
| 2689 if (lookup->IsTheHole(isolate)) | 2689 if (lookup->IsTheHole(isolate)) |
| 2690 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); | 2690 return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); |
| 2691 return Utils::ToLocal(lookup); | 2691 return Utils::ToLocal(lookup); |
| 2692 } | 2692 } |
| 2693 | 2693 |
| 2694 | 2694 |
| 2695 bool NativeWeakMap::Has(Local<Value> v8_key) { | 2695 bool NativeWeakMap::Has(Local<Value> v8_key) { |
| 2696 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); | 2696 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); |
| 2697 i::Isolate* isolate = weak_collection->GetIsolate(); | 2697 i::Isolate* isolate = weak_collection->GetIsolate(); |
| 2698 ENTER_V8(isolate); | 2698 ENTER_V8(isolate); |
| 2699 i::HandleScope scope(isolate); | 2699 i::HandleScope scope(isolate); |
| 2700 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); | 2700 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); |
| 2701 if (!key->IsJSReceiver() && !key->IsSymbol()) { | 2701 if (!key->IsJSReceiver() && !key->IsSymbol()) { |
| 2702 DCHECK(false); | 2702 DCHECK(false); |
| 2703 return false; | 2703 return false; |
| 2704 } | 2704 } |
| 2705 i::Handle<i::ObjectHashTable> table( | 2705 i::Handle<i::ObjectHashTable> table( |
| 2706 i::ObjectHashTable::cast(weak_collection->table())); | 2706 i::ObjectHashTable::cast(weak_collection->table())); |
| 2707 if (!table->IsKey(*key)) { | 2707 if (!table->IsKey(isolate, *key)) { |
| 2708 DCHECK(false); | 2708 DCHECK(false); |
| 2709 return false; | 2709 return false; |
| 2710 } | 2710 } |
| 2711 i::Handle<i::Object> lookup(table->Lookup(key), isolate); | 2711 i::Handle<i::Object> lookup(table->Lookup(key), isolate); |
| 2712 return !lookup->IsTheHole(isolate); | 2712 return !lookup->IsTheHole(isolate); |
| 2713 } | 2713 } |
| 2714 | 2714 |
| 2715 | 2715 |
| 2716 bool NativeWeakMap::Delete(Local<Value> v8_key) { | 2716 bool NativeWeakMap::Delete(Local<Value> v8_key) { |
| 2717 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); | 2717 i::Handle<i::JSWeakMap> weak_collection = Utils::OpenHandle(this); |
| 2718 i::Isolate* isolate = weak_collection->GetIsolate(); | 2718 i::Isolate* isolate = weak_collection->GetIsolate(); |
| 2719 ENTER_V8(isolate); | 2719 ENTER_V8(isolate); |
| 2720 i::HandleScope scope(isolate); | 2720 i::HandleScope scope(isolate); |
| 2721 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); | 2721 i::Handle<i::Object> key = Utils::OpenHandle(*v8_key); |
| 2722 if (!key->IsJSReceiver() && !key->IsSymbol()) { | 2722 if (!key->IsJSReceiver() && !key->IsSymbol()) { |
| 2723 DCHECK(false); | 2723 DCHECK(false); |
| 2724 return false; | 2724 return false; |
| 2725 } | 2725 } |
| 2726 i::Handle<i::ObjectHashTable> table( | 2726 i::Handle<i::ObjectHashTable> table( |
| 2727 i::ObjectHashTable::cast(weak_collection->table())); | 2727 i::ObjectHashTable::cast(weak_collection->table())); |
| 2728 if (!table->IsKey(*key)) { | 2728 if (!table->IsKey(isolate, *key)) { |
| 2729 DCHECK(false); | 2729 DCHECK(false); |
| 2730 return false; | 2730 return false; |
| 2731 } | 2731 } |
| 2732 int32_t hash = i::Object::GetOrCreateHash(isolate, key)->value(); | 2732 int32_t hash = i::Object::GetOrCreateHash(isolate, key)->value(); |
| 2733 return i::JSWeakCollection::Delete(weak_collection, key, hash); | 2733 return i::JSWeakCollection::Delete(weak_collection, key, hash); |
| 2734 } | 2734 } |
| 2735 | 2735 |
| 2736 | 2736 |
| 2737 // --- J S O N --- | 2737 // --- J S O N --- |
| 2738 | 2738 |
| (...skipping 6077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8816 Address callback_address = | 8816 Address callback_address = |
| 8817 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8817 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8818 VMState<EXTERNAL> state(isolate); | 8818 VMState<EXTERNAL> state(isolate); |
| 8819 ExternalCallbackScope call_scope(isolate, callback_address); | 8819 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8820 callback(info); | 8820 callback(info); |
| 8821 } | 8821 } |
| 8822 | 8822 |
| 8823 | 8823 |
| 8824 } // namespace internal | 8824 } // namespace internal |
| 8825 } // namespace v8 | 8825 } // namespace v8 |
| OLD | NEW |