OberonCore
https://forum.oberoncore.ru/

Эмуляция Array Of Const (Delphi)
https://forum.oberoncore.ru/viewtopic.php?f=30&t=2737
Страница 1 из 1

Автор:  Роман М. [ Четверг, 15 Июль, 2010 01:22 ]
Заголовок сообщения:  Эмуляция Array Of Const (Delphi)

Как можно сэмулировать Array Of Const на Обероне-2?

Мне нужно имитировать делфийскую функцию Format.

Автор:  Илья Ермаков [ Четверг, 15 Июль, 2010 11:55 ]
Заголовок сообщения:  Re: Эмуляция Array Of Const (Delphi)

Расскажите поподробнее про эту штуку в Дельфи, может, что и придумаем.

Автор:  Роман М. [ Четверг, 15 Июль, 2010 12:04 ]
Заголовок сообщения:  Re: Эмуляция Array Of Const (Delphi)

Приведу частный пример:
Код:
 WriteLn (Format('Compiled. pc=%d, dsize=%d', [compdata.pc, compdata.dsize]))

Функция формат принимает первым параметром строку и вторым - массив переменных (разного типа), которые будут вставляться в первую строку, выполняя форматирование строки. Примером может быть сишная printf.

Автор:  Илья Ермаков [ Четверг, 15 Июль, 2010 12:29 ]
Заголовок сообщения:  Re: Эмуляция Array Of Const (Delphi)

Во-первых, можно передавать VAR p: ANYREC и дальше через метапрограммирование вытаскивать поля. (Только как там в Обероне - не знаю).

Либо, более тупо, прямо и быстро - передавать VAR data: ARRAY OF BYTE и иметь библиотечку с функциями считывания записей из двоичного потока.
Как вот эти - viewtopic.php?f=2&t=2006 (Не забываем в них проверять, что записи без указателей - и имеем 100%-безопасность).
Для элементарных типов в той же библиотечке имеем предобъявленные типы вида Int = RECORD val: INTEGER END.

Автор:  Роман М. [ Пятница, 16 Июль, 2010 01:35 ]
Заголовок сообщения:  Re: Эмуляция Array Of Const (Delphi)

В компиляторе XDS появилось описывается понятие Sequence parameters:

Цитата:
Sequence parameters

Sequence parameters for a Modula-2/Oberon-2 procedure are collected into a temporary variable, which is then passed as an ARRAY OF BYTE (i.e. its address and size are passed). For foreign procedures, a C-compatible approach is used --- parameters are pushed onto the stack. In either case, all ordinal type parameters are extended to 4 bytes, REALs to LONGREALs, non-scalar type parameters are passed by reference.


Код:
SEQ args: SYSTEM.BYTE

Хм... :? Я что-то не припомню такого ключевого слова в Обероне-2.

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