Похоже на то, что нельзя эффективно напечатать значение, если оно расположено на стеке или выделено статически, поскольку инфа о типе находится где-то вдали.


Но я сделал вот что (https://gitlab.com/budden/jaos/commit/e ... 7ac4ec5d11)
расширил SYSTEM.TYPECODE, чтобы оно могло принимать не только имя типа, но и выражение. При этом будет возвращён адрес описателя типа для этого выражения. После этого можно, хоть и с костылями, но сделать полиморфизм для записей, выделенных статически (стек я пока не пытался обрабатывать, несмотря на сообщение фиксации).

Печать записи с полями выглядит так:

> -- Цитата:
> Reflection2.PrintTopLevelByAddrs(o, ADDRESS OF myRecordVar, SYSTEM.TYPECODE(myRecordVar));

Честно сказать, не очень ясна причина, по которой TYPECODE находится в модуле SYSTEM. Не вижу криминала получить адрес, если без модуля SYSTEM нельзя по нему ни прочитать, ни записать. Если вынести TYPECODE из модуля SYSTEM, можно будет делать отладочную печать статически выделенной записи и не портить код импортом модуля SYSTEM, нужного только для этой отладочной печати.

Но в общем-то я не буду особо защищать эти пункты, когда в меня полетят тапки. Возможны два варианта:

а) я где-то ошибся по сути и мой механизм вообще не может работать.
б) выступят консерваторы. Консерваторам я напомню, что я не пытаюсь улучшать A2, а работаю над собственным форком и не планирую ничего не отправлять в "апстрим". Мой репозиторий открыт, если кому-то надо - можно взять, если не надо - можно не брать

Всех с Новым Годом!