Во 1-х эта структура явно не соответствует тому, что изложено в хелпе и тому что находится в исходниках компилятора (как минимум, имени типа там нет) - но меня это сейчас не особо интересует, интересует ссылка на парента, с целью сделать аналог проверки instance-of для object-типов. Вопросы зачем это нужно и почему не используются классы, давайте пожалуйста оставим за пределами данной темы.
Опытным путём установлено что бывает 2 варианта vmt, точнее, 2 способа ссылки на parent - прямой и через ещё 1 поинтер, т.е. 1) vmt.parent = @parentvmt и 2) vmt.parent = @какая-то_хрень, какая-то_хрень = @parentvmt.
Хотелось бы понять, при каких условиях компилятор формирует эти варианты и как их легально отличить друг от друга.
Сейчас проверяю по размеру объекта, который там с негативным знаком дублируется, но это же как бы опасно, можно и sigsegv огрести, т.к. два sizeint-а больше 1 поинтера.
Добавлено спустя 2 часа 4 минуты 43 секунды:
В общем выкопал, вопрос закрыт:
- Код: Выделить всё
vParentRef: {$ifdef VER3_0}PVmt{$else}PPVmt{$endif};