inherit ptr wip

This commit is contained in:
raub 2018-03-20 17:50:54 +03:00
parent e7a197232f
commit e773b03e93
5 changed files with 21 additions and 13 deletions

View File

@ -2,12 +2,14 @@
const util = require('util'); const util = require('util');
const { Example } = require('./binary/addon'); const core = require('./binary/addon');
const { Example } = core;
Example.prototype[util.inspect.custom] = function() { Example.prototype[util.inspect.custom] = function() {
return `Example { listeners: [${this.eventNames()}] }`; return `Example { listeners: [${this.eventNames()}] }`;
}; };
module.exports = Example; module.exports = core;

View File

@ -1,5 +1,7 @@
#include <cstdlib> #include <cstdlib>
#include <event-emitter.hpp>
#include "example.hpp" #include "example.hpp"
using namespace v8; using namespace v8;
@ -12,6 +14,7 @@ extern "C" {
void init(Handle<Object> target) { void init(Handle<Object> target) {
EventEmitter::init(target);
Example::init(target); Example::init(target);
} }

View File

@ -56,12 +56,13 @@ void Example::init(Handle<Object> target) {
NAN_METHOD(Example::newCtor) { NAN_METHOD(Example::newCtor) {
std::cout << "Example() 1" << std::endl;
v8::Local<v8::Function> superCtor = Nan::New(EventEmitter::_constructor); v8::Local<v8::Function> superCtor = Nan::New(EventEmitter::_constructor);
superCtor->Call(info.This(), 0, nullptr); superCtor->Call(info.This(), 0, nullptr);
std::cout << "Example() 2" << std::endl;
Example *example = new Example(); Example *example = new Example();
example->Wrap(info.This()); example->Wrap(info.This());
std::cout << "Example() 3 @" << example << std::endl;
RET_VALUE(info.This()); RET_VALUE(info.This());
} }

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const Example = require('./core'); const { Example, EventEmitter } = require('./core');
console.log('Example', Example); console.log('Example', Example);
@ -9,7 +9,7 @@ const example = new Example();
console.log('example 0', example); console.log('example 0', example);
console.log('static listenerCount', Example.listenerCount); console.log('static listenerCount', EventEmitter.listenerCount);
console.log('listenerCount', example.listenerCount); console.log('listenerCount', example.listenerCount);
console.log('addListener', example.addListener); console.log('addListener', example.addListener);
@ -27,11 +27,11 @@ console.log('setMaxListeners', example.setMaxListeners);
console.log('rawListeners', example.rawListeners); console.log('rawListeners', example.rawListeners);
console.log('destroy', example.destroy); console.log('destroy', example.destroy);
console.log('index.js', 'ON1');
example.on('evt1', (arg1, arg2) => { example.on('evt1', (arg1, arg2) => {
console.log('EVT1', arg1, arg2, example.eventNames()); console.log('EVT1', arg1, arg2, example.eventNames());
}); });
console.log('index.js', 'ON2');
example.once('evt2', (arg1, arg2) => { example.once('evt2', (arg1, arg2) => {
console.log('EVT2', arg1, arg2, example.eventNames()); console.log('EVT2', arg1, arg2, example.eventNames());
}); });

View File

@ -154,10 +154,10 @@ private:
static NAN_METHOD(newCtor) { static NAN_METHOD(newCtor) {
std::cout << "EventEmitter() 1" << std::endl;
EventEmitter *eventEmitter = new EventEmitter(); EventEmitter *eventEmitter = new EventEmitter();
eventEmitter->Wrap(info.This()); eventEmitter->Wrap(info.This());
std::cout << "EventEmitter() 2 : @" << eventEmitter << std::endl;
RET_VALUE(info.This()); RET_VALUE(info.This());
} }
@ -213,8 +213,10 @@ private:
static NAN_METHOD(jsEventNames) { THIS_EVENT_EMITTER; static NAN_METHOD(jsEventNames) { THIS_EVENT_EMITTER;
v8::Local<v8::Array> jsNames = Nan::New<v8::Array>(eventEmitter->_raw.size()); std::cout << "jsEventNames() 1: @" << eventEmitter << " x " << eventEmitter->_raw.size() << std::endl;
v8::Local<v8::Array> jsNames = Nan::New<v8::Array>(eventEmitter->_raw.size());
std::cout << "jsEventNames() 2" << std::endl;
if (eventEmitter->_raw.empty()) { if (eventEmitter->_raw.empty()) {
RET_VALUE(jsNames); RET_VALUE(jsNames);
return; return;