Commit 202a97c8 authored by dcarney's avatar dcarney Committed by Commit bot

make Handle a synonym of Local

R=svenpanne@chromium.org

BUG=

Review URL: https://codereview.chromium.org/679143002

Cr-Commit-Position: refs/heads/master@{#27951}
parent 7ad9980d
...@@ -106,7 +106,6 @@ class Private; ...@@ -106,7 +106,6 @@ class Private;
class Uint32; class Uint32;
class Utils; class Utils;
class Value; class Value;
template <class T> class Handle;
template <class T> class Local; template <class T> class Local;
template <class T> template <class T>
class MaybeLocal; class MaybeLocal;
...@@ -203,28 +202,16 @@ class UniqueId { ...@@ -203,28 +202,16 @@ class UniqueId {
* *
* It is safe to extract the object stored in the handle by * It is safe to extract the object stored in the handle by
* dereferencing the handle (for instance, to extract the Object* from * dereferencing the handle (for instance, to extract the Object* from
* a Handle<Object>); the value will still be governed by a handle * a Local<Object>); the value will still be governed by a handle
* behind the scenes and the same rules apply to these values as to * behind the scenes and the same rules apply to these values as to
* their handles. * their handles.
*/ */
template <class T> class Handle { template <class T>
class Local {
public: public:
/** V8_INLINE Local() : val_(0) {}
* Creates an empty handle. template <class S>
*/ V8_INLINE Local(Local<S> that)
V8_INLINE Handle() : val_(0) {}
/**
* Creates a handle for the contents of the specified handle. This
* constructor allows you to pass handles as arguments by value and
* to assign between handles. However, if you try to assign between
* incompatible handles, for instance from a Handle<String> to a
* Handle<Number> it will cause a compile-time error. Assigning
* between compatible handles, for instance assigning a
* Handle<String> to a variable declared as Handle<Value>, is legal
* because String is a subclass of Value.
*/
template <class S> V8_INLINE Handle(Handle<S> that)
: val_(reinterpret_cast<T*>(*that)) { : val_(reinterpret_cast<T*>(*that)) {
/** /**
* This check fails when trying to convert between incompatible * This check fails when trying to convert between incompatible
...@@ -254,7 +241,8 @@ template <class T> class Handle { ...@@ -254,7 +241,8 @@ template <class T> class Handle {
* to which they refer are identical. * to which they refer are identical.
* The handles' references are not checked. * The handles' references are not checked.
*/ */
template <class S> V8_INLINE bool operator==(const Handle<S>& that) const { template <class S>
V8_INLINE bool operator==(const Local<S>& that) const {
internal::Object** a = reinterpret_cast<internal::Object**>(this->val_); internal::Object** a = reinterpret_cast<internal::Object**>(this->val_);
internal::Object** b = reinterpret_cast<internal::Object**>(that.val_); internal::Object** b = reinterpret_cast<internal::Object**>(that.val_);
if (a == 0) return b == 0; if (a == 0) return b == 0;
...@@ -277,7 +265,8 @@ template <class T> class Handle { ...@@ -277,7 +265,8 @@ template <class T> class Handle {
* the objects to which they refer are different. * the objects to which they refer are different.
* The handles' references are not checked. * The handles' references are not checked.
*/ */
template <class S> V8_INLINE bool operator!=(const Handle<S>& that) const { template <class S>
V8_INLINE bool operator!=(const Local<S>& that) const {
return !operator==(that); return !operator==(that);
} }
...@@ -286,79 +275,6 @@ template <class T> class Handle { ...@@ -286,79 +275,6 @@ template <class T> class Handle {
return !operator==(that); return !operator==(that);
} }
template <class S> V8_INLINE static Handle<T> Cast(Handle<S> that) {
#ifdef V8_ENABLE_CHECKS
// If we're going to perform the type check then we have to check
// that the handle isn't empty before doing the checked cast.
if (that.IsEmpty()) return Handle<T>();
#endif
return Handle<T>(T::Cast(*that));
}
template <class S> V8_INLINE Handle<S> As() {
return Handle<S>::Cast(*this);
}
V8_INLINE static Handle<T> New(Isolate* isolate, Handle<T> that) {
return New(isolate, that.val_);
}
V8_INLINE static Handle<T> New(Isolate* isolate,
const PersistentBase<T>& that) {
return New(isolate, that.val_);
}
private:
friend class Utils;
template<class F, class M> friend class Persistent;
template<class F> friend class PersistentBase;
template<class F> friend class Handle;
template<class F> friend class Local;
template <class F>
friend class MaybeLocal;
template<class F> friend class FunctionCallbackInfo;
template<class F> friend class PropertyCallbackInfo;
template<class F> friend class internal::CustomArguments;
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 HandleScope;
friend class Object;
friend class Private;
/**
* Creates a new handle for the specified value.
*/
V8_INLINE explicit Handle(T* val) : val_(val) {}
V8_INLINE static Handle<T> New(Isolate* isolate, T* that);
T* val_;
};
/**
* A light-weight stack-allocated object handle. All operations
* that return objects from within v8 return them in local handles. They
* are created within HandleScopes, and all local handles allocated within a
* handle scope are destroyed when the handle scope is destroyed. Hence it
* is not necessary to explicitly deallocate local handles.
*/
template <class T> class Local : public Handle<T> {
public:
V8_INLINE Local();
template <class S> V8_INLINE Local(Local<S> that)
: Handle<T>(reinterpret_cast<T*>(*that)) {
/**
* This check fails when trying to convert between incompatible
* handles. For example, converting from a Handle<String> to a
* Handle<Number>.
*/
TYPE_CHECK(T, S);
}
template <class S> V8_INLINE static Local<T> Cast(Local<S> that) { template <class S> V8_INLINE static Local<T> Cast(Local<S> that) {
#ifdef V8_ENABLE_CHECKS #ifdef V8_ENABLE_CHECKS
// If we're going to perform the type check then we have to check // If we're going to perform the type check then we have to check
...@@ -367,10 +283,7 @@ template <class T> class Local : public Handle<T> { ...@@ -367,10 +283,7 @@ template <class T> class Local : public Handle<T> {
#endif #endif
return Local<T>(T::Cast(*that)); return Local<T>(T::Cast(*that));
} }
template <class S> V8_INLINE Local(Handle<S> that)
: Handle<T>(reinterpret_cast<T*>(*that)) {
TYPE_CHECK(T, S);
}
template <class S> V8_INLINE Local<S> As() { template <class S> V8_INLINE Local<S> As() {
return Local<S>::Cast(*this); return Local<S>::Cast(*this);
...@@ -381,7 +294,7 @@ template <class T> class Local : public Handle<T> { ...@@ -381,7 +294,7 @@ template <class T> class Local : public Handle<T> {
* The referee is kept alive by the local handle even when * The referee is kept alive by the local handle even when
* the original handle is destroyed/disposed. * the original handle is destroyed/disposed.
*/ */
V8_INLINE static Local<T> New(Isolate* isolate, Handle<T> that); V8_INLINE static Local<T> New(Isolate* isolate, Local<T> that);
V8_INLINE static Local<T> New(Isolate* isolate, V8_INLINE static Local<T> New(Isolate* isolate,
const PersistentBase<T>& that); const PersistentBase<T>& that);
...@@ -390,7 +303,6 @@ template <class T> class Local : public Handle<T> { ...@@ -390,7 +303,6 @@ template <class T> class Local : public Handle<T> {
template<class F> friend class Eternal; template<class F> friend class Eternal;
template<class F> friend class PersistentBase; template<class F> friend class PersistentBase;
template<class F, class M> friend class Persistent; template<class F, class M> friend class Persistent;
template<class F> friend class Handle;
template<class F> friend class Local; template<class F> friend class Local;
template <class F> template <class F>
friend class MaybeLocal; friend class MaybeLocal;
...@@ -399,18 +311,31 @@ template <class T> class Local : public Handle<T> { ...@@ -399,18 +311,31 @@ template <class T> class Local : public Handle<T> {
friend class String; friend class String;
friend class Object; friend class Object;
friend class Context; friend class Context;
friend class Private;
template<class F> friend class internal::CustomArguments; template<class F> friend class internal::CustomArguments;
friend Local<Primitive> Undefined(Isolate* isolate);
friend Local<Primitive> Null(Isolate* isolate);
friend Local<Boolean> True(Isolate* isolate);
friend Local<Boolean> False(Isolate* isolate);
friend class HandleScope; friend class HandleScope;
friend class EscapableHandleScope; friend class EscapableHandleScope;
template <class F1, class F2, class F3> template <class F1, class F2, class F3>
friend class PersistentValueMapBase; friend class PersistentValueMapBase;
template<class F1, class F2> friend class PersistentValueVector; template<class F1, class F2> friend class PersistentValueVector;
template <class S> V8_INLINE Local(S* that) : Handle<T>(that) { } template <class S>
V8_INLINE Local(S* that)
: val_(that) {}
V8_INLINE static Local<T> New(Isolate* isolate, T* that); V8_INLINE static Local<T> New(Isolate* isolate, T* that);
T* val_;
}; };
// Handle is an alias for Local for historical reasons.
template <class T>
using Handle = Local<T>;
/** /**
* A MaybeLocal<> is a wrapper around Local<> that enforces a check whether * A MaybeLocal<> is a wrapper around Local<> that enforces a check whether
* the Local<> is empty before it can be used. * the Local<> is empty before it can be used.
...@@ -694,7 +619,6 @@ template <class T> class PersistentBase { ...@@ -694,7 +619,6 @@ template <class T> class PersistentBase {
private: private:
friend class Isolate; friend class Isolate;
friend class Utils; friend class Utils;
template<class F> friend class Handle;
template<class F> friend class Local; template<class F> friend class Local;
template<class F1, class F2> friend class Persistent; template<class F1, class F2> friend class Persistent;
template <class F> template <class F>
...@@ -837,7 +761,6 @@ template <class T, class M> class Persistent : public PersistentBase<T> { ...@@ -837,7 +761,6 @@ template <class T, class M> class Persistent : public PersistentBase<T> {
private: private:
friend class Isolate; friend class Isolate;
friend class Utils; friend class Utils;
template<class F> friend class Handle;
template<class F> friend class Local; template<class F> friend class Local;
template<class F1, class F2> friend class Persistent; template<class F1, class F2> friend class Persistent;
template<class F> friend class ReturnValue; template<class F> friend class ReturnValue;
...@@ -6087,8 +6010,6 @@ class V8_EXPORT V8 { ...@@ -6087,8 +6010,6 @@ class V8_EXPORT V8 {
static void FromJustIsNothing(); static void FromJustIsNothing();
static void ToLocalEmpty(); static void ToLocalEmpty();
static void InternalFieldOutOfBounds(int index); static void InternalFieldOutOfBounds(int index);
template <class T> friend class Handle;
template <class T> friend class Local; template <class T> friend class Local;
template <class T> template <class T>
friend class MaybeLocal; friend class MaybeLocal;
...@@ -6890,11 +6811,7 @@ class Internals { ...@@ -6890,11 +6811,7 @@ class Internals {
template <class T> template <class T>
Local<T>::Local() : Handle<T>() { } Local<T> Local<T>::New(Isolate* isolate, Local<T> that) {
template <class T>
Local<T> Local<T>::New(Isolate* isolate, Handle<T> that) {
return New(isolate, that.val_); return New(isolate, that.val_);
} }
...@@ -6903,15 +6820,6 @@ Local<T> Local<T>::New(Isolate* isolate, const PersistentBase<T>& that) { ...@@ -6903,15 +6820,6 @@ Local<T> Local<T>::New(Isolate* isolate, const PersistentBase<T>& that) {
return New(isolate, that.val_); 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)));
}
template <class T> template <class T>
Local<T> Local<T>::New(Isolate* isolate, T* that) { Local<T> Local<T>::New(Isolate* isolate, T* that) {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
namespace v8 { namespace v8 {
class Value; class Value;
template <class T> class Handle;
namespace internal { namespace internal {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment