commit 43d11bffa629143625266900e5ca8efea47f335d
Author: Tom Hughes <tom@compton.nu>
Date: Mon Dec 7 11:38:23 2015 +0000
Update to nan 2.x for nodejs 4.x
Based on https://github.com/node-xmpp/node-stringprep/tree/nan2-astro
diff --git a/node-stringprep.cc b/node-stringprep.cc
index 4b5b371..83c272c 100644
--- a/node-stringprep.cc
+++ b/node-stringprep.cc
@@ -13,19 +13,19 @@ class UnknownProfileException : public std::exception {
};
// protect constructor from GC
-static Persistent<FunctionTemplate> stringprep_constructor;
+static Nan::Persistent<FunctionTemplate> stringprep_constructor;
-class StringPrep : public ObjectWrap {
+class StringPrep : public Nan::ObjectWrap {
public:
static void Initialize(Handle<Object> target)
{
- NanScope();
- Local<FunctionTemplate> t = NanNew<FunctionTemplate>(New);
- NanAssignPersistent(stringprep_constructor, t);
+ Nan::HandleScope scope;
+ Local<FunctionTemplate> t = Nan::New<FunctionTemplate>(New);
+ stringprep_constructor.Reset(t);
t->InstanceTemplate()->SetInternalFieldCount(1);
- NODE_SET_PROTOTYPE_METHOD(t, "prepare", Prepare);
+ Nan::SetPrototypeMethod(t, "prepare", Prepare);
- target->Set(NanNew<String>("StringPrep"), t->GetFunction());
+ target->Set(Nan::New<String>("StringPrep").ToLocalChecked(), t->GetFunction());
}
bool good() const
@@ -43,11 +43,9 @@ protected:
static NAN_METHOD(New)
{
- NanScope();
-
- if (args.Length() >= 1 && args[0]->IsString())
+ if (info.Length() >= 1 && info[0]->IsString())
{
- String::Utf8Value arg0(args[0]->ToString());
+ Nan::Utf8String arg0(info[0]->ToString());
UStringPrepProfileType profileType;
try
{
@@ -55,27 +53,28 @@ protected:
}
catch (UnknownProfileException &)
{
- NanThrowTypeError("Unknown StringPrep profile");
- NanReturnUndefined();
+ Nan::ThrowTypeError("Unknown StringPrep profile");
+ return;
}
StringPrep *self = new StringPrep(profileType);
if (self->good())
{
- self->Wrap(args.This());
- NanReturnValue(args.This());
+ self->Wrap(info.This());
+ info.GetReturnValue().Set(info.This());
+ return;
}
else
{
const char* err = self->errorName();
delete self;
- NanThrowError(err);
- NanReturnUndefined();
+ Nan::ThrowError(err);
+ return;
}
}
else {
- NanThrowTypeError("Bad argument.");
- NanReturnUndefined();
+ Nan::ThrowTypeError("Bad argument.");
+ return;
}
}
@@ -97,22 +96,22 @@ protected:
static NAN_METHOD(Prepare)
{
- NanScope();
-
- if (args.Length() >= 1 && args[0]->IsString())
+ if (info.Length() >= 1 && info[0]->IsString())
{
- StringPrep *self = ObjectWrap::Unwrap<StringPrep>(args.This());
- String::Value arg0(args[0]->ToString());
- NanReturnValue(self->prepare(arg0));
+ StringPrep *self = Nan::ObjectWrap::Unwrap<StringPrep>(info.This());
+ String::Value arg0(info[0]->ToString());
+ info.GetReturnValue().Set(self->prepare(arg0));
+ return;
}
else {
- NanThrowTypeError("Bad argument.");
- NanReturnUndefined();
+ Nan::ThrowTypeError("Bad argument.");
+ return;
}
}
- Handle<Value> prepare(String::Value &str)
+ Local<Value> prepare(String::Value &str)
{
+ Nan::EscapableHandleScope scope;
size_t destLen = str.length() + 1;
UChar *dest = NULL;
while(!dest)
@@ -135,23 +134,23 @@ protected:
{
// other error, just bail out
delete[] dest;
- NanThrowError(errorName());
- return NanUndefined();
+ Nan::ThrowError(errorName());
+ return scope.Escape(Nan::Undefined());
}
else
destLen = w;
}
- Local<String> result = NanNew<String>(dest, destLen);
+ Local<Value> result = Nan::New<String>(dest, destLen).ToLocalChecked();
delete[] dest;
- return result;
+ return scope.Escape(result);
}
private:
UStringPrepProfile *profile;
UErrorCode error;
- static enum UStringPrepProfileType parseProfileType(String::Utf8Value &profile)
+ static enum UStringPrepProfileType parseProfileType(Nan::Utf8String &profile)
throw(UnknownProfileException)
{
if (strcasecmp(*profile, "nameprep") == 0)
@@ -192,12 +191,10 @@ private:
NAN_METHOD(ToUnicode)
{
- NanScope();
-
- if (args.Length() >= 2 && args[0]->IsString() && args[1]->IsInt32())
+ if (info.Length() >= 2 && info[0]->IsString() && info[1]->IsInt32())
{
- String::Value str(args[0]->ToString());
- int32_t options = args[1]->ToInt32()->Value();
+ String::Value str(info[0]->ToString());
+ int32_t options = info[1]->ToInt32()->Value();
// ASCII encoding (xn--*--*) should be longer than Unicode
size_t destLen = str.length() + 1;
@@ -222,31 +219,30 @@ NAN_METHOD(ToUnicode)
{
// other error, just bail out
delete[] dest;
- NanThrowError(u_errorName(error));
- NanReturnUndefined();
+ Nan::ThrowError(u_errorName(error));
+ return;
}
else
destLen = w;
}
- Local<String> result = NanNew<String>(dest, destLen);
+ Local<String> result = Nan::New<String>(dest, destLen).ToLocalChecked();
delete[] dest;
- NanReturnValue(result);
+ info.GetReturnValue().Set(result);
+ return;
}
else {
- NanThrowTypeError("Bad argument.");
- NanReturnUndefined();
+ Nan::ThrowTypeError("Bad argument.");
+ return;
}
}
NAN_METHOD(ToASCII)
{
- NanScope();
-
- if (args.Length() >= 2 && args[0]->IsString() && args[1]->IsInt32())
+ if (info.Length() >= 2 && info[0]->IsString() && info[1]->IsInt32())
{
- String::Value str(args[0]->ToString());
- int32_t options = args[1]->ToInt32()->Value();
+ String::Value str(info[0]->ToString());
+ int32_t options = info[1]->ToInt32()->Value();
// find out length first
UErrorCode error = U_ZERO_ERROR;
@@ -270,28 +266,28 @@ NAN_METHOD(ToASCII)
{
// other error, just bail out
delete[] dest;
- NanThrowError(u_errorName(error));
- NanReturnUndefined();
+ Nan::ThrowError(u_errorName(error));
+ return;
}
- Local<String> result = NanNew<String>(dest, destLen);
+ Local<String> result = Nan::New<String>(dest, destLen).ToLocalChecked();
delete[] dest;
- NanReturnValue(result);
+ info.GetReturnValue().Set(result);
+ return;
}
else {
- NanThrowTypeError("Bad argument.");
- NanReturnUndefined();
+ Nan::ThrowTypeError("Bad argument.");
+ return;
}
}
/*** Initialization ***/
-extern "C" void init(Handle<Object> target)
+NAN_MODULE_INIT(init)
{
- NanScope();
StringPrep::Initialize(target);
- NODE_SET_METHOD(target, "toUnicode", ToUnicode);
- NODE_SET_METHOD(target, "toASCII", ToASCII);
+ Nan::SetMethod(target, "toUnicode", ToUnicode);
+ Nan::SetMethod(target, "toASCII", ToASCII);
}
NODE_MODULE(node_stringprep, init)
diff --git a/package.json b/package.json
index bc1ccdf..cc2970a 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
"dependencies": {
"bindings": "~1.2.1",
"debug": "~2.2.0",
- "nan": "~1.8.4"
+ "nan": "^2.1.0"
},
"devDependencies": {
"grunt": "~0.4.2",