@@ -1912,6 +1912,12 @@ napi_status napi_get_value_int32(napi_env env,
1912
1912
CHECK_ARG (env, result);
1913
1913
1914
1914
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1915
+
1916
+ if (val->IsInt32 ()) {
1917
+ *result = val.As <v8::Int32>()->Value ();
1918
+ return napi_clear_last_error (env);
1919
+ }
1920
+
1915
1921
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1916
1922
1917
1923
v8::Isolate* isolate = env->isolate ;
@@ -1931,6 +1937,12 @@ napi_status napi_get_value_uint32(napi_env env,
1931
1937
CHECK_ARG (env, result);
1932
1938
1933
1939
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1940
+
1941
+ if (val->IsUint32 ()) {
1942
+ *result = val.As <v8::Uint32>()->Value ();
1943
+ return napi_clear_last_error (env);
1944
+ }
1945
+
1934
1946
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1935
1947
1936
1948
v8::Isolate* isolate = env->isolate ;
@@ -1950,6 +1962,13 @@ napi_status napi_get_value_int64(napi_env env,
1950
1962
CHECK_ARG (env, result);
1951
1963
1952
1964
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1965
+
1966
+ // This is still a fast path very likely to be taken.
1967
+ if (val->IsInt32 ()) {
1968
+ *result = val.As <v8::Int32>()->Value ();
1969
+ return napi_clear_last_error (env);
1970
+ }
1971
+
1953
1972
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1954
1973
1955
1974
// v8::Value::IntegerValue() converts NaN to INT64_MIN, inconsistent with
0 commit comments