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

1.2 KiB

Размещение объектов

Экземпляр класса во время исполнения представлен структурой объекта с массивом значений полей:

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