OberonCore
https://forum.oberoncore.ru/

B24: Meta.Lookup игнорирует выдачу Meta.LookupFilter
https://forum.oberoncore.ru/viewtopic.php?f=116&t=5614
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Понедельник, 01 Февраль, 2016 23:13 ]
Заголовок сообщения:  B24: Meta.Lookup игнорирует выдачу Meta.LookupFilter

http://oberoncore.ru/_media/projects/bb ... deltas.pdf
Цитата:
Ожидаемая логика по постусловию цикла:
1) done — один из фильтров выдал mod (результат получен, ничего не делать);
2) ~done & LegalName(name) — все фильтры отработали в холостую, имя "стандартное" — получить mod "стандартным" способом;
3) ~done & ~LegalName(name) — все фильтры отработали в холостую, имя "не стандартное" — "сбросить" mod.

Ошибка её выражения в Meta.Lookup приводит к тому, что (1) отрабатывает как (3).


Исправление:
Код:
PROCEDURE Lookup* (IN name: ARRAY OF CHAR; OUT mod: Item);
      VAR m: Kernel.Module; done: BOOLEAN; filter: FilterHook;
   BEGIN
      done := FALSE; filter := filterHook;
      WHILE ~done & (filter # NIL) DO filter.filter(name, mod, done); filter := filter.next END;
      IF done THEN
      ELSIF LegalName(name) THEN
         …
      ELSE SetUndef(mod)
      END
   END Lookup;

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