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