Skip to content

refactor(ui): drop global buffer from interpreter.cpp (#3814) - #3917

Merged
bylins merged 1 commit into
masterfrom
refactor/global-buffers-interpreter
Sep 15, 2026
Merged

bylins merged 1 commit into
masterfrom
refactor/global-buffers-interpreter

Conversation

@bylins

@bylins bylins commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Что сделано

Последний «обычный» файл в слое 1 (#3814) — command_interpreter(), диспетчер всех игровых команд. Убраны 13 обращений к глобальному arg.

Не переводил на std::string: command_wtrigger/command_mtrigger/command_otrigger (dg_scripts.h) и find_action (social.h) требуют настоящий изменяемый char* — тело функции мутирует arg напрямую по индексам (arg[0]=..., *(arg+length-1)='\0') прямо перед вызовом этих функций. Правка сигнатур четырёх функций ради одного буфера в самом чувствительном файле движка — несоразмерный риск.

Минимальный и безопасный фикс: локальный char arg[kMaxInputLength] того же размера, что был у глобального, объявленный в начале функции — дальше код не трогал, только область видимости имени.

Все 13 обращений укладываются в диапазон одной функции (строки ~1109-1165), дальше arg не используется — проверено по всему телу command_interpreter.

Поведение не менялось — это самый минимальный возможный дифф для этого файла.

Тестирование

  • ninja -C build -j$(nproc/2) — сборка чистая, без предупреждений.
  • cd build && ./tests/tests — 709 passed, 3 skipped (как и раньше).

🤖 Generated with Claude Code

https://claude.ai/code/session_01EqYwcH5WHkChspte77RyyF

Последний "обычный" файл в слое 1 - command_interpreter(), диспетчер
всех игровых команд. Убраны 13 обращений к глобальному arg.

Не переводил на std::string: command_wtrigger/command_mtrigger/
command_otrigger (dg_scripts.h) и find_action (social.h) требуют
настоящий изменяемый char* - тело функции мутирует arg напрямую по
индексам (arg[0]=..., *(arg+length-1)='\0') прямо перед вызовом этих
функций. Правка сигнатур четырёх функций ради одного буфера в самом
чувствительном файле движка - несоразмерный риск. Минимальный и
безопасный фикс: локальный char arg[kMaxInputLength] того же размера,
что был у глобального, объявленный в начале функции - дальше код не
трогал, только область видимости имени.

Все 13 обращений укладываются в диапазон одной функции (строки ~1109-
1165), дальше arg не используется - проверено по всему телу
command_interpreter.

Поведение не менялось. Собрано с -Dbuild_tests=true, 709/709 тестов,
3 skipped как обычно.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EqYwcH5WHkChspte77RyyF
@bylins
bylins merged commit 54a53af into master Sep 15, 2026
20 checks passed
@bylins
bylins deleted the refactor/global-buffers-interpreter branch September 15, 2026 11:30
prool pushed a commit to prool-debug/mud2026 that referenced this pull request Sep 15, 2026
)

Финальный шаг слоя 1 плана bylins#3807. Все обычные использования buf/buf1/
buf2/arg/smallBuf по движку были переведены на fmt::format/std::string
в предыдущих ~25 партиях этой сессии; оставалось только их
собственное обслуживание:

- db.cpp: определения пяти буферов (char buf[kMaxStringLength]; и т.д.)
  - удалены.
- utils.h: extern-объявления, макросы plant_magic/test_magic и
  прототип sanity_check() - удалены.
- utils.cpp: сама функция sanity_check() (сторожевой обход раз в 60
  секунд, проверяла магический байт в конце каждого буфера) - удалена
  целиком.
- comm.cpp: вызов plant_magic на все четыре буфера при старте
  (main_function) и forward-declare sanity_check - удалены.
- heartbeat.cpp: регистрация pulse-степа "Sanity check" - удалена.
- structs.h: kMagicNumber (сторожевой байт, использовался только
  test_magic/plant_magic) - удалена как неиспользуемая.

Отдельная находка: lua_entity_bindings.cpp (собирается только с
-Dluajit=system/builtin/auto, обычный билд его не видит - поэтому не
всплыло раньше в компиляторных предупреждениях по всей серии PR).
ForceCharCommand сохранял и восстанавливал глобальный arg вокруг
вложенного вызова command_interpreter - это было нужно, пока
command_interpreter сам писал в тот же глобальный arg (PR bylins#3917
перевёл его на локальный буфер). Сохранение/восстановление стало
мёртвым кодом и не компилировалось бы без глобального arg - убрано.
Проверено отдельной сборкой: meson setup build_luajit -Dluajit=system,
собралось и слинковалось полностью (270/270), 709/709 тестов прошли,
каталог удалён после проверки.

Финальный grep по всему src/ подтверждает: ни одного упоминания
plant_magic/test_magic/kMagicNumber/sanity_check или
extern char buf/buf1/buf2/arg/smallBuf не осталось.

Issue bylins#3814 закрывается этим PR. Собрано с -Dbuild_tests=true, 709/709
тестов, 3 skipped как обычно (в обычной сборке и отдельно в сборке с
luajit=system).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EqYwcH5WHkChspte77RyyF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant