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