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