Compiler v1.7
Созданы и интегрированы изолированные интерфейсы взаимодействия со следующими таблицами:
- Таблица памяти
mem
- Таблица процессов инициализации
iniprocs
- Таблица функций
functions
- Таблица идентификаторов
identab
- Таблица режимов
modetab
- Таблица представлений
reprtab
Добавлен новый интерфейс взаимодействия с деревом (в режиме обратной совместимости):
node node_get_root(syntax *const sx);
node node_get_child(node *const nd, const size_t index);
node node_get_next(node *const nd);
size_t node_get_amount(const node *const nd);
int node_get_type(const node *const nd);
int node_get_arg(const node *const nd, const size_t index);
int node_set_type(node *const nd, const int type);
int node_add_arg(node *const nd, const int arg);
int node_set_arg(node *const nd, const size_t index, const int arg);
node node_set_child(node *const nd);
int node_is_correct(const node *const nd);
Проведен рефакторинг сканера:
- Считыватель лексем разбит на более мелкие функции
- Добавлено распознавание новых ошибок и "восстановление" после них
- Вынесены общие для компилятора и препроцессора функции:
utf8_is_letter
utf8_is_digit
utf8_is_power
- Исправлены множественные ошибки сегментации
- Исключено использование
exit
функции (полный переход на статус коды)
Системные улучшения:
- Удалены все использования оператора
goto
из кода - Добавлена поддержка кодировки
CP866
для ОС Windows - Добавлено тестирование
Debug
сборок и обработка полного спектра статус кодов - Обновлена система сборки CMake:
- Добавлен
-s
флаг для удаления информации об исходном коде из исполняемого файла - Включены оптимизации 2 уровня для
Release
сборок (скорость исполнения) - Отключена работа
assert
дляRelease
- Отключены все оптимизации для
Debug
сборок - Исправлена линковка для Linux и macOS
- Добавлен поиск динамических библиотек в той же папке
- Добавлен