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 печатает декодированную последовательность опкодов и аргументов.