summaryrefslogtreecommitdiff
path: root/src/node_api.cc
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-07-20 17:03:11 +0200
committerAnna Henningsen <anna@addaleax.net>2017-07-24 17:33:40 +0200
commit57a4cebbd50c7ee5fc4d7aea08bc56d612ebe34d (patch)
treecd8e05cb4b12dc7b178b24787da2541814581bb7 /src/node_api.cc
parentc83d9bbffbe879f9d67f72c14213139616ec4302 (diff)
downloadandroid-node-v8-57a4cebbd50c7ee5fc4d7aea08bc56d612ebe34d.tar.gz
android-node-v8-57a4cebbd50c7ee5fc4d7aea08bc56d612ebe34d.tar.bz2
android-node-v8-57a4cebbd50c7ee5fc4d7aea08bc56d612ebe34d.zip
n-api: add fast paths for integer getters
Ref: https://github.com/nodejs/node/issues/14379 PR-URL: https://github.com/nodejs/node/pull/14393 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jason Ginchereau <jasongin@microsoft.com>
Diffstat (limited to 'src/node_api.cc')
-rw-r--r--src/node_api.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/node_api.cc b/src/node_api.cc
index ed76758071..5818cb25c1 100644
--- a/src/node_api.cc
+++ b/src/node_api.cc
@@ -1909,6 +1909,12 @@ napi_status napi_get_value_int32(napi_env env,
CHECK_ARG(env, result);
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
+
+ if (val->IsInt32()) {
+ *result = val.As<v8::Int32>()->Value();
+ return napi_clear_last_error(env);
+ }
+
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
v8::Isolate* isolate = env->isolate;
@@ -1928,6 +1934,12 @@ napi_status napi_get_value_uint32(napi_env env,
CHECK_ARG(env, result);
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
+
+ if (val->IsUint32()) {
+ *result = val.As<v8::Uint32>()->Value();
+ return napi_clear_last_error(env);
+ }
+
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
v8::Isolate* isolate = env->isolate;
@@ -1947,6 +1959,13 @@ napi_status napi_get_value_int64(napi_env env,
CHECK_ARG(env, result);
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
+
+ // This is still a fast path very likely to be taken.
+ if (val->IsInt32()) {
+ *result = val.As<v8::Int32>()->Value();
+ return napi_clear_last_error(env);
+ }
+
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
// v8::Value::IntegerValue() converts NaN to INT64_MIN, inconsistent with