summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/node_api.cc9
-rw-r--r--test/addons-napi/test_handle_scope/test.js2
-rw-r--r--test/addons-napi/test_handle_scope/test_handle_scope.c13
3 files changed, 22 insertions, 2 deletions
diff --git a/src/node_api.cc b/src/node_api.cc
index 2ee241badf..2b0dc113fe 100644
--- a/src/node_api.cc
+++ b/src/node_api.cc
@@ -2615,8 +2615,13 @@ napi_status napi_escape_handle(napi_env env,
v8impl::EscapableHandleScopeWrapper* s =
v8impl::V8EscapableHandleScopeFromJsEscapableHandleScope(scope);
if (!s->escape_called()) {
- *result = v8impl::JsValueFromV8LocalValue(
- s->Escape(v8impl::V8LocalValueFromJsValue(escapee)));
+ v8::Local<v8::Value> escapee_object =
+ v8impl::V8LocalValueFromJsValue(escapee);
+ if (escapee_object->IsUndefined()) {
+ *result = escapee;
+ } else {
+ *result = v8impl::JsValueFromV8LocalValue(s->Escape(escapee_object));
+ }
return napi_clear_last_error(env);
}
return napi_set_last_error(env, napi_escape_called_twice);
diff --git a/test/addons-napi/test_handle_scope/test.js b/test/addons-napi/test_handle_scope/test.js
index 53abfe178c..5bb9c4b20d 100644
--- a/test/addons-napi/test_handle_scope/test.js
+++ b/test/addons-napi/test_handle_scope/test.js
@@ -17,3 +17,5 @@ assert.throws(
testHandleScope.NewScopeWithException(() => { throw new RangeError(); });
},
RangeError);
+
+assert.ok(testHandleScope.NewScopeEscapeUndefined() === undefined);
diff --git a/test/addons-napi/test_handle_scope/test_handle_scope.c b/test/addons-napi/test_handle_scope/test_handle_scope.c
index 31efbcf3dd..ef225c4906 100644
--- a/test/addons-napi/test_handle_scope/test_handle_scope.c
+++ b/test/addons-napi/test_handle_scope/test_handle_scope.c
@@ -68,12 +68,25 @@ napi_value NewScopeWithException(napi_env env, napi_callback_info info) {
return NULL;
}
+napi_value NewScopeEscapeUndefined(napi_env env, napi_callback_info info) {
+ napi_escapable_handle_scope scope;
+ napi_value escapee = NULL;
+ napi_value undefined_object = NULL;
+
+ NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
+ NAPI_CALL(env, napi_get_undefined(env, &undefined_object));
+ NAPI_CALL(env, napi_escape_handle(env, scope, undefined_object, &escapee));
+ NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope));
+ return escapee;
+}
+
napi_value Init(napi_env env, napi_value exports) {
napi_property_descriptor properties[] = {
DECLARE_NAPI_PROPERTY("NewScope", NewScope),
DECLARE_NAPI_PROPERTY("NewScopeEscape", NewScopeEscape),
DECLARE_NAPI_PROPERTY("NewScopeEscapeTwice", NewScopeEscapeTwice),
DECLARE_NAPI_PROPERTY("NewScopeWithException", NewScopeWithException),
+ DECLARE_NAPI_PROPERTY("NewScopeEscapeUndefined", NewScopeEscapeUndefined),
};
NAPI_CALL(env, napi_define_properties(