| 565 | } |
| 566 | |
| 567 | bool CScriptEngine::load_buffer(lua_State* L, const char* caBuffer, size_t tSize, const char* caScriptName, |
| 568 | const char* caNameSpaceName) // KRodin: эта функция форматирует содержимое скрипта используя FILE_HEADER и после этого загружает его в lua |
| 569 | { |
| 570 | int l_iErrorCode = 0; |
| 571 | const std::string_view strbuf{caBuffer, tSize}; |
| 572 | if (strcmp(GlobalNamespace, caNameSpaceName)) // Все скрипты кроме _G |
| 573 | { |
| 574 | // KRodin: обращаться к _G только с большой буквы! Иначе он загрузится ещё раз и это неизвестно к чему приведёт! |
| 575 | // Глобальное пространство инитится один раз после запуска луаджита, и никогда больше. |
| 576 | if (!strcmp("_g", caNameSpaceName)) |
| 577 | return false; |
| 578 | |
| 579 | const std::string script = std::format(FILE_HEADER, caNameSpaceName, strbuf); |
| 580 | |
| 581 | // Log("[CScriptStorage::load_buffer(1)] Loading buffer:"); |
| 582 | // Log(script.c_str()); |
| 583 | l_iErrorCode = luaL_loadbuffer(L, script.c_str(), script.size(), caScriptName); |
| 584 | } |
| 585 | else //_G.script и только он. |
| 586 | { |
| 587 | // Log("[CScriptStorage::load_buffer(2)] Loading buffer:"); |
| 588 | // Log(strbuf.c_str()); |
| 589 | l_iErrorCode = luaL_loadbuffer(L, strbuf.data(), strbuf.size(), caScriptName); |
| 590 | } |
| 591 | if (l_iErrorCode) |
| 592 | { |
| 593 | print_output(L, caScriptName, l_iErrorCode); |
| 594 | R_ASSERT(false); // НЕ ЗАКОММЕНТИРОВАТЬ! |
| 595 | return false; |
| 596 | } |
| 597 | return true; |
| 598 | } |
| 599 | |
| 600 | bool CScriptEngine::do_file( |
| 601 | const char* caScriptName, |
nothing calls this directly
no test coverage detected