Skip to content

Commit a50fbae

Browse files
authored
Lua 区分整数/浮点数并校验 int32/uint32/uint64 范围 (#2336)
* Lua 区分整数/浮点数并校验 int32/uint32/uint64 范围 * Lua 调整单元测试,构造函数入参改为正确的float
1 parent f2fc1b4 commit a50fbae

2 files changed

Lines changed: 19 additions & 11 deletions

File tree

unity/native/papi-lua/source/PesapiLuaImpl.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

319323
int 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

326334
int 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

333341
int 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

340348
int 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

347355
int pesapi_is_string(pesapi_env env, pesapi_value pvalue)

unity/test/Src/Cases/Lua/CrossLang/CrossLangTest.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using NUnit.Framework;
1+
using NUnit.Framework;
22
using System;
33
using System.Runtime.InteropServices;
44
using System.Security.Cryptography;
@@ -208,7 +208,7 @@ public void NativeStructInstanceLuaTest()
208208
local testHelper = TestHelper.GetInstance()
209209
210210
local outRef = {}
211-
local oNativeStruct = CS.Puerts.UnitTest.TestStruct(1)
211+
local oNativeStruct = CS.Puerts.UnitTest.TestStruct(1.0)
212212
outRef[1] = oNativeStruct
213213
214214
local rNativeStruct = testHelper:NativeStructTestPipeLine(oNativeStruct, outRef, function(obj)
@@ -219,10 +219,10 @@ public void NativeStructInstanceLuaTest()
219219
assertAndPrint('LuaGetNativeStructOutArgFromCS', outRef[1].value, oNativeStruct.value)
220220
assertAndPrint('LuaGetNativeStructReturnFromCS', rNativeStruct.value, oNativeStruct.value)
221221
222-
testHelper.nativeStructTestField = CS.Puerts.UnitTest.TestStruct(765)
223-
testHelper.nativeStructTestProp = CS.Puerts.UnitTest.TestStruct(765)
224-
TestHelper.nativeStructTestFieldStatic = CS.Puerts.UnitTest.TestStruct(765)
225-
TestHelper.nativeStructTestPropStatic = CS.Puerts.UnitTest.TestStruct(765)
222+
testHelper.nativeStructTestField = CS.Puerts.UnitTest.TestStruct(765.0)
223+
testHelper.nativeStructTestProp = CS.Puerts.UnitTest.TestStruct(765.0)
224+
TestHelper.nativeStructTestFieldStatic = CS.Puerts.UnitTest.TestStruct(765.0)
225+
TestHelper.nativeStructTestPropStatic = CS.Puerts.UnitTest.TestStruct(765.0)
226226
testHelper:NativeStructTestCheckMemberValue()
227227
");
228228
luaEnv.Dispose();

0 commit comments

Comments
 (0)