Нужно изучить компилятор хотя бы до той степени, чтобы понять, как включаются метки.
Ключевые слова emitLabels ->
Читаем сначала вики-документацию http://www.ocp.inf.ethz.ch/wiki/Documentation/Front, от неё переходим к «Using Oberon’s Active Objects for Language Interoperability and Compilation», который пришлось гуглить, т.к. по ссылке он не открылся. Там выясняется, что речь идёт про PACO, а не Fox. Этим путём не пойдём.
Немного разбираемся в компиляторе
Re: Немного разбираемся в компиляторе
Попытаемся найти, где включаются emitLabels, потом попробуем их включить в нашей подопытной версии.
* ImplementationVisitor , PROCEDURE & INIT (4-й параметр с конца)
* GenerateIntermediate -> NEW(ImplementationVisitor, ... , Compiler.FindPC in flags , ... )
Теперь пытаемся найти место, где подмешивается FindPC. Ничего что-то не находится... Может быть, emitLabels включаются как-то без FindPC? Тоже непохоже. Загадочно. Есть ещё такая возможность, что что-то происходит при открытии док-та отладчиком - он может на лету компилироваться c флагом FindPC.
* ImplementationVisitor , PROCEDURE & INIT (4-й параметр с конца)
* GenerateIntermediate -> NEW(ImplementationVisitor, ... , Compiler.FindPC in flags , ... )
Теперь пытаемся найти место, где подмешивается FindPC. Ничего что-то не находится... Может быть, emitLabels включаются как-то без FindPC? Тоже непохоже. Загадочно. Есть ещё такая возможность, что что-то происходит при открытии док-та отладчиком - он может на лету компилироваться c флагом FindPC.
Re: Немного разбираемся в компиляторе
Во всяком случае, компилятор точно вызывается при открытии отладчика, если файл ещё не скомпилирован, WMDebugger.DbgPanel.DoCompile:128
ПОхоже, что мы частично преуспели, остальное в другой раз.
Код: Выделить всё
options:="-b=AMD -f=42";
pc:="";
compiler.CompileText(cvtext, "", 0, pc, options, tw, diagnostics, errors);
Re: Немного разбираемся в компиляторе
Пока не работает, вот такой трап:
Код: Выделить всё
TRAP 73 [1] PL 3 access violation
System: WinAos Revision 5614 (04.07.2014) Kernel_CRC=FFFFFFFFD2D041C9 Uptime=A22946EAA8
Processor: CS=00000023 DS=0000002B ES=0000002B SS=0000002B PC=0762EC7E ESI=00000000 EDI=00000000 ESP=094BF250 PID=00003728 EAX=00000000 EBX=071E9A40 ECX=FFFFFFFF EDX=00391000 EBP=094BF43C FS=00000053 GS=0000002B TMR=042A2F5C
FLAGS: cPAzstIdo iopl0 {16, 9, 4, 2..1}
Features={31, 29..21, 19, 17..11, 9..0}{30..19, 17, 15..11, 9..7, 5..0}
Process:14120 run 0 20866AA18:Commands.Runner Unknown PC=77B32C4CH {28, 0}
StackTraceBack:
WMDebugger.LoadModulePosInfo.SearchEnd:325 pc=123923582 [0762EC7EH] = 123923257 + 325 crc=00000000
from=-1
adr=0
pos=0
ch=0
idx=5 (00000005H)
name="TestDbg.TestObj"...
ext="Init"...
extf=73 (00000049H), 110 (0000006EH), 105 (00000069H), 116 (00000074H), 0, 0, 0, 0...
WMDebugger.LoadModulePosInfo:381 pc=123919033 [0762DAB9H] = 123918652 + 381 crc=00000000
name="TestDbg.Dpi"...
m=0721B618H (WMDebugger.ModuleInfo)
text=0720EB20H (Texts.MemUnicodePiece)
file=07216C58H (WinFS.File)
r=077649E0H (Files.Reader)
pos=-1
pc=0
count=0
ch=m
offset=0
res=FALSE
buf=""...
curPI=07765A80H (WMDebugger.ProcInfo)
utilreader=0721B500H (Texts.TextReader)
@hiddenIRVar0=0721B500H (Texts.TextReader)
@hiddenIRVar1=0721B618H (WMDebugger.ModuleInfo)
@hiddenIRVar2=07768040H (UNKNOWN)
WMDebugger.Window.Load:1372 pc=123917891 [0762D643H] = 123916519 + 1372 crc=00000000
filename="TestDbg.Mod"...
text=00000000H (NIL)
res=0
msg=""...
readonly=FALSE
name="TestDbg"...
fullname=""...
ext=""...
ext2=""...
entryName="TestDbg.Dpi"...
path=""...
syntaxHighlighterName=""
file=07216C58H (WinFS.File)
format=2 (00000002H)
d1=61310 (0000EF7EH)
t1=81997 (0001404DH)
d2=61314 (0000EF82H)
t2=64790 (0000FD16H)
mdi=00000000H (NIL)
@hiddenIRVar0=00000000H (NIL)
WMDebugger.Open:316 pc=123924156 [0762EEBCH] = 123923840 + 316 crc=00000000
context=0866A920H (Commands.Context)
count=0
index=0
temp=0
position=0
filename="TestDbg.Mod"...
format=""
@hiddenIRVar0=0866C1F8H (WMDebugger.Window)
Commands.Runner.@Body:709 pc=4474118 [00444506H] = 4473409 + 709 crc=00000000
Objects.Wrapper:276 pc=4370409 [0042AFE9H] = 4370133 + 276 crc=00000000
lpParameter=0866C040H (Objects.Process)
t=0866C040H (Objects.Process)
obj=0866AA18H (Commands.Runner)
res=1 (00000001H)
bp=155975536 (094BFF70H)
sp=155975496 (094BFF48H)
excpfrm=Rec@00000000H
---------------------------------