| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index ee49ca4349d804a15020c98d5c573012d35f2e7e..b93a90a06ee1f3526da91355f7f42c5e4e3b62e2 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -123,6 +123,7 @@ class ImplementationUtilities;
|
| class Int32;
|
| class Integer;
|
| class Isolate;
|
| +class LocalContext;
|
| class Number;
|
| class NumberObject;
|
| class Object;
|
| @@ -205,6 +206,9 @@ typedef void (*NearDeathCallback)(Isolate* isolate,
|
| *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \
|
| }
|
|
|
| +
|
| +#define V8_USE_UNSAFE_HANDLES
|
| +
|
| /**
|
| * An object reference managed by the v8 garbage collector.
|
| *
|
| @@ -237,10 +241,12 @@ template <class T> class Handle {
|
| */
|
| V8_INLINE(Handle()) : val_(0) {}
|
|
|
| +#ifdef V8_USE_UNSAFE_HANDLES
|
| /**
|
| * Creates a new handle for the specified value.
|
| */
|
| V8_INLINE(explicit Handle(T* val)) : val_(val) {}
|
| +#endif
|
|
|
| /**
|
| * Creates a handle for the contents of the specified handle. This
|
| @@ -282,7 +288,7 @@ template <class T> class Handle {
|
| * to which they refer are identical.
|
| * The handles' references are not checked.
|
| */
|
| - template <class S> V8_INLINE(bool operator==(Handle<S> that) const) {
|
| + template <class S> V8_INLINE(bool operator==(const Handle<S> that) const) {
|
| internal::Object** a = reinterpret_cast<internal::Object**>(**this);
|
| internal::Object** b = reinterpret_cast<internal::Object**>(*that);
|
| if (a == 0) return b == 0;
|
| @@ -290,6 +296,17 @@ template <class T> class Handle {
|
| return *a == *b;
|
| }
|
|
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + template <class S> V8_INLINE(
|
| + bool operator==(const Persistent<S>& that) const) {
|
| + internal::Object** a = reinterpret_cast<internal::Object**>(**this);
|
| + internal::Object** b = reinterpret_cast<internal::Object**>(*that);
|
| + if (a == 0) return b == 0;
|
| + if (b == 0) return false;
|
| + return *a == *b;
|
| + }
|
| +#endif
|
| +
|
| /**
|
| * Checks whether two handles are different.
|
| * Returns true if only one of the handles is empty, or if
|
| @@ -313,7 +330,46 @@ template <class T> class Handle {
|
| return Handle<S>::Cast(*this);
|
| }
|
|
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + V8_INLINE(static Handle<T> New(Isolate* isolate, Handle<T> that)) {
|
| + return New(isolate, that.val_);
|
| + }
|
| + // TODO(dcarney): remove before cutover
|
| + V8_INLINE(static Handle<T> New(Isolate* isolate, const Persistent<T>& that)) {
|
| + return New(isolate, that.val_);
|
| + }
|
| +
|
| +#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR
|
| +
|
| private:
|
| +#endif
|
| + /**
|
| + * Creates a new handle for the specified value.
|
| + */
|
| + V8_INLINE(explicit Handle(T* val)) : val_(val) {}
|
| +#endif
|
| +
|
| + private:
|
| + template<class F>
|
| + friend class Persistent;
|
| + template<class F>
|
| + friend class Local;
|
| + friend class Arguments;
|
| + friend class String;
|
| + friend class Object;
|
| + friend class AccessorInfo;
|
| + friend Handle<Primitive> Undefined(Isolate* isolate);
|
| + friend Handle<Primitive> Null(Isolate* isolate);
|
| + friend Handle<Boolean> True(Isolate* isolate);
|
| + friend Handle<Boolean> False(Isolate* isolate);
|
| + friend class Context;
|
| + friend class InternalHandleHelper;
|
| + friend class LocalContext;
|
| +
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + V8_INLINE(static Handle<T> New(Isolate* isolate, T* that));
|
| +#endif
|
| +
|
| T* val_;
|
| };
|
|
|
| @@ -325,6 +381,7 @@ template <class T> class Handle {
|
| * handle scope are destroyed when the handle scope is destroyed. Hence it
|
| * is not necessary to explicitly deallocate local handles.
|
| */
|
| +// TODO(dcarney): deprecate entire class
|
| template <class T> class Local : public Handle<T> {
|
| public:
|
| V8_INLINE(Local());
|
| @@ -337,7 +394,12 @@ template <class T> class Local : public Handle<T> {
|
| */
|
| TYPE_CHECK(T, S);
|
| }
|
| +
|
| +
|
| +#ifdef V8_USE_UNSAFE_HANDLES
|
| template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { }
|
| +#endif
|
| +
|
| template <class S> V8_INLINE(static Local<T> Cast(Local<S> that)) {
|
| #ifdef V8_ENABLE_CHECKS
|
| // If we're going to perform the type check then we have to check
|
| @@ -346,6 +408,12 @@ template <class T> class Local : public Handle<T> {
|
| #endif
|
| return Local<T>(T::Cast(*that));
|
| }
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + template <class S> V8_INLINE(Local(Handle<S> that))
|
| + : Handle<T>(reinterpret_cast<T*>(*that)) {
|
| + TYPE_CHECK(T, S);
|
| + }
|
| +#endif
|
|
|
| template <class S> V8_INLINE(Local<S> As()) {
|
| return Local<S>::Cast(*this);
|
| @@ -358,8 +426,32 @@ template <class T> class Local : public Handle<T> {
|
| */
|
| V8_INLINE(static Local<T> New(Handle<T> that));
|
| V8_INLINE(static Local<T> New(Isolate* isolate, Handle<T> that));
|
| -};
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + // TODO(dcarney): remove before cutover
|
| + V8_INLINE(static Local<T> New(Isolate* isolate, const Persistent<T>& that));
|
|
|
| +#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR
|
| +
|
| + private:
|
| +#endif
|
| + template <class S> V8_INLINE(Local(S* that) : Handle<T>(that)) { }
|
| +#endif
|
| +
|
| + private:
|
| + template<class F>
|
| + friend class Persistent;
|
| + template<class F>
|
| + friend class Handle;
|
| + friend class Arguments;
|
| + friend class String;
|
| + friend class Object;
|
| + friend class AccessorInfo;
|
| + friend class Context;
|
| + friend class InternalHandleHelper;
|
| + friend class LocalContext;
|
| +
|
| + V8_INLINE(static Local<T> New(Isolate* isolate, T* that));
|
| +};
|
|
|
| /**
|
| * An object reference that is independent of any handle scope. Where
|
| @@ -378,13 +470,38 @@ template <class T> class Local : public Handle<T> {
|
| * different storage cells but rather two references to the same
|
| * storage cell.
|
| */
|
| -template <class T> class Persistent : public Handle<T> {
|
| +template <class T> class Persistent // NOLINT
|
| +#ifdef V8_USE_UNSAFE_HANDLES
|
| + : public Handle<T> {
|
| +#else
|
| + { // NOLINT
|
| +#endif
|
| public:
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + V8_INLINE(Persistent()) : val_(0) { }
|
| + V8_INLINE(~Persistent()) {
|
| + // TODO(dcarney): add this back before cutover.
|
| + // Dispose();
|
| + }
|
| + V8_INLINE(bool IsEmpty() const) { return val_ == 0; }
|
| + // TODO(dcarney): remove somehow before cutover
|
| + // The handle should either be 0, or a pointer to a live cell.
|
| + V8_INLINE(void Clear()) { val_ = 0; }
|
| +
|
| + /**
|
| + * A constructor that creates a new global cell pointing to that. In contrast
|
| + * to the copy constructor, this creates a new persistent handle which needs
|
| + * to be separately disposed.
|
| + */
|
| + template <class S> V8_INLINE(Persistent(Isolate* isolate, Handle<S> that))
|
| + : val_(*New(isolate, that)) { }
|
| +
|
| +#else
|
| /**
|
| * Creates an empty persistent handle that doesn't point to any
|
| * storage cell.
|
| */
|
| - V8_INLINE(Persistent());
|
| + V8_INLINE(Persistent()) : Handle<T>() { }
|
|
|
| /**
|
| * Creates a persistent handle for the same storage cell as the
|
| @@ -424,6 +541,8 @@ template <class T> class Persistent : public Handle<T> {
|
| template <class S> explicit V8_INLINE(Persistent(Handle<S> that))
|
| : Handle<T>(*that) { }
|
|
|
| +#endif
|
| +
|
| template <class S> V8_INLINE(static Persistent<T> Cast(Persistent<S> that)) {
|
| #ifdef V8_ENABLE_CHECKS
|
| // If we're going to perform the type check then we have to check
|
| @@ -437,16 +556,38 @@ template <class T> class Persistent : public Handle<T> {
|
| return Persistent<S>::Cast(*this);
|
| }
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| V8_DEPRECATED(static Persistent<T> New(Handle<T> that));
|
|
|
| /**
|
| * Creates a new persistent handle for an existing local or persistent handle.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(static Persistent<T> New(Isolate* isolate, Handle<T> that));
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + // TODO(dcarney): remove before cutover
|
| + V8_INLINE(static Persistent<T> New(Isolate* isolate, Persistent<T> that));
|
| +#endif
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void Dispose());
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + template <class S> V8_INLINE(
|
| + bool operator==(const Persistent<S>& that) const) {
|
| + internal::Object** a = reinterpret_cast<internal::Object**>(**this);
|
| + internal::Object** b = reinterpret_cast<internal::Object**>(*that);
|
| + if (a == 0) return b == 0;
|
| + if (b == 0) return false;
|
| + return *a == *b;
|
| + }
|
| +
|
| + template <class S> V8_INLINE(bool operator==(const Handle<S> that) const) {
|
| + internal::Object** a = reinterpret_cast<internal::Object**>(**this);
|
| + internal::Object** b = reinterpret_cast<internal::Object**>(*that);
|
| + if (a == 0) return b == 0;
|
| + if (b == 0) return false;
|
| + return *a == *b;
|
| + }
|
| +#endif
|
| +
|
| + V8_INLINE(void Dispose());
|
|
|
| /**
|
| * Releases the storage cell referenced by this persistent handle.
|
| @@ -454,10 +595,10 @@ template <class T> class Persistent : public Handle<T> {
|
| * This handle's reference, and any other references to the storage
|
| * cell remain and IsEmpty will still return false.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void Dispose(Isolate* isolate));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void MakeWeak(void* parameters,
|
| + V8_INLINE(void MakeWeak(void* parameters,
|
| WeakReferenceCallback callback));
|
|
|
| /**
|
| @@ -466,18 +607,17 @@ template <class T> class Persistent : public Handle<T> {
|
| * callback to the given V8::NearDeathCallback function, passing
|
| * it the object reference and the given parameters.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void MakeWeak(Isolate* isolate,
|
| void* parameters,
|
| NearDeathCallback callback));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void ClearWeak());
|
| + V8_INLINE(void ClearWeak());
|
|
|
| - /** Clears the weak reference to this object. */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void ClearWeak(Isolate* isolate));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void MarkIndependent());
|
| + V8_INLINE(void MarkIndependent());
|
|
|
| /**
|
| * Marks the reference to this object independent. Garbage collector is free
|
| @@ -485,10 +625,10 @@ template <class T> class Persistent : public Handle<T> {
|
| * independent handle should not assume that it will be preceded by a global
|
| * GC prologue callback or followed by a global GC epilogue callback.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void MarkIndependent(Isolate* isolate));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void MarkPartiallyDependent());
|
| + V8_INLINE(void MarkPartiallyDependent());
|
|
|
| /**
|
| * Marks the reference to this object partially dependent. Partially dependent
|
| @@ -498,47 +638,98 @@ template <class T> class Persistent : public Handle<T> {
|
| * external dependencies. This mark is automatically cleared after each
|
| * garbage collection.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void MarkPartiallyDependent(Isolate* isolate));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(bool IsIndependent() const);
|
| + V8_INLINE(bool IsIndependent() const);
|
|
|
| - /** Returns true if this handle was previously marked as independent. */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(bool IsIndependent(Isolate* isolate) const);
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(bool IsNearDeath() const);
|
| + V8_INLINE(bool IsNearDeath() const);
|
|
|
| /** Checks if the handle holds the only reference to an object. */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(bool IsNearDeath(Isolate* isolate) const);
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(bool IsWeak() const);
|
| + V8_INLINE(bool IsWeak() const);
|
|
|
| /** Returns true if the handle's reference is weak. */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(bool IsWeak(Isolate* isolate) const);
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(void SetWrapperClassId(uint16_t class_id));
|
| + V8_INLINE(void SetWrapperClassId(uint16_t class_id));
|
|
|
| /**
|
| * Assigns a wrapper class ID to the handle. See RetainedObjectInfo interface
|
| * description in v8-profiler.h for details.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(void SetWrapperClassId(Isolate* isolate, uint16_t class_id));
|
|
|
| - /** Deprecated. Use Isolate version instead. */
|
| - V8_DEPRECATED(uint16_t WrapperClassId() const);
|
| + V8_INLINE(uint16_t WrapperClassId() const);
|
|
|
| /**
|
| * Returns the class ID previously assigned to this handle or 0 if no class ID
|
| * was previously assigned.
|
| */
|
| + // TODO(dcarney): remove before cutover
|
| V8_INLINE(uint16_t WrapperClassId(Isolate* isolate) const);
|
|
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| +
|
| +#ifndef V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT
|
| +
|
| + private:
|
| +#endif
|
| + // TODO(dcarney): make unlinkable before cutover
|
| + V8_INLINE(Persistent(const Persistent& that)) : val_(that.val_) {}
|
| + // TODO(dcarney): make unlinkable before cutover
|
| + V8_INLINE(Persistent& operator=(const Persistent& that)) { // NOLINT
|
| + this->val_ = that.val_;
|
| + return *this;
|
| + }
|
| +
|
| + public:
|
| +#ifndef V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR
|
| +
|
| + private:
|
| +#endif
|
| + // TODO(dcarney): remove before cutover
|
| + template <class S> V8_INLINE(Persistent(S* that)) : val_(that) { }
|
| + // TODO(dcarney): remove before cutover
|
| + template <class S> V8_INLINE(Persistent(Persistent<S> that))
|
| + : val_(*that) {
|
| + TYPE_CHECK(T, S);
|
| + }
|
| + // TODO(dcarney): remove before cutover
|
| + V8_INLINE(T* operator*() const) { return val_; }
|
| + public:
|
| +#ifndef V8_ALLOW_ACCESS_TO_PERSISTENT_ARROW
|
| +
|
| + private:
|
| +#endif
|
| + // TODO(dcarney): remove before cutover
|
| + V8_INLINE(T* operator->() const) { return val_; }
|
| + public:
|
| +#endif
|
| +
|
| private:
|
| + template<class F>
|
| + friend class Handle;
|
| + template<class F>
|
| + friend class Local;
|
| friend class ImplementationUtilities;
|
| friend class ObjectTemplate;
|
| + friend class Context;
|
| + friend class InternalHandleHelper;
|
| + friend class LocalContext;
|
| +
|
| + V8_INLINE(static Persistent<T> New(Isolate* isolate, T* that));
|
| +
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + T* val_;
|
| +#endif
|
| };
|
|
|
|
|
| @@ -4420,7 +4611,16 @@ class V8EXPORT Context {
|
| explicit V8_INLINE(Scope(Handle<Context> context)) : context_(context) {
|
| context_->Enter();
|
| }
|
| + V8_INLINE(Scope(Isolate* isolate, Persistent<Context>& context)) // NOLINT
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + : context_(Handle<Context>::New(isolate, context)) {
|
| +#else
|
| + : context_(Local<Context>::New(isolate, context)) {
|
| +#endif
|
| + context_->Enter();
|
| + }
|
| V8_INLINE(~Scope()) { context_->Exit(); }
|
| +
|
| private:
|
| Handle<Context> context_;
|
| };
|
| @@ -4859,8 +5059,30 @@ Local<T> Local<T>::New(Handle<T> that) {
|
|
|
| template <class T>
|
| Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) {
|
| - if (that.IsEmpty()) return Local<T>();
|
| - T* that_ptr = *that;
|
| + return New(isolate, that.val_);
|
| +}
|
| +
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| +template <class T>
|
| +Local<T> Local<T>::New(Isolate* isolate, const Persistent<T>& that) {
|
| + return New(isolate, that.val_);
|
| +}
|
| +
|
| +template <class T>
|
| +Handle<T> Handle<T>::New(Isolate* isolate, T* that) {
|
| + if (that == NULL) return Handle<T>();
|
| + T* that_ptr = that;
|
| + internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr);
|
| + return Handle<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(
|
| + reinterpret_cast<internal::Isolate*>(isolate), *p)));
|
| +}
|
| +#endif
|
| +
|
| +
|
| +template <class T>
|
| +Local<T> Local<T>::New(Isolate* isolate, T* that) {
|
| + if (that == NULL) return Local<T>();
|
| + T* that_ptr = that;
|
| internal::Object** p = reinterpret_cast<internal::Object**>(that_ptr);
|
| return Local<T>(reinterpret_cast<T*>(HandleScope::CreateHandle(
|
| reinterpret_cast<internal::Isolate*>(isolate), *p)));
|
| @@ -4869,14 +5091,26 @@ Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) {
|
|
|
| template <class T>
|
| Persistent<T> Persistent<T>::New(Handle<T> that) {
|
| - return New(Isolate::GetCurrent(), that);
|
| + return New(Isolate::GetCurrent(), that.val_);
|
| }
|
|
|
|
|
| template <class T>
|
| Persistent<T> Persistent<T>::New(Isolate* isolate, Handle<T> that) {
|
| - if (that.IsEmpty()) return Persistent<T>();
|
| - internal::Object** p = reinterpret_cast<internal::Object**>(*that);
|
| + return New(Isolate::GetCurrent(), that.val_);
|
| +}
|
| +
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| +template <class T>
|
| +Persistent<T> Persistent<T>::New(Isolate* isolate, Persistent<T> that) {
|
| + return New(Isolate::GetCurrent(), that.val_);
|
| +}
|
| +#endif
|
| +
|
| +template <class T>
|
| +Persistent<T> Persistent<T>::New(Isolate* isolate, T* that) {
|
| + if (that == NULL) return Persistent<T>();
|
| + internal::Object** p = reinterpret_cast<internal::Object**>(that);
|
| return Persistent<T>(reinterpret_cast<T*>(
|
| V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate),
|
| p)));
|
| @@ -4894,7 +5128,7 @@ bool Persistent<T>::IsIndependent(Isolate* isolate) const {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return false;
|
| if (!I::IsInitialized(isolate)) return false;
|
| - return I::GetNodeFlag(reinterpret_cast<internal::Object**>(**this),
|
| + return I::GetNodeFlag(reinterpret_cast<internal::Object**>(this->val_),
|
| I::kNodeIsIndependentShift);
|
| }
|
|
|
| @@ -4910,7 +5144,7 @@ bool Persistent<T>::IsNearDeath(Isolate* isolate) const {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return false;
|
| if (!I::IsInitialized(isolate)) return false;
|
| - return I::GetNodeState(reinterpret_cast<internal::Object**>(**this)) ==
|
| + return I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)) ==
|
| I::kNodeStateIsNearDeathValue;
|
| }
|
|
|
| @@ -4926,7 +5160,7 @@ bool Persistent<T>::IsWeak(Isolate* isolate) const {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return false;
|
| if (!I::IsInitialized(isolate)) return false;
|
| - return I::GetNodeState(reinterpret_cast<internal::Object**>(**this)) ==
|
| + return I::GetNodeState(reinterpret_cast<internal::Object**>(this->val_)) ==
|
| I::kNodeStateIsWeakValue;
|
| }
|
|
|
| @@ -4941,18 +5175,18 @@ template <class T>
|
| void Persistent<T>::Dispose(Isolate* isolate) {
|
| if (this->IsEmpty()) return;
|
| V8::DisposeGlobal(reinterpret_cast<internal::Isolate*>(isolate),
|
| - reinterpret_cast<internal::Object**>(**this));
|
| + reinterpret_cast<internal::Object**>(this->val_));
|
| +#ifndef V8_USE_UNSAFE_HANDLES
|
| + val_ = 0;
|
| +#endif
|
| }
|
|
|
|
|
| template <class T>
|
| -Persistent<T>::Persistent() : Handle<T>() { }
|
| -
|
| -template <class T>
|
| void Persistent<T>::MakeWeak(void* parameters, WeakReferenceCallback callback) {
|
| Isolate* isolate = Isolate::GetCurrent();
|
| V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate),
|
| - reinterpret_cast<internal::Object**>(**this),
|
| + reinterpret_cast<internal::Object**>(this->val_),
|
| parameters,
|
| callback,
|
| NULL);
|
| @@ -4963,7 +5197,7 @@ void Persistent<T>::MakeWeak(Isolate* isolate,
|
| void* parameters,
|
| NearDeathCallback callback) {
|
| V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate),
|
| - reinterpret_cast<internal::Object**>(**this),
|
| + reinterpret_cast<internal::Object**>(this->val_),
|
| parameters,
|
| NULL,
|
| callback);
|
| @@ -4977,7 +5211,7 @@ void Persistent<T>::ClearWeak() {
|
| template <class T>
|
| void Persistent<T>::ClearWeak(Isolate* isolate) {
|
| V8::ClearWeak(reinterpret_cast<internal::Isolate*>(isolate),
|
| - reinterpret_cast<internal::Object**>(**this));
|
| + reinterpret_cast<internal::Object**>(this->val_));
|
| }
|
|
|
| template <class T>
|
| @@ -4990,7 +5224,7 @@ void Persistent<T>::MarkIndependent(Isolate* isolate) {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return;
|
| if (!I::IsInitialized(isolate)) return;
|
| - I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this),
|
| + I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_),
|
| true,
|
| I::kNodeIsIndependentShift);
|
| }
|
| @@ -5005,7 +5239,7 @@ void Persistent<T>::MarkPartiallyDependent(Isolate* isolate) {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return;
|
| if (!I::IsInitialized(isolate)) return;
|
| - I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(**this),
|
| + I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_),
|
| true,
|
| I::kNodeIsPartiallyDependentShift);
|
| }
|
| @@ -5020,7 +5254,7 @@ void Persistent<T>::SetWrapperClassId(Isolate* isolate, uint16_t class_id) {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return;
|
| if (!I::IsInitialized(isolate)) return;
|
| - internal::Object** obj = reinterpret_cast<internal::Object**>(**this);
|
| + internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_);
|
| uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset;
|
| *reinterpret_cast<uint16_t*>(addr) = class_id;
|
| }
|
| @@ -5035,7 +5269,7 @@ uint16_t Persistent<T>::WrapperClassId(Isolate* isolate) const {
|
| typedef internal::Internals I;
|
| if (this->IsEmpty()) return 0;
|
| if (!I::IsInitialized(isolate)) return 0;
|
| - internal::Object** obj = reinterpret_cast<internal::Object**>(**this);
|
| + internal::Object** obj = reinterpret_cast<internal::Object**>(this->val_);
|
| uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset;
|
| return *reinterpret_cast<uint16_t*>(addr);
|
| }
|
|
|