Ещё обнаружил баг. Exe-файл, собранный автоматикой (PrivTrainingMake.Make), отказывается запускаться. Выдаёт вот такое диалоговое окошко:
Код:
---------------------------
BlackBox
---------------------------
трэп #020
- TextViews.SetCtrlDir (pc=000001AE, fp=0022EB44)
- TextControllers.Install (pc=000001BD, fp=0022EB58)
- StdInterpreter.CallProc (pc=000003A6, fp=0022F5DC)
- StdInterpreter.Command (pc=00001261, fp=0022F6EC)
- StdInterpreter.CallHook.Call (pc=00001386, fp=0022FF50)
- Dialog.Call (pc=00003399, fp=0022FF78)
- TextViews.Init (pc=00004B31, fp=0022FFA0)
- TextViews.$$ (pc=0000000A, fp=0022FFB0)
---------------------------
ОК
---------------------------
Если вставить в начало раздела инициализации модуля TextControllers вызов HALT (111), то выдаётся в точности то же самое окошко с ошибкой. Если затем слинковать вручную четырьмя коммандерами, а не одним вызовом Make, то окошко будет другое:
Код:
---------------------------
BlackBox
---------------------------
трэп #111
- TextControllers.$$ (pc=00000005, fp=0022E918)
- Kernel.InitModule (pc=00001030, fp=0022E924)
- Kernel.ThisLoadedMod (pc=000010AC, fp=0022E93C)
- Kernel.ThisMod (pc=00001137, fp=0022EA54)
- Meta.Lookup (pc=00000856, fp=0022EA78)
- StdInterpreter.CallProc (pc=000002EB, fp=0022F50C)
- StdInterpreter.Command (pc=00001261, fp=0022F61C)
- StdInterpreter.CallHook.Call (pc=00001386, fp=0022FE80)
- Dialog.Call (pc=00003399, fp=0022FEA8)
- TextViews.Init (pc=00004B31, fp=0022FED0)
- TextViews.$$ (pc=0000000A, fp=0022FEE0)
- Kernel.InitModule (pc=00001030, fp=0022FEEC)
---------------------------
ОК
---------------------------
Таким образом, слинкованное вручную приложение отличается от слинкованного моей автоматикой по непонятной пока причине. Суть происходящего в том, что модуль TextControllers импортирует TextViews, а TextViews вызывает TextControllers.Install не прямо, а с помощью Dialog.Call. При этом при ручной линковке Meta.Lookup приводит к нормальной инициализации модуля (выполняется секция BEGIN -- "TextControllers.$$", куда я вставил HALT (111)), а при автоматической линковке этого не происходит, что и приводит к трапу в TextViews.SetCtrlDir (там проверка параметра на NIL, а параметр инициализируется в секции BEGIN модуля TextControllers).
Интересно так же и то, что начало стека вызовов в двух сообщениях отличается: при автоматической линковке отсутствует Kernel.InitModule. Возможно, это косвенно указывает на источник проблем. Добровольцы приглашаются к поиску бага, а у меня время на разбирательства пока закончилось.