From a0f91ad497a9d19525846289dda91d1cc471db6f Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Tue, 23 Aug 2016 21:42:16 +1000 Subject: [PATCH] upgrade nan, remove Function::NewInstance() deprecation warnings --- package.json | 2 +- src/batch.cc | 9 +++++++-- src/database.cc | 9 +++++++-- src/iterator.cc | 9 +++++++-- test/iterator-recursion-test.js | 15 ++++++++------- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 2407b104..e4a8aeab 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "abstract-leveldown": "~2.4.0", "bindings": "~1.2.1", "fast-future": "~1.0.0", - "nan": "~2.3.0", + "nan": "~2.4.0", "prebuild": "^4.1.1" }, "devDependencies": { diff --git a/src/batch.cc b/src/batch.cc index 23a8a3da..97f06760 100644 --- a/src/batch.cc +++ b/src/batch.cc @@ -61,6 +61,7 @@ v8::Local Batch::NewInstance ( Nan::EscapableHandleScope scope; + Nan::MaybeLocal maybeInstance; v8::Local instance; v8::Local constructorHandle = @@ -68,12 +69,16 @@ v8::Local Batch::NewInstance ( if (optionsObj.IsEmpty()) { v8::Local argv[1] = { database }; - instance = constructorHandle->GetFunction()->NewInstance(1, argv); + maybeInstance = Nan::NewInstance(constructorHandle->GetFunction(), 1, argv); } else { v8::Local argv[2] = { database, optionsObj }; - instance = constructorHandle->GetFunction()->NewInstance(2, argv); + maybeInstance = Nan::NewInstance(constructorHandle->GetFunction(), 2, argv); } + if (maybeInstance.IsEmpty()) + Nan::ThrowError("Could not create new Batch instance"); + else + instance = maybeInstance.ToLocalChecked(); return scope.Escape(instance); } diff --git a/src/database.cc b/src/database.cc index 85ea72cc..a799e054 100644 --- a/src/database.cc +++ b/src/database.cc @@ -157,14 +157,19 @@ NAN_METHOD(Database::New) { v8::Local Database::NewInstance (v8::Local &location) { Nan::EscapableHandleScope scope; + Nan::MaybeLocal maybeInstance; v8::Local instance; v8::Local constructorHandle = Nan::New(database_constructor); v8::Local argv[] = { location }; - instance = constructorHandle->GetFunction()->NewInstance(1, argv); + maybeInstance = Nan::NewInstance(constructorHandle->GetFunction(), 1, argv); + if (maybeInstance.IsEmpty()) + Nan::ThrowError("Could not create new Database instance"); + else + instance = maybeInstance.ToLocalChecked(); return scope.Escape(instance); } @@ -455,7 +460,7 @@ NAN_METHOD(Database::Iterator) { // each iterator gets a unique id for this Database, so we can // easily store & lookup on our `iterators` map uint32_t id = database->currentIteratorId++; - v8::TryCatch try_catch; + Nan::TryCatch try_catch; v8::Local iteratorHandle = Iterator::NewInstance( info.This() , Nan::New(id) diff --git a/src/iterator.cc b/src/iterator.cc index dcf768d2..5ac0bf67 100644 --- a/src/iterator.cc +++ b/src/iterator.cc @@ -322,18 +322,23 @@ v8::Local Iterator::NewInstance ( Nan::EscapableHandleScope scope; + Nan::MaybeLocal maybeInstance; v8::Local instance; v8::Local constructorHandle = Nan::New(iterator_constructor); if (optionsObj.IsEmpty()) { v8::Local argv[2] = { database, id }; - instance = constructorHandle->GetFunction()->NewInstance(2, argv); + maybeInstance = Nan::NewInstance(constructorHandle->GetFunction(), 2, argv); } else { v8::Local argv[3] = { database, id, optionsObj }; - instance = constructorHandle->GetFunction()->NewInstance(3, argv); + maybeInstance = Nan::NewInstance(constructorHandle->GetFunction(), 3, argv); } + if (maybeInstance.IsEmpty()) + Nan::ThrowError("Could not create new Iterator instance"); + else + instance = maybeInstance.ToLocalChecked(); return scope.Escape(instance); } diff --git a/test/iterator-recursion-test.js b/test/iterator-recursion-test.js index db18dab3..716626ec 100644 --- a/test/iterator-recursion-test.js +++ b/test/iterator-recursion-test.js @@ -21,13 +21,6 @@ var db test('setUp common', testCommon.setUp) -test('setUp db', function (t) { - db = leveldown(testCommon.location()) - db.open(function () { - db.batch(sourceData, t.end.bind(t)) - }) -}) - test('try to create an iterator with a blown stack', function (t) { // Reducing the stack size down from the default 984 for the child node // process makes it easier to trigger the bug condition. But making it too low @@ -47,6 +40,14 @@ test('try to create an iterator with a blown stack', function (t) { }) }) +test('setUp db', function (t) { + db = leveldown(testCommon.location()) + db.open(function (err) { + t.error(err) + db.batch(sourceData, t.end.bind(t)) + }) +}) + test('iterate over a large iterator with a large watermark', function (t) { var iterator = db.iterator({ highWaterMark: 10000000