| 392 | } |
| 393 | |
| 394 | void CScriptVarsTable::set(lua_State* L, int key_index, int value_index) |
| 395 | { |
| 396 | LPCSTR tk = NULL; |
| 397 | string16 tmp; |
| 398 | |
| 399 | int kt = lua_type(L, key_index); |
| 400 | switch (kt) |
| 401 | { |
| 402 | case LUA_TBOOLEAN: tk = lua_toboolean(L, key_index) ? "true" : "false"; break; |
| 403 | case LUA_TNUMBER: tk = _itoa(lua_tointeger(L, key_index), tmp, 10); break; |
| 404 | case LUA_TSTRING: // конвертирование не строковых значений в строки, поставит в тупик lua_next |
| 405 | tk = lua_tostring(L, key_index); |
| 406 | break; |
| 407 | } |
| 408 | |
| 409 | bool push_val = (value_index != -1) && (value_index != lua_gettop(L)); |
| 410 | |
| 411 | if (tk) |
| 412 | { |
| 413 | is_array &= (LUA_TNUMBER == kt); // если это массив с нулевым и отрицательным ключом |
| 414 | if (push_val) |
| 415 | lua_pushvalue(L, value_index); |
| 416 | set(L, tk, lua_gettop(L), kt); |
| 417 | if (push_val) |
| 418 | lua_pop(L, 1); |
| 419 | } |
| 420 | } |
| 421 | |
| 422 | void CScriptVarsTable::set(lua_State* L, LPCSTR k, int index, int key_type) |
| 423 | { |
no test coverage detected