diff options
author | Anna Henningsen <anna@addaleax.net> | 2017-07-20 17:03:11 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-07-24 17:33:40 +0200 |
commit | 57a4cebbd50c7ee5fc4d7aea08bc56d612ebe34d (patch) | |
tree | cd8e05cb4b12dc7b178b24787da2541814581bb7 /src/node_api.cc | |
parent | c83d9bbffbe879f9d67f72c14213139616ec4302 (diff) | |
download | android-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.cc | 19 |
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 |