Немного разбираемся в компиляторе

Операционная система, написанная на языке Оберон и проект её перевода на русский язык
Ответить
БудДен
Сообщения: 482
Зарегистрирован: 07.10.18 14:01

Немного разбираемся в компиляторе

Сообщение БудДен » 01.12.19 22:33

Нужно изучить компилятор хотя бы до той степени, чтобы понять, как включаются метки.

Ключевые слова emitLabels ->

Читаем сначала вики-документацию http://www.ocp.inf.ethz.ch/wiki/Documentation/Front, от неё переходим к «Using Oberon’s Active Objects for Language Interoperability and Compilation», который пришлось гуглить, т.к. по ссылке он не открылся. Там выясняется, что речь идёт про PACO, а не Fox. Этим путём не пойдём.

БудДен
Сообщения: 482
Зарегистрирован: 07.10.18 14:01

Re: Немного разбираемся в компиляторе

Сообщение БудДен » 01.12.19 23:01

Попытаемся найти, где включаются emitLabels, потом попробуем их включить в нашей подопытной версии.

* ImplementationVisitor , PROCEDURE & INIT (4-й параметр с конца)
* GenerateIntermediate -> NEW(ImplementationVisitor, ... , Compiler.FindPC in flags , ... )

Теперь пытаемся найти место, где подмешивается FindPC. Ничего что-то не находится... Может быть, emitLabels включаются как-то без FindPC? Тоже непохоже. Загадочно. Есть ещё такая возможность, что что-то происходит при открытии док-та отладчиком - он может на лету компилироваться c флагом FindPC.

БудДен
Сообщения: 482
Зарегистрирован: 07.10.18 14:01

Re: Немного разбираемся в компиляторе

Сообщение БудДен » 01.12.19 23:30

Во всяком случае, компилятор точно вызывается при открытии отладчика, если файл ещё не скомпилирован, WMDebugger.DbgPanel.DoCompile:128

Код: Выделить всё

options:="-b=AMD -f=42";
pc:="";
compiler.CompileText(cvtext, "", 0, pc, options, tw, diagnostics, errors);
ПОхоже, что мы частично преуспели, остальное в другой раз.

БудДен
Сообщения: 482
Зарегистрирован: 07.10.18 14:01

Re: Немного разбираемся в компиляторе

Сообщение БудДен » 02.12.19 15:57

Пока не работает, вот такой трап:

Код: Выделить всё

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

---------------------------------


Ответить