Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2015-05-19 01:39:53 +0300
committerTrevor Norris <trev.norris@gmail.com>2015-05-19 18:36:36 +0300
commit3c44100558b4e9e48e0e711e38acc91e0f870a9f (patch)
tree9fc6588db08a1e63879f2a12d85f054ad22d12bf /src
parent0d6d3dda95e3fff30996c224197fac88fba85b5b (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.h3
-rw-r--r--src/base-object-inl.h7
-rw-r--r--src/base-object.h4
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