Browse Source

docs: show how to use Isolate

Part of the 3.17 update is to pass the isolate as an argument. The addon
docs have been updated with this usage.
v0.11.0-release
Trevor Norris 12 years ago
committed by Ben Noordhuis
parent
commit
da4d79ac47
  1. 62
      doc/api/addons.markdown

62
doc/api/addons.markdown

@ -41,10 +41,12 @@ First we create a file `hello.cc`:
#include <node.h>
#include <v8.h>
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
return scope.Close(String::New("world"));
}
@ -140,19 +142,21 @@ function calls and return a result. This is the main and only needed source
#define BUILDING_NODE_EXTENSION
#include <node.h>
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> Add(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
if (args.Length() < 2) {
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
return scope.Close(Undefined(isolate));
}
if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
ThrowException(Exception::TypeError(String::New("Wrong arguments")));
return scope.Close(Undefined());
return scope.Close(Undefined(isolate));
}
Local<Number> num = Number::New(args[0]->NumberValue() +
@ -182,17 +186,19 @@ there. Here's `addon.cc`:
#define BUILDING_NODE_EXTENSION
#include <node.h>
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> RunCallback(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
Local<Function> cb = Local<Function>::Cast(args[0]);
const unsigned argc = 1;
Local<Value> argv[argc] = { Local<Value>::New(String::New("hello world")) };
cb->Call(Context::GetCurrent()->Global(), argc, argv);
return scope.Close(Undefined());
return scope.Close(Undefined(isolate));
}
void Init(Handle<Object> exports, Handle<Object> module) {
@ -225,10 +231,12 @@ the string passed to `createObject()`:
#define BUILDING_NODE_EXTENSION
#include <node.h>
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> CreateObject(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
Local<Object> obj = Object::New();
obj->Set(String::NewSymbol("msg"), args[0]->ToString());
@ -260,15 +268,17 @@ wraps a C++ function:
#define BUILDING_NODE_EXTENSION
#include <node.h>
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> MyFunction(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
return scope.Close(String::New("hello world"));
}
Handle<Value> CreateFunction(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);
Local<Function> fn = tpl->GetFunction();
@ -341,6 +351,8 @@ prototype:
#include <node.h>
#include "myobject.h"
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
MyObject::MyObject() {};
@ -355,12 +367,12 @@ prototype:
tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),
FunctionTemplate::New(PlusOne)->GetFunction());
Persistent<Function> constructor = Persistent<Function>::New(tpl->GetFunction());
Persistent<Function> constructor = Persistent<Function>::New(isolate, tpl->GetFunction());
exports->Set(String::NewSymbol("MyObject"), constructor);
}
Handle<Value> MyObject::New(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj = new MyObject();
obj->counter_ = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();
@ -370,7 +382,7 @@ prototype:
}
Handle<Value> MyObject::PlusOne(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());
obj->counter_ += 1;
@ -403,10 +415,12 @@ Let's register our `createObject` method in `addon.cc`:
#include <node.h>
#include "myobject.h"
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> CreateObject(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
return scope.Close(MyObject::NewInstance(args));
}
@ -451,6 +465,8 @@ The implementation is similar to the above in `myobject.cc`:
#include <node.h>
#include "myobject.h"
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
MyObject::MyObject() {};
@ -467,11 +483,11 @@ The implementation is similar to the above in `myobject.cc`:
tpl->PrototypeTemplate()->Set(String::NewSymbol("plusOne"),
FunctionTemplate::New(PlusOne)->GetFunction());
constructor = Persistent<Function>::New(tpl->GetFunction());
constructor = Persistent<Function>::New(isolate, tpl->GetFunction());
}
Handle<Value> MyObject::New(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj = new MyObject();
obj->counter_ = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();
@ -481,7 +497,7 @@ The implementation is similar to the above in `myobject.cc`:
}
Handle<Value> MyObject::NewInstance(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
const unsigned argc = 1;
Handle<Value> argv[argc] = { args[0] };
@ -491,7 +507,7 @@ The implementation is similar to the above in `myobject.cc`:
}
Handle<Value> MyObject::PlusOne(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());
obj->counter_ += 1;
@ -525,15 +541,17 @@ In the following `addon.cc` we introduce a function `add()` that can take on two
#include <node.h>
#include "myobject.h"
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
Handle<Value> CreateObject(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
return scope.Close(MyObject::NewInstance(args));
}
Handle<Value> Add(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(
args[0]->ToObject());
@ -588,6 +606,8 @@ The implementation of `myobject.cc` is similar as before:
#include <node.h>
#include "myobject.h"
Isolate* isolate = Isolate::GetCurrent();
using namespace v8;
MyObject::MyObject() {};
@ -605,7 +625,7 @@ The implementation of `myobject.cc` is similar as before:
}
Handle<Value> MyObject::New(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
MyObject* obj = new MyObject();
obj->val_ = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();
@ -615,7 +635,7 @@ The implementation of `myobject.cc` is similar as before:
}
Handle<Value> MyObject::NewInstance(const Arguments& args) {
HandleScope scope;
HandleScope scope(isolate);
const unsigned argc = 1;
Handle<Value> argv[argc] = { args[0] };

Loading…
Cancel
Save