diff options
author | Trevor Norris <trev.norris@gmail.com> | 2015-05-19 01:39:53 +0300 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2015-05-19 18:36:36 +0300 |
commit | 3c44100558b4e9e48e0e711e38acc91e0f870a9f (patch) | |
tree | 9fc6588db08a1e63879f2a12d85f054ad22d12bf /src | |
parent | 0d6d3dda95e3fff30996c224197fac88fba85b5b (diff) |
core: set PROVIDER type as Persistent class id
Pass along the PROVIDER type, that is already passed to AsyncWrap, along
to BaseObject to set the handle_'s class id. This will allow all
Persistents to be transversed and uniquely identified by what type they
are using APIs such as v8::PersistentHandleVisitor.
PR-URL: https://github.com/nodejs/io.js/pull/1730
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'src')
-rw-r--r-- | src/async-wrap-inl.h | 3 | ||||
-rw-r--r-- | src/base-object-inl.h | 7 | ||||
-rw-r--r-- | src/base-object.h | 4 |
3 files changed, 11 insertions, 3 deletions
diff --git a/src/async-wrap-inl.h b/src/async-wrap-inl.h index bad634ddaf1..0518cd3b7ce 100644 --- a/src/async-wrap-inl.h +++ b/src/async-wrap-inl.h @@ -17,7 +17,8 @@ inline AsyncWrap::AsyncWrap(Environment* env, v8::Handle<v8::Object> object, ProviderType provider, AsyncWrap* parent) - : BaseObject(env, object), bits_(static_cast<uint32_t>(provider) << 1) { + : BaseObject(env, object, provider), + bits_(static_cast<uint32_t>(provider) << 1) { // Check user controlled flag to see if the init callback should run. if (!env->using_asyncwrap()) return; diff --git a/src/base-object-inl.h b/src/base-object-inl.h index db0daa1e82f..775b07342ed 100644 --- a/src/base-object-inl.h +++ b/src/base-object-inl.h @@ -10,10 +10,15 @@ namespace node { -inline BaseObject::BaseObject(Environment* env, v8::Local<v8::Object> handle) +inline BaseObject::BaseObject(Environment* env, + v8::Local<v8::Object> handle, + const uint16_t class_id) : handle_(env->isolate(), handle), env_(env) { CHECK_EQ(false, handle.IsEmpty()); + // Shift value 8 bits over to try avoiding conflict with anything else. + if (class_id != 0) + handle_.SetWrapperClassId(class_id << 8); } diff --git a/src/base-object.h b/src/base-object.h index 5a7b95827e8..90abee4333f 100644 --- a/src/base-object.h +++ b/src/base-object.h @@ -9,7 +9,9 @@ class Environment; class BaseObject { public: - BaseObject(Environment* env, v8::Local<v8::Object> handle); + BaseObject(Environment* env, + v8::Local<v8::Object> handle, + const uint16_t class_id = 0); virtual ~BaseObject(); // Returns the wrapped object. Returns an empty handle when |