Zorko писал(а):
Предлагаю вместо sizeof(type) подставлять сразу числовое значение. Это несложно. В OPV.stat вместо:
Код: "OBERON"
OPM.WriteString("sizeof("); OPC.Andent(l^.typ); OPM.WriteString("))")
Код: "OBERON"
OPM.WriteInt(l^.typ^.size); OPM.Write(")")
Подставлять для размера типа число — вполне в духе Ofront'а.
Да, лучше подставлять сразу число.
Кстати, а что будет при динамической типизации, будет ли там указываться верный размер? И возможна ли, вообще, динамическая типизация для данной версии?
Zorko писал(а):
Поразмыслил над тем, не генерировать ли вместо:
Код: "C"
__COPYREC(__GUARDEQP(AsgnRec2_p, AsgnRec2_Card), AsgnRec2_a, 4);
код:
Код: "C"
__GUARDEQP(AsgnRec2_p, AsgnRec2_Card); __COPYREC(AsgnRec2_p, AsgnRec2_a, 4);
, отделив проверку типа от копирования. Но как-то сомневаюсь. Хотя это даёт свои преимущества. Например, можно было бы сделать спектрумную реализацию макроса __COPYREC не через memcpy (вызов подпрограммы), а прямо LD DE,AsgnRec2_p : LD HL,AsgnRec2_a : LD BC,4 : LDIR.
Отделение проверки даст несколько более эффективный код, но... 1)указатели могут быть не только на записи 2)при прямом присваивании записей не делается проверка. И я не знаю точно, делается ли проверка __GUARDEQP только для присваивания, или используется для аргументов других операций.
Так что вынести проверку отдельно не так-то просто.