diff --git a/src/batch.cc b/src/batch.cc index 4fdf194f..815df3f1 100644 --- a/src/batch.cc +++ b/src/batch.cc @@ -32,14 +32,14 @@ leveldb::Status Batch::Write () { } void Batch::Init (napi_env env) { - napi_method_descriptor methods[] = { - { Batch::Put, "put" }, - { Batch::Del, "del" }, - { Batch::Clear, "clear" }, - { Batch::Write, "write" }, + napi_property_descriptor methods[] = { + { "put", Batch::Put }, + { "del", Batch::Del }, + { "clear", Batch::Clear }, + { "write", Batch::Write }, }; - napi_value ctor = napi_create_constructor_for_wrap_with_methods(env, Batch::New, "Batch", 4, methods); + napi_value ctor = napi_create_constructor(env, "Batch", Batch::New, nullptr, 4, methods); batch_constructor = napi_create_persistent(env, ctor); } diff --git a/src/database.cc b/src/database.cc index e397a24e..c67349fe 100644 --- a/src/database.cc +++ b/src/database.cc @@ -127,7 +127,7 @@ void Database::CloseDatabase () { /* V8 exposed functions *****************************/ -void LevelDOWN (napi_env env, napi_func_cb_info info) { +void LevelDOWN (napi_env env, napi_callback_info info) { napi_value args[1]; napi_get_cb_args(env, info, args, 1); @@ -137,19 +137,19 @@ void LevelDOWN (napi_env env, napi_func_cb_info info) { } void Database::Init (napi_env env) { - napi_method_descriptor methods [] = { - { Database::Open, "open" }, - { Database::Close, "close" }, - { Database::Put, "put" }, - { Database::Get, "get" }, - { Database::Delete, "del" }, - { Database::Batch, "batch" }, - { Database::ApproximateSize, "approximateSize" }, - { Database::GetProperty, "getProperty" }, - { Database::Iterator, "iterator" }, + napi_property_descriptor methods [] = { + { "open", Database::Open }, + { "close", Database::Close }, + { "put", Database::Put }, + { "get", Database::Get }, + { "del", Database::Delete }, + { "batch", Database::Batch }, + { "approximateSize", Database::ApproximateSize }, + { "getProperty", Database::GetProperty }, + { "iterator", Database::Iterator }, }; - napi_value ctor = napi_create_constructor_for_wrap_with_methods(env, Database::New, "Database", 9, methods); + napi_value ctor = napi_create_constructor(env, "Database", Database::New, nullptr, 9, methods); database_constructor = napi_create_persistent(env, ctor); } @@ -270,7 +270,7 @@ NAPI_METHOD(Database::Close) { napi_propertyname pnEnd = napi_property_name(env, "end"); napi_value end = napi_get_property(env, iteratorHandle, pnEnd); napi_value argv [] = { - napi_create_function(env, EmptyMethod) // empty callback + napi_create_function(env, EmptyMethod, nullptr) // empty callback }; napi_make_callback( env @@ -492,40 +492,20 @@ NAPI_METHOD(Database::Iterator) { uint32_t id = database->currentIteratorId++; napi_value iteratorHandle; - struct try_catch_data { - napi_value& iteratorHandle; - napi_value& _this; - uint32_t& id; - napi_value& optionsObj; - } data = { - iteratorHandle, - _this, - id, - optionsObj - }; - bool did_catch = napi_try_catch( - env - , [](napi_env env, void* data) { - try_catch_data* d = static_cast(data); - d->iteratorHandle = Iterator::NewInstance( - env - , d->_this - , napi_create_number(env, d->id) - , d->optionsObj - ); - } - , [](napi_env env, void* data) { - // NB: node::FatalException can segfault here if there is no room on stack. - napi_throw_error(env, "Fatal Error in Database::Iterator!"); - } - , &data + iteratorHandle = Iterator::NewInstance( + env + , _this + , napi_create_number(env, id) + , optionsObj ); - if (did_catch) { - return; + if (napi_is_exception_pending(env)) { + // NB: node::FatalException can segfault here if there is no room on stack. + napi_throw_error(env, "Fatal Error in Database::Iterator!"); } + leveldown::Iterator *iterator = static_cast(napi_unwrap(env, iteratorHandle)); diff --git a/src/database.h b/src/database.h index 8780c475..efff4425 100644 --- a/src/database.h +++ b/src/database.h @@ -20,7 +20,7 @@ namespace leveldown { -void LevelDOWN (napi_env env, napi_func_cb_info info); +void LevelDOWN (napi_env env, napi_callback_info info); class Database { public: diff --git a/src/iterator.cc b/src/iterator.cc index e2266caa..b5cebe9b 100644 --- a/src/iterator.cc +++ b/src/iterator.cc @@ -316,13 +316,13 @@ NAPI_METHOD(Iterator::End) { } void Iterator::Init (napi_env env) { - napi_method_descriptor methods [] = { - { Iterator::Seek, "seek" }, - { Iterator::Next, "next" }, - { Iterator::End, "end" }, + napi_property_descriptor methods [] = { + { "seek", Iterator::Seek }, + { "next", Iterator::Next }, + { "end", Iterator::End }, }; - napi_value ctor = napi_create_constructor_for_wrap_with_methods(env, Iterator::New, "Iterator", 3, methods); + napi_value ctor = napi_create_constructor(env, "Iterator", Iterator::New, nullptr, 3, methods); iterator_constructor = napi_create_persistent(env, ctor); } diff --git a/src/leveldown.cc b/src/leveldown.cc index 54d12385..f3a85083 100644 --- a/src/leveldown.cc +++ b/src/leveldown.cc @@ -14,7 +14,7 @@ namespace leveldown { -void DestroyDB (napi_env env, napi_func_cb_info info) { +void DestroyDB (napi_env env, napi_callback_info info) { napi_value args[2]; napi_get_cb_args(env, info, args, 2); @@ -32,7 +32,7 @@ void DestroyDB (napi_env env, napi_func_cb_info info) { napi_set_return_value(env, info, napi_get_undefined_(env)); } -void RepairDB (napi_env env, napi_func_cb_info info) { +void RepairDB (napi_env env, napi_callback_info info) { napi_value args[2]; napi_get_cb_args(env, info, args, 2); @@ -59,10 +59,10 @@ void Init(napi_env env, napi_value target, napi_value module) { napi_propertyname nameRepair = napi_property_name(env, "repair"); napi_propertyname nameLeveldown = napi_property_name(env, "leveldown"); - napi_value leveldown = napi_create_function(env, LevelDOWN); + napi_value leveldown = napi_create_function(env, LevelDOWN, nullptr); - napi_set_property(env, leveldown, nameDestroy, napi_create_function(env, DestroyDB)); - napi_set_property(env, leveldown, nameRepair, napi_create_function(env, RepairDB)); + napi_set_property(env, leveldown, nameDestroy, napi_create_function(env, DestroyDB, nullptr)); + napi_set_property(env, leveldown, nameRepair, napi_create_function(env, RepairDB, nullptr)); napi_set_property(env, target, nameLeveldown, leveldown); }