Files
fz-lang/docs/ru/internals/stacks.md
T

1.5 KiB

Стеки виртуальной машины

ВМ использует три фиксированных стека по 256 элементов.

Стек данных

dstack хранит значения fzl_value_t: числа, строки, булевы значения, ссылки на объекты и null. PUSHNUM, PUSHBOOL и LOADCONST помещают значения на стек. Арифметические и логические операции снимают операнды и кладут результат обратно.

Стек вызовов

cstack хранит адреса возврата. CALL сохраняет текущий адрес и переходит к функции, RET снимает последний адрес. Рекурсивные вызовы используют отдельные записи.

Стек окружений

estack хранит таблицы имён и владельцев объектов. MK_ENVTABLE создаёт окружение, RM_ENVTABLE уничтожает его, STORE добавляет имя, LOOKUP_ENV ищет значение, WRITE изменяет переменную. ESCAPE_OBJECT переносит возвращаемый объект перед закрытием окружения.

Запуск fz -d program.fzb печатает декодированную последовательность опкодов и аргументов.