diff --git a/unity/native/papi-lua/source/PesapiLuaImpl.cpp b/unity/native/papi-lua/source/PesapiLuaImpl.cpp index a1e9e6632f..79eacd3adf 100644 --- a/unity/native/papi-lua/source/PesapiLuaImpl.cpp +++ b/unity/native/papi-lua/source/PesapiLuaImpl.cpp @@ -313,35 +313,43 @@ int pesapi_is_int32(pesapi_env env, pesapi_value pvalue) { lua_State* L = luaStateFromPesapiEnv(env); int idx = luaValueFromPesapiValue(pvalue); - return lua_type(L, idx) == LUA_TNUMBER; + if (!lua_isinteger(L, idx)) { + return 0; + } + const lua_Integer value = lua_tointeger(L, idx); + return value >= INT32_MIN && value <= INT32_MAX; } int pesapi_is_uint32(pesapi_env env, pesapi_value pvalue) { lua_State* L = luaStateFromPesapiEnv(env); int idx = luaValueFromPesapiValue(pvalue); - return lua_type(L, idx) == LUA_TNUMBER; + if (!lua_isinteger(L, idx)) { + return 0; + } + const lua_Integer value = lua_tointeger(L, idx); + return value >= 0 && static_cast(value) <= UINT32_MAX; } int pesapi_is_int64(pesapi_env env, pesapi_value pvalue) { lua_State* L = luaStateFromPesapiEnv(env); int idx = luaValueFromPesapiValue(pvalue); - return lua_type(L, idx) == LUA_TNUMBER; + return lua_isinteger(L, idx); } int pesapi_is_uint64(pesapi_env env, pesapi_value pvalue) { lua_State* L = luaStateFromPesapiEnv(env); int idx = luaValueFromPesapiValue(pvalue); - return lua_type(L, idx) == LUA_TNUMBER; + return lua_isinteger(L, idx) && lua_tointeger(L, idx) >= 0; } int pesapi_is_double(pesapi_env env, pesapi_value pvalue) { lua_State* L = luaStateFromPesapiEnv(env); int idx = luaValueFromPesapiValue(pvalue); - return lua_type(L, idx) == LUA_TNUMBER; + return lua_isnumber(L, idx) && !lua_isinteger(L, idx); } int pesapi_is_string(pesapi_env env, pesapi_value pvalue) diff --git a/unity/test/Src/Cases/Lua/CrossLang/CrossLangTest.cs b/unity/test/Src/Cases/Lua/CrossLang/CrossLangTest.cs index be62e38230..c09164d91e 100644 --- a/unity/test/Src/Cases/Lua/CrossLang/CrossLangTest.cs +++ b/unity/test/Src/Cases/Lua/CrossLang/CrossLangTest.cs @@ -1,4 +1,4 @@ -using NUnit.Framework; +using NUnit.Framework; using System; using System.Runtime.InteropServices; using System.Security.Cryptography; @@ -208,7 +208,7 @@ public void NativeStructInstanceLuaTest() local testHelper = TestHelper.GetInstance() local outRef = {} - local oNativeStruct = CS.Puerts.UnitTest.TestStruct(1) + local oNativeStruct = CS.Puerts.UnitTest.TestStruct(1.0) outRef[1] = oNativeStruct local rNativeStruct = testHelper:NativeStructTestPipeLine(oNativeStruct, outRef, function(obj) @@ -219,10 +219,10 @@ public void NativeStructInstanceLuaTest() assertAndPrint('LuaGetNativeStructOutArgFromCS', outRef[1].value, oNativeStruct.value) assertAndPrint('LuaGetNativeStructReturnFromCS', rNativeStruct.value, oNativeStruct.value) - testHelper.nativeStructTestField = CS.Puerts.UnitTest.TestStruct(765) - testHelper.nativeStructTestProp = CS.Puerts.UnitTest.TestStruct(765) - TestHelper.nativeStructTestFieldStatic = CS.Puerts.UnitTest.TestStruct(765) - TestHelper.nativeStructTestPropStatic = CS.Puerts.UnitTest.TestStruct(765) + testHelper.nativeStructTestField = CS.Puerts.UnitTest.TestStruct(765.0) + testHelper.nativeStructTestProp = CS.Puerts.UnitTest.TestStruct(765.0) + TestHelper.nativeStructTestFieldStatic = CS.Puerts.UnitTest.TestStruct(765.0) + TestHelper.nativeStructTestPropStatic = CS.Puerts.UnitTest.TestStruct(765.0) testHelper:NativeStructTestCheckMemberValue() "); luaEnv.Dispose();