doc: add book,internal,reference,builtins sections
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# Стеки виртуальной машины
|
||||
|
||||
ВМ использует три фиксированных стека по 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` печатает декодированную последовательность опкодов и аргументов.
|
||||
Reference in New Issue
Block a user