OberonCore
https://forum.oberoncore.ru/

Специфика Stores для неявных базовых типов POINTER TO ...
https://forum.oberoncore.ru/viewtopic.php?f=116&t=3312
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Воскресенье, 06 Март, 2011 12:57 ]
Заголовок сообщения:  Специфика Stores для неявных базовых типов POINTER TO ...

Нарвался на трэп ASSERT(p IS Store, 21) в Stores.NewStore в модуле с типами
Element* = POINTER TO LIMITED RECORD (Stores.Store)
ElementDesc* = RECORD

Вроде как в Kernel неявные базовые типы метятся крышкой.
на
T = POINTER TO RECORD ... END;
получаем
T = POINTER TO T^
T^ = RECORD ... END

Однако в Stores это дело проскакивает как TDesc. Старое наследие, недопеределанное?

Воспроизведение (переименовать TDesc, трэп пропадает):
Код:
MODULE PrivStoresDescTest;

   IMPORT Log, Files, Stores;
   
   TYPE
      T = POINTER TO RECORD (Stores.Store)
         n: INTEGER
      END;
      
      TDesc = RECORD
         n: INTEGER
      END;

   PROCEDURE (t: T) Externalize (VAR wr: Stores.Writer);
   BEGIN
      wr.WriteInt(t.n)
   END Externalize;
   
   PROCEDURE (t: T) Internalize (VAR rd: Stores.Reader);
   BEGIN
      rd.ReadInt(t.n)
   END Internalize;

   PROCEDURE WriteAndReadT* (n: INTEGER);
      VAR
         t: T; s: Stores.Store;
         f: Files.File; r: Stores.Reader; w: Stores.Writer;
   BEGIN
      NEW(t); t.n := n;
      f := Files.dir.Temp();
      w.ConnectTo(f); w.SetPos(0);
      w.WriteStore(t);
      r.ConnectTo(f); r.SetPos(0);
      r.ReadStore(s);
      Log.Int(s(T).n); Log.Ln
   END WriteAndReadT;

END PrivStoresDescTest.

^Q "PrivStoresDescTest.WriteAndReadT(1)"

Автор:  Trurl [ Вторник, 14 Ноябрь, 2017 09:17 ]
Заголовок сообщения:  Re: Специфика Stores для неявных базовых типов POINTER TO ..

А эта штука до сих пор жива, оказывается.
Для сохранения совместимости с 1.2 (это еще до ББ!) типы-указатели на анонимные записи записываются с суффиксом Desc. Этим поведением управляет фаг compatible. Думаю, можно выставит его в FALSE, учитывая крайне малую распространенность Oberon/F :).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/