OberonCore
https://forum.oberoncore.ru/

Meta.Is
https://forum.oberoncore.ru/viewtopic.php?f=23&t=2384
Страница 1 из 1

Автор:  Иван Горячев [ Понедельник, 22 Февраль, 2010 10:07 ]
Заголовок сообщения:  Meta.Is

Коллеги, вопрос. Как устроить проверку типа через Meta?

Пытаюсь самый очевидный вариант:
Код:
VAR i, t : Meta.Item;
BEGIN
  ...
  Meta.GetItem(v, i);
  Meta.LookupPath("StdLinks.Link", t);
  IF i.Is(t) THEN ...

и ловлю ASSERT "нарушение предусловия" в Is.
Смотрю что и как. После LookupPath имеем t.obj = Meta.typObj и t.typ = ptrTyp, что логично. А Meta.Item.Is хочет, чтобы t.typ = Meta.recTyp, отчего ASSERT и случается. И как быть?

Автор:  Info21 [ Понедельник, 22 Февраль, 2010 10:33 ]
Заголовок сообщения:  Re: Meta.Is

Вставить пару ^?

Автор:  Иван Горячев [ Понедельник, 22 Февраль, 2010 10:35 ]
Заголовок сообщения:  Re: Meta.Is

Куда? Здесь нет ни одного указателя.

Автор:  Александр Ильин [ Понедельник, 22 Февраль, 2010 11:55 ]
Заголовок сообщения:  Re: Meta.Is

Иван Горячев писал(а):
t.typ = ptrTyp, что логично. А Meta.Item.Is хочет, чтобы t.typ = Meta.recTyp
Раз t.typ = ptrTyp, то я бы попробовал t.Deref().

Автор:  Иван Горячев [ Понедельник, 22 Февраль, 2010 12:00 ]
Заголовок сообщения:  Re: Meta.Is

t.Deref хочет чтобы t.obj = Meta.varObj.

Собственно я то из положения вышел - написал свой Is пользуя Kernel напрямую. Но нехорошо это как-то. Неужели через Meta такая простая вещь не делается?

Автор:  Евгений Темиргалеев [ Понедельник, 22 Февраль, 2010 14:05 ]
Заголовок сообщения:  Re: Meta.Is

Возможно, решение:
Код:
PROCEDURE (VAR i: Item) GetBaseType* (VAR base: Item), NEW;
      VAR n: INTEGER;
   BEGIN
      ASSERT(i.ext = NIL, 31);
      ASSERT(i.ptr # NIL, 20);
      ASSERT(i.typ IN {arrTyp, recTyp, ptrTyp}, 21); n := 0;
...
   END GetBaseType;
В документации на предусловие, по всей видимости, опечатка.

Автор:  Илья Ермаков [ Понедельник, 22 Февраль, 2010 14:34 ]
Заголовок сообщения:  Re: Meta.Is

В Services было готовое что-то.

Автор:  Иван Горячев [ Понедельник, 22 Февраль, 2010 14:40 ]
Заголовок сообщения:  Re: Meta.Is

Илья Ермаков писал(а):
В Services было готовое что-то.

О, точно есть. Спасибо

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