Open xzben opened 8 years ago
Could you please highlight your modification? Thanks.
if (lua_isnumber(L, -2)) { int key = lua_tonumber(L, -2); std::stringstream ss; ss << key; ss >> stringKey; } else if ( !lua_isstring(L, -2) || !luaval_to_std_string(L, -2, &stringKey)) { lua_pop(L, 1); /* removes 'value'; keep 'key' for next iteration*/ continue; }
Thanks, i will check it.
@dualface Could you please take a look?
@xzben will you send a pull request?
example: lua table 为 local tbl = {} tbl[2] = 100 当在c++中使用 luaval_to_ccvaluemap 时会导致 错误 ,看了lua 官方的文档有提到 在使用 lua_next 的过程中不能对非string类型的key使用 lua_tolstring 如果使用了会破坏 table 的index结构的。
现在的代码只是简单的判断 lua_isstring ,但是在lua 5.1的源码中 LUA_API int lua_isstring (lua_State _L, int idx) { int t = lua_type(L, idx); return (t == LUA_TSTRING || t == LUA_TNUMBER); } 字符串和数字都是 lua_isstring 为 true 的,所以应该修改原先的代码 为 `bool luaval_to_ccvaluemap(luaState L, int lo, cocos2d::ValueMap* ret, const char* funcName) { if ( nullptr == L || nullptr == ret) return false;
if COCOS2D_DEBUG >=1
endif
}`