попробовал такой модуль:
Код:
MODULE TmpSourcePos;
IMPORT SYSTEM, Log, Kernel;
CONST
modName = "TmpSourcePos";
PROCEDURE P;
BEGIN
Log.Int(934); Log.Ln;
END P;
PROCEDURE Do*;
VAR pc: INTEGER;
mod: Kernel.Module;
i:INTEGER;
BEGIN
P;
pc := SYSTEM.ADR(P);
mod := Kernel.ThisMod(modName);
FOR i :=0 TO 150 DO
Log.Int(Kernel.SourcePos(mod,i)); Log.Ln
END;
END Do;
выдал адреса:
"TmpSetPos.SetCaret(100)"
"TmpSetPos.SetCaret(114)"
"TmpSetPos.SetCaret(122)"
"TmpSetPos.SetCaret(198)"
"TmpSetPos.SetCaret(201)"
"TmpSetPos.SetCaret(222)"
"TmpSetPos.SetCaret(258)"
"TmpSetPos.SetCaret(275)"
"TmpSetPos.SetCaret(309)"
"TmpSetPos.SetCaret(317)"
"TmpSetPos.SetCaret(272)"
:
MODULE TmpSourcePos;
IMPORT SYSTEM, Log, Kernel;
CONST
modName = "TmpSourcePos";
PROCEDURE P;
BEGIN
Log.Int(934);
Log.Ln;
END P; ------------------------------------тут скрытый ретурн?
PROCEDURE Do*;
VAR pc: INTEGER;
mod: Kernel.Module;
i:INTEGER;
BEGIN
P;
pc := SYSTEM.ADR(P);
mod := Kernel.ThisMod(modName);
FOR
i :=0 TO 150
DO------------------------------присваивание переменной(258) и скрытая проверка(272)?
Log.Int(Kernel.SourcePos(mod,i));
Log.Ln
END;--------------------------------------------------------------goto на начало цикла?
END Do; -------------------------------------------------------------нету ретурна как в процедуре P?