Илья Ермаков писал(а):
Это слово используется только как флаг для компилятора.
Вот-вот...
Я пытался с помощью полей Kernel.Module.imports / Kernel.Module.nofimps получить список импорта - чего-то не понял результатов: для некоторых модулей результаты правильные, а для некоторых - нет. Определённо есть корреляция между присутствием в массиве Kernel.Module.imports значений NIL и импортом псевдомодулей. Хотя в обратную сторону, это не верно: если модуль импортировал псевдомодули, то не факт увидеть их или NIL в массиве Kernel.Module.imports. 
 
 Вобщем, если следующий код не печатает NIL-ы, то это еще не гарантирует того, что модуль на самом деле не импортирует псевдомодули:
Код:
MODULE TestSafeCheck;
   IMPORT Kernel, Log, Meta;
   PROCEDURE Check (IN name: ARRAY OF CHAR);
      VAR m: Kernel.Module; i: INTEGER;
   BEGIN m := Kernel.ThisMod(name);
      IF m = NIL THEN Log.String("Модуль " + name + " не найден"); Log.Ln
      ELSE
         IF m.nofimps <= 0 THEN
            Log.String("Модуль " + name + " ничего не импортирует"); Log.Ln
         ELSE
            Log.String(name + ": ");
            FOR i := 0 TO m.nofimps - 1 DO
               IF m.imports[i] # NIL THEN
                  Log.String(m.imports[i].name$); Log.String("; ");
               ELSE
                  Log.String("NIL"); Log.String("; ");
               END
            END;
            Log.Ln
         END
      END
   END Check;
   
   PROCEDURE Do*;
   BEGIN
      Check("Kernel");
      Check("Meta");
      Check("TestSafeCheck");
   END Do;
END TestSafeCheck.
После выполнения TestSafeCheck.Do у меня печатается вот что:
Цитата:
Kernel: NIL; NIL; NIL; NIL; National; 
Meta: Kernel; National; 
TestSafeCheck: Kernel; Log; Meta; 
Почему-то про модуль Meta "замалчивается" о том, что он тоже импортирует псевдомодуль, а про Kernel говорится как буд-то он импортирует всего 5 модулей (на самом деле 7).