 |
Администратор |
 |
Сообщения: 273 Откуда: Россия
|
Выявилась небольшая проблема. Если константный массив описан внутри процедуры, то "const" перед ним не выводится. Код: "OBERON" MODULE Unsigned; (*$MAIN*) IMPORT SYSTEM, P := Platform, B := Basic; TYPE TheClocks = ARRAY 23 OF BYTE; CONST AnimClockData = TheClocks (0040, 00070, 00000,17, 00100, 0038, 00000, 0070, 030, 00099, 100, 0017, 00010,12, 00103, 0030, 0030, 0040, 031, 00019,1,2,3); VAR b:BYTE; PROCEDURE Proc; TYPE TheClocks3 = ARRAY 23 OF BYTE; CONST AnimClockData3 = TheClocks3 (0040, 00070, 00000,17, 00100, 0038, 00000, 0070, 030, 00099, 100, 0017, 00010,12, 00103, 0030, 0030, 0040, 031, 00019,1,2,3); VAR c:BYTE; BEGIN c:=AnimClockData3 [1]; END Proc; BEGIN b:= AnimClockData [1]; END Unsigned.
транслируется в Код: "C" /* Ofront 1.2 -xtspkaem */ #include "SYSTEM.h" #include "Basic.h" #include "Platform.h" typedef BYTE Unsigned_TheClocks[23]; const Unsigned_TheClocks AnimClockData = {40,70,0,17,100,38,0,70,30,99, 100,17,10,12,103,30,30,40,31,19, 1,2,3}; static BYTE Unsigned_b; static void Unsigned_Proc (void); /*============================================================================*/ typedef BYTE TheClocks3__2[23]; static void Unsigned_Proc (void) { TheClocks3__2 AnimClockData3 = {40,70,0,17,100,38,0,70,30,99, 100,17,10,12,103,30,30,40,31,19, 1,2,3}; BYTE c; c = AnimClockData3[1]; } export main(int argc, char **argv) { __INIT(argc, argv); __IMPORT(Basic__init); __IMPORT(Platform__init); __REGMAIN("Unsigned", 0); /* BEGIN */ Unsigned_b = AnimClockData[1]; __FINI; } Как видим, typedef вложенной процедуры вышел на глобальный внешний уровень, а вот константный массив TheClocks3__2 AnimClockData3 потерял опцию const (причём это не зависит от предыдущего патча с inPar). Видимо, для вложенных процедур генерация идёт по иному. Нужно теперь найти такое место и тоже его подправить. И лучше там генерировать не __CONSTARR, а __CONSTARR2 или еще как-то, чтобы отличать константный массив на глобальном уровне и внутри процедуры. А если отличать не надо, то нет никакой проблемы задать в библиотеке такое же определение препроцессора, как для __CONSTARR.
|
|