@@ -333,58 +333,43 @@ inline Environment* Environment::GetCurrent(
333333
334334template <typename T, typename U>
335335inline T* Environment::GetBindingData (const v8::PropertyCallbackInfo<U>& info) {
336- return GetBindingData<T>(info.GetIsolate ()->GetCurrentContext (), info. Data () );
336+ return GetBindingData<T>(info.GetIsolate ()->GetCurrentContext ());
337337}
338338
339339template <typename T>
340340inline T* Environment::GetBindingData (
341341 const v8::FunctionCallbackInfo<v8::Value>& info) {
342- return GetBindingData<T>(info.GetIsolate ()->GetCurrentContext (), info. Data () );
342+ return GetBindingData<T>(info.GetIsolate ()->GetCurrentContext ());
343343}
344344
345345template <typename T>
346- inline T* Environment::GetBindingData (v8::Local<v8::Context> context,
347- v8::Local<v8::Value> val) {
348- DCHECK (val->IsUint32 ());
349- uint32_t index = val.As <v8::Uint32>()->Value ();
350- BindingDataList* list = static_cast <BindingDataList*>(
346+ inline T* Environment::GetBindingData (v8::Local<v8::Context> context) {
347+ BindingDataStore* list = static_cast <BindingDataStore*>(
351348 context->GetAlignedPointerFromEmbedderData (
352349 ContextEmbedderIndex::kBindingListIndex ));
353350 DCHECK_NOT_NULL (list);
354- DCHECK_GT (list->size (), index);
355- T* result = static_cast <T*>(list->at (index).get ());
351+ auto it = list->find (T::binding_data_name);
352+ DCHECK_NE (it, list->end ());
353+ T* result = static_cast <T*>(it->second .get ());
356354 DCHECK_NOT_NULL (result);
357355 DCHECK_EQ (result->env (), GetCurrent (context));
358356 return result;
359357}
360358
361359template <typename T>
362- inline std::pair<T*, uint32_t > Environment::NewBindingData (
360+ inline T* Environment::AddBindingData (
363361 v8::Local<v8::Context> context,
364362 v8::Local<v8::Object> target) {
365363 DCHECK_EQ (GetCurrent (context), this );
366364 // This won't compile if T is not a BaseObject subclass.
367365 BaseObjectPtr<T> item = MakeDetachedBaseObject<T>(this , target);
368- BindingDataList * list = static_cast <BindingDataList *>(
366+ BindingDataStore * list = static_cast <BindingDataStore *>(
369367 context->GetAlignedPointerFromEmbedderData (
370368 ContextEmbedderIndex::kBindingListIndex ));
371369 DCHECK_NOT_NULL (list);
372- size_t index = list->size ();
373- list->emplace_back (item);
374- return std::make_pair (item.get (), index);
375- }
376-
377- template <typename T>
378- Environment::BindingScope<T>::BindingScope(v8::Local<v8::Context> context,
379- v8::Local<v8::Object> target)
380- : env(Environment::GetCurrent(context)) {
381- std::tie (data, env->current_callback_data_ ) =
382- env->NewBindingData <T>(context, target);
383- }
384-
385- template <typename T>
386- Environment::BindingScope<T>::~BindingScope () {
387- env->current_callback_data_ = env->default_callback_data_ ;
370+ auto result = list->emplace (T::binding_data_name, item);
371+ CHECK (result.second );
372+ return item.get ();
388373}
389374
390375inline Environment* Environment::GetThreadLocalEnv () {
@@ -1103,8 +1088,7 @@ inline v8::Local<v8::FunctionTemplate>
11031088 v8::Local<v8::Signature> signature,
11041089 v8::ConstructorBehavior behavior,
11051090 v8::SideEffectType side_effect_type) {
1106- v8::Local<v8::Value> external = current_callback_data ();
1107- return v8::FunctionTemplate::New (isolate (), callback, external,
1091+ return v8::FunctionTemplate::New (isolate (), callback, v8::Local<v8::Value>(),
11081092 signature, 0 , behavior, side_effect_type);
11091093}
11101094
@@ -1300,14 +1284,6 @@ v8::Local<v8::Context> Environment::context() const {
13001284 return PersistentToLocal::Strong (context_);
13011285}
13021286
1303- v8::Local<v8::Value> Environment::as_callback_data () const {
1304- return v8::Integer::NewFromUnsigned (isolate (), default_callback_data_);
1305- }
1306-
1307- v8::Local<v8::Value> Environment::current_callback_data () const {
1308- return v8::Integer::NewFromUnsigned (isolate (), current_callback_data_);
1309- }
1310-
13111287} // namespace node
13121288
13131289// These two files depend on each other. Including base_object-inl.h after this
0 commit comments