| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 5f9286e5f8503ea58ad098378942e5ba5f3e0f49..70e64a2285f474573009210382dc80eb51402391 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -378,7 +378,6 @@ template <class T> class Local : public Handle<T> {
|
| * The referee is kept alive by the local handle even when
|
| * the original handle is destroyed/disposed.
|
| */
|
| - V8_INLINE static Local<T> New(Handle<T> that);
|
| V8_INLINE static Local<T> New(Isolate* isolate, Handle<T> that);
|
| template<class M>
|
| V8_INLINE static Local<T> New(Isolate* isolate,
|
| @@ -783,16 +782,16 @@ class V8_EXPORT HandleScope {
|
| */
|
| static int NumberOfHandles();
|
|
|
| + private:
|
| /**
|
| * Creates a new handle with the given value.
|
| */
|
| - static internal::Object** CreateHandle(internal::Object* value);
|
| static internal::Object** CreateHandle(internal::Isolate* isolate,
|
| internal::Object* value);
|
| - // Faster version, uses HeapObject to obtain the current Isolate.
|
| - static internal::Object** CreateHandle(internal::HeapObject* value);
|
| + // Uses HeapObject to obtain the current Isolate.
|
| + static internal::Object** CreateHandle(internal::HeapObject* heap_object,
|
| + internal::Object* value);
|
|
|
| - private:
|
| V8_INLINE HandleScope() {}
|
| void Initialize(Isolate* isolate);
|
|
|
| @@ -830,6 +829,10 @@ class V8_EXPORT HandleScope {
|
|
|
| friend class ImplementationUtilities;
|
| friend class EscapableHandleScope;
|
| + template<class F> friend class Handle;
|
| + template<class F> friend class Local;
|
| + friend class Object;
|
| + friend class Context;
|
| };
|
|
|
|
|
| @@ -5569,19 +5572,6 @@ Local<T>::Local() : Handle<T>() { }
|
|
|
|
|
| template <class T>
|
| -Local<T> Local<T>::New(Handle<T> that) {
|
| - if (that.IsEmpty()) return Local<T>();
|
| - T* that_ptr = *that;
|
| - internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr);
|
| - if (internal::Internals::CanCastToHeapObject(that_ptr)) {
|
| - return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(
|
| - reinterpret_cast<internal::HeapObject*>(*p))));
|
| - }
|
| - return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(*p)));
|
| -}
|
| -
|
| -
|
| -template <class T>
|
| Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) {
|
| return New(isolate, that.val_);
|
| }
|
| @@ -6017,6 +6007,7 @@ void Template::Set(const char* name, v8::Handle<Data> value) {
|
| Local<Value> Object::GetInternalField(int index) {
|
| #ifndef V8_ENABLE_CHECKS
|
| typedef internal::Object O;
|
| + typedef internal::HeapObject HO;
|
| typedef internal::Internals I;
|
| O* obj = *reinterpret_cast<O**>(this);
|
| // Fast path: If the object is a plain JSObject, which is the common case, we
|
| @@ -6024,7 +6015,7 @@ Local<Value> Object::GetInternalField(int index) {
|
| if (I::GetInstanceType(obj) == I::kJSObjectType) {
|
| int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index);
|
| O* value = I::ReadField<O*>(obj, offset);
|
| - O** result = HandleScope::CreateHandle(value);
|
| + O** result = HandleScope::CreateHandle(reinterpret_cast<HO*>(obj), value);
|
| return Local<Value>(reinterpret_cast<Value*>(result));
|
| }
|
| #endif
|
| @@ -6476,8 +6467,11 @@ void* Isolate::GetData() {
|
| Local<Value> Context::GetEmbedderData(int index) {
|
| #ifndef V8_ENABLE_CHECKS
|
| typedef internal::Object O;
|
| + typedef internal::HeapObject HO;
|
| typedef internal::Internals I;
|
| - O** result = HandleScope::CreateHandle(I::ReadEmbedderData<O*>(this, index));
|
| + HO* context = *reinterpret_cast<HO**>(this);
|
| + O** result =
|
| + HandleScope::CreateHandle(context, I::ReadEmbedderData<O*>(this, index));
|
| return Local<Value>(reinterpret_cast<Value*>(result));
|
| #else
|
| return SlowGetEmbedderData(index);
|
|
|