OberonCore
https://forum.oberoncore.ru/

#006 ConsInterp.Call1 режет последнюю литеру у параметров
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6443
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Четверг, 10 Октябрь, 2019 20:20 ]
Заголовок сообщения:  #006 ConsInterp.Call1 режет последнюю литеру у параметров

Код:
         NEW(par); par.text := m; par.beg := 0; par.end := m.Length() - 1;
         DevCommanders.par := par

Автор:  Alexander Shiryaev [ Четверг, 10 Октябрь, 2019 21:08 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

Почему DevCompiler, DevLinker, DevDebug работают с текущей реализацией правильно?
Нужно пример, когда проявляется ошибка.

Автор:  Евгений Темиргалеев [ Пятница, 11 Октябрь, 2019 12:49 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

В тексте содержится вся строка. DevXxx могут работать, потому что они некорректно читают параметры, вылезая за пределы диапазана [beg, end). Такое объяснение можно выдвинуть.

Пример:
Код:
./run-BlackBox <<DATA
DevCompiler.CompileThis ipuiK20 ipuiK46 ipuiK299
ipuiK299.CompileThis ipui$

DATA
Если после ipui$ поставить пробел, то идет компиляция подсистемы. А если строка заканчивается на $, то идет компиляция модуля ipui.
Код:
compiling
ok
compiling "ipuiK20"   7600   12
compiling "ipuiK46"   584   4
compiling "ipuiK299"   6176   12
Не открылся документ 'Mod/ipui.odc' подсистемы 'System': локация или файл не найдены

Автор:  Alexander Shiryaev [ Пятница, 11 Октябрь, 2019 21:38 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

Достаточно заменить
Код:
par.end := m.Length() - 1
на
Код:
par.end := m.Length()
или что-то ещё нужно?

Автор:  Евгений Темиргалеев [ Пятница, 11 Октябрь, 2019 22:07 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

Да.

Автор:  Alexander Shiryaev [ Пятница, 11 Октябрь, 2019 22:55 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

Исправил в репозитории BBCP.
Из pack-dev0 убрал "~" в конце списка для DevPacker.PackThis.

Когда исприавил всё так же в своём "старом" репозитории, почему-то стал зависать DevPacker в pack-dev0:

Код:
****
* BlackBox
* keyboard interrupt
- TextModels.StdReader.Pos  (pc=00003F87, fp=CF7D3C10)
- DevPacker.GetNextFileName  (pc=000014BC, fp=CF7D3E30)
- DevPacker.PackThis  (pc=00001B2C, fp=CF7D4F80)
- Kernel.Call  (pc=00001D72, fp=CF7D4FAC)
- Meta.Item.ParamCallVal  (pc=00002B5F, fp=CF7D540C)
- StdInterpreter.CallProc  (pc=00000475, fp=CF7D5474)
- StdInterpreter.Command  (pc=00000A61, fp=CF7D550C)
- StdInterpreter.CallHook.Call  (pc=00000B0F, fp=CF7D56FC)
- Dialog.Call  (pc=00003644, fp=CF7D5724)
- ConsInterp.Call1  (pc=00000179, fp=CF7D5754)
- ConsInterp.Call0  (pc=0000024E, fp=CF7D5770)
- ConsInterp.Call  (pc=000003E3, fp=CF7D5788)
****


Если в конце строки параметров добавить пробел:
Код:
****
* BlackBox
* keyboard interrupt
- TextModels.StdReader.Read  (pc=00003F8A, fp=CF7B9FB4)
- DevPacker.RemoveWhiteSpaces  (pc=000012CE, fp=CF7B9FC0)
- DevPacker.GetNextFileName  (pc=000014BC, fp=CF7BA1E0)
- DevPacker.PackThis  (pc=00001B2C, fp=CF7BB330)
- Kernel.Call  (pc=00001D72, fp=CF7BB35C)
- Meta.Item.ParamCallVal  (pc=00002B5F, fp=CF7BB7BC)
- StdInterpreter.CallProc  (pc=00000475, fp=CF7BB824)
- StdInterpreter.Command  (pc=00000A61, fp=CF7BB8BC)
- StdInterpreter.CallHook.Call  (pc=00000B0F, fp=CF7BBAAC)
- Dialog.Call  (pc=00003644, fp=CF7BBAD4)
- ConsInterp.Call1  (pc=00000179, fp=CF7BBB04)
- ConsInterp.Call0  (pc=0000024E, fp=CF7BBB20)
****

Автор:  Евгений Темиргалеев [ Воскресенье, 13 Октябрь, 2019 03:02 ]
Заголовок сообщения:  Re: ConsInterp.Call1 режет последнюю литеру у параметров

Проверьте RemoveWhiteSpaces.

B16 DevPacker.RemoveWhiteSpaces: зацикливается в конце текста
viewtopic.php?f=116&t=3974

Код:
   PROCEDURE RemoveWhiteSpaces (rd: TextModels.Reader; end: INTEGER);
   BEGIN
      WHILE ~rd.eot & (rd.Pos() <= end) & (rd.char <= 20X) DO GetCh(rd) END
   END RemoveWhiteSpaces;

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