@@ -1822,6 +1822,12 @@ napi_status napi_get_value_int32(napi_env env,
1822
1822
CHECK_ARG (env, result);
1823
1823
1824
1824
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1825
+
1826
+ if (val->IsInt32 ()) {
1827
+ *result = val.As <v8::Int32>()->Value ();
1828
+ return napi_clear_last_error (env);
1829
+ }
1830
+
1825
1831
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1826
1832
1827
1833
v8::Isolate* isolate = env->isolate ;
@@ -1841,6 +1847,12 @@ napi_status napi_get_value_uint32(napi_env env,
1841
1847
CHECK_ARG (env, result);
1842
1848
1843
1849
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1850
+
1851
+ if (val->IsUint32 ()) {
1852
+ *result = val.As <v8::Uint32>()->Value ();
1853
+ return napi_clear_last_error (env);
1854
+ }
1855
+
1844
1856
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1845
1857
1846
1858
v8::Isolate* isolate = env->isolate ;
@@ -1860,6 +1872,13 @@ napi_status napi_get_value_int64(napi_env env,
1860
1872
CHECK_ARG (env, result);
1861
1873
1862
1874
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1875
+
1876
+ // This is still a fast path very likely to be taken.
1877
+ if (val->IsInt32 ()) {
1878
+ *result = val.As <v8::Int32>()->Value ();
1879
+ return napi_clear_last_error (env);
1880
+ }
1881
+
1863
1882
RETURN_STATUS_IF_FALSE (env, val->IsNumber (), napi_number_expected);
1864
1883
1865
1884
// v8::Value::IntegerValue() converts NaN to INT64_MIN, inconsistent with
0 commit comments