OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:29

Часовой пояс: UTC + 3 часа




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 06 Март, 2011 12:57 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Нарвался на трэп 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)"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 14 Ноябрь, 2017 09:17 

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB