From e7ba4791e5d4c6c185fe68809f1369b4674403b1 Mon Sep 17 00:00:00 2001 From: dcarney Date: Fri, 10 Apr 2015 06:40:06 -0700 Subject: [PATCH] simplify GlobalValueMap calls to DisposeWeak BUG= Review URL: https://codereview.chromium.org/1074153002 Cr-Commit-Position: refs/heads/master@{#27750} --- include/v8-util.h | 21 ++++++++++++--------- test/cctest/test-api.cc | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/include/v8-util.h b/include/v8-util.h index b01d527..8199016 100644 --- a/include/v8-util.h +++ b/include/v8-util.h @@ -134,9 +134,8 @@ class DefaultGlobalMapTraits : public StdMapTraits { } static void DisposeCallbackData(WeakCallbackInfoType* data) {} static void Dispose(Isolate* isolate, Global value, K key) {} - static void DisposeWeak(Isolate* isolate, - const WeakCallbackInfo& data, - K key) {} + // This is a second pass callback, so SetSecondPassCallback cannot be called. + static void DisposeWeak(const WeakCallbackInfo& data) {} private: template @@ -453,7 +452,7 @@ class GlobalValueMap : public PersistentValueMapBase { : WeakCallbackType::kParameter; Local value(Local::New(this->isolate(), *persistent)); persistent->template SetWeak( - Traits::WeakCallbackParameter(this, key, value), WeakCallback, + Traits::WeakCallbackParameter(this, key, value), FirstWeakCallback, callback_type); } PersistentContainerValue old_value = @@ -472,16 +471,20 @@ class GlobalValueMap : public PersistentValueMapBase { } private: - static void WeakCallback( + static void FirstWeakCallback( const WeakCallbackInfo& data) { if (Traits::kCallbackType != kNotWeak) { - GlobalValueMap* persistentValueMap = - Traits::MapFromWeakCallbackInfo(data); + auto map = Traits::MapFromWeakCallbackInfo(data); K key = Traits::KeyFromWeakCallbackInfo(data); - persistentValueMap->RemoveWeak(key); - Traits::DisposeWeak(data.GetIsolate(), data, key); + map->RemoveWeak(key); + data.SetSecondPassCallback(SecondWeakCallback); } } + + static void SecondWeakCallback( + const WeakCallbackInfo& data) { + Traits::DisposeWeak(data); + } }; diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index e01e8f1..f7cbb82 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -3353,8 +3353,8 @@ class PhantomStdMapTraits : public v8::StdMapTraits { v8::Object::GetAlignedPointerFromInternalField(value, 0)); } static void DisposeWeak( - v8::Isolate* isolate, - const v8::WeakCallbackInfo& info, K key) { + const v8::WeakCallbackInfo& info) { + K key = KeyFromWeakCallbackInfo(info); CHECK_EQ(IntKeyToVoidPointer(key), info.GetInternalField(0)); DisposeCallbackData(info.GetParameter()); } -- 2.7.4