OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 24 Апрель, 2024 16:12

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 10:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Коллеги, вопрос. Как устроить проверку типа через 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 и случается. И как быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 10:33 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Вставить пару ^?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 10:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Куда? Здесь нет ни одного указателя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 11:55 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Иван Горячев писал(а):
t.typ = ptrTyp, что логично. А Meta.Item.Is хочет, чтобы t.typ = Meta.recTyp
Раз t.typ = ptrTyp, то я бы попробовал t.Deref().


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 12:00 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
t.Deref хочет чтобы t.obj = Meta.varObj.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 14:05 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Возможно, решение:
Код:
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;
В документации на предусловие, по всей видимости, опечатка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 14:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В Services было готовое что-то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Meta.Is
СообщениеДобавлено: Понедельник, 22 Февраль, 2010 14:40 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Илья Ермаков писал(а):
В Services было готовое что-то.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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