doc: add book,internal,reference,builtins sections

This commit is contained in:
samsonium
2026-10-19 11:11:43 +03:00
parent 306be6b82d
commit 81d07aa6e5
14 changed files with 420 additions and 2 deletions
+21
View File
@@ -0,0 +1,21 @@
# Размещение объектов
Экземпляр класса во время исполнения представлен структурой объекта с массивом значений полей:
```
typedef struct
{
fzl_value_t *values;
size_t values_count;
} fzl_vm_object_t;
```
Поля получают последовательные индексы в порядке объявления.
Таблица класса хранит имя поля, тип и `slot_index`.
Поэтому `object.field` компилируется в `GET_FIELD` или `SET_FIELD` с числовым индексом.
Выражение `new ClassName` проверяет наличие класса и генерирует `ALLOC_OBJECT N`, где `N` — число полей.
Сравнение объектов проверяет указатели.
При уничтожении окружения освобождаются принадлежащие ему объекты и массивы их значений.
При возврате объекта из вложенного окружения `ESCAPE_OBJECT` переносит владение в родительское окружение.
+24
View File
@@ -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` печатает декодированную последовательность опкодов и аргументов.