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/ |