OberonCore
https://forum.oberoncore.ru/

Ошибка в Converters.Export?
https://forum.oberoncore.ru/viewtopic.php?f=23&t=6851
Страница 1 из 1

Автор:  Илья Ермаков [ Пятница, 06 Май, 2022 04:55 ]
Заголовок сообщения:  Ошибка в Converters.Export?

Код:
   PROCEDURE Export* (loc: Files.Locator; name: Files.Name; conv: Converter; s: Stores.Store);
      VAR res: INTEGER; file: Files.File; val: ExpVal; ok: BOOLEAN;
   BEGIN
      ASSERT(s # NIL, 20); ASSERT(~(s IS Stores.Alien), 21);
      ASSERT(loc # NIL, 22); ASSERT(name # "", 23);
      file := Files.dir.New(loc, Files.ask); (* fileLoc := loc; *)
      IF file # NIL THEN
         IF conv = NIL THEN
            conv := doc
         ELSE ASSERT(conv.exp # "", 24)
         END;
         GetCommand(conv.exp, val, ok);
         IF ok THEN
            val.p(s, file);
            IF loc.res # canceled THEN
               file.Register(name, conv.fileType, Files.ask, res); loc.res := res
            END
         ELSE Dialog.ShowMsg("#System:ConverterFailed"); loc.res := canceled
         END
      END
   END Export;


См. строку: IF loc.res # canceled THEN
loc.res выставляется выше, после Files.dir.New.
А здесь вызов конвертера для записи в файл вызывается до этого IF (правда, он выше под охраной file # NIL).

Это может, правда, иметь смысл, только если New в случае loc.res = canceled (пользователь не подтвердил создание нового каталога) таки возвращает файл. Тогда мы в него выполнили экспорт, но реально Register не делаем.
Но в текущей реализации HostFiles - нет, там при canceled New возвращает NIL.

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