Skip to content

Commit 57a4ceb

Browse files
committed
n-api: add fast paths for integer getters
Ref: #14379 PR-URL: #14393 Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Timothy Gu <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Jason Ginchereau <[email protected]>
1 parent c83d9bb commit 57a4ceb

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

src/node_api.cc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,6 +1909,12 @@ napi_status napi_get_value_int32(napi_env env,
19091909
CHECK_ARG(env, result);
19101910

19111911
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
1912+
1913+
if (val->IsInt32()) {
1914+
*result = val.As<v8::Int32>()->Value();
1915+
return napi_clear_last_error(env);
1916+
}
1917+
19121918
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
19131919

19141920
v8::Isolate* isolate = env->isolate;
@@ -1928,6 +1934,12 @@ napi_status napi_get_value_uint32(napi_env env,
19281934
CHECK_ARG(env, result);
19291935

19301936
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
1937+
1938+
if (val->IsUint32()) {
1939+
*result = val.As<v8::Uint32>()->Value();
1940+
return napi_clear_last_error(env);
1941+
}
1942+
19311943
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
19321944

19331945
v8::Isolate* isolate = env->isolate;
@@ -1947,6 +1959,13 @@ napi_status napi_get_value_int64(napi_env env,
19471959
CHECK_ARG(env, result);
19481960

19491961
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue(value);
1962+
1963+
// This is still a fast path very likely to be taken.
1964+
if (val->IsInt32()) {
1965+
*result = val.As<v8::Int32>()->Value();
1966+
return napi_clear_last_error(env);
1967+
}
1968+
19501969
RETURN_STATUS_IF_FALSE(env, val->IsNumber(), napi_number_expected);
19511970

19521971
// v8::Value::IntegerValue() converts NaN to INT64_MIN, inconsistent with

0 commit comments

Comments
 (0)