22 lines
1.2 KiB
Markdown
22 lines
1.2 KiB
Markdown
# Размещение объектов
|
|
|
|
Экземпляр класса во время исполнения представлен структурой объекта с массивом значений полей:
|
|
|
|
```
|
|
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` переносит владение в родительское окружение.
|