Skip to content

Commit

Permalink
core: set PROVIDER type as Persistent class id
Browse files Browse the repository at this point in the history
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: #1730
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
trevnorris committed May 19, 2015
1 parent 0d6d3dd commit 3c44100
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/async-wrap-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
7 changes: 6 additions & 1 deletion src/base-object-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}


Expand Down
4 changes: 3 additions & 1 deletion src/base-object.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 3c44100

Please sign in to comment.