@@ -313,35 +313,43 @@ int pesapi_is_int32(pesapi_env env, pesapi_value pvalue)
313313{
314314 lua_State* L = luaStateFromPesapiEnv (env);
315315 int idx = luaValueFromPesapiValue (pvalue);
316- return lua_type (L, idx) == LUA_TNUMBER ;
316+ if (!lua_isinteger (L, idx)) {
317+ return 0 ;
318+ }
319+ const lua_Integer value = lua_tointeger (L, idx);
320+ return value >= INT32_MIN && value <= INT32_MAX ;
317321}
318322
319323int pesapi_is_uint32 (pesapi_env env, pesapi_value pvalue)
320324{
321325 lua_State* L = luaStateFromPesapiEnv (env);
322326 int idx = luaValueFromPesapiValue (pvalue);
323- return lua_type (L, idx) == LUA_TNUMBER ;
327+ if (!lua_isinteger (L, idx)) {
328+ return 0 ;
329+ }
330+ const lua_Integer value = lua_tointeger (L, idx);
331+ return value >= 0 && static_cast <uint64_t >(value) <= UINT32_MAX ;
324332}
325333
326334int pesapi_is_int64 (pesapi_env env, pesapi_value pvalue)
327335{
328336 lua_State* L = luaStateFromPesapiEnv (env);
329337 int idx = luaValueFromPesapiValue (pvalue);
330- return lua_type (L, idx) == LUA_TNUMBER ;
338+ return lua_isinteger (L, idx);
331339}
332340
333341int pesapi_is_uint64 (pesapi_env env, pesapi_value pvalue)
334342{
335343 lua_State* L = luaStateFromPesapiEnv (env);
336344 int idx = luaValueFromPesapiValue (pvalue);
337- return lua_type (L, idx) == LUA_TNUMBER ;
345+ return lua_isinteger (L, idx) && lua_tointeger (L, idx) >= 0 ;
338346}
339347
340348int pesapi_is_double (pesapi_env env, pesapi_value pvalue)
341349{
342350 lua_State* L = luaStateFromPesapiEnv (env);
343351 int idx = luaValueFromPesapiValue (pvalue);
344- return lua_type (L, idx) == LUA_TNUMBER ;
352+ return lua_isnumber (L, idx) && ! lua_isinteger (L, idx) ;
345353}
346354
347355int pesapi_is_string (pesapi_env env, pesapi_value pvalue)
0 commit comments