6.2.2. Преобразование имён для блоков кода

На верх  Назад  Вперёд

Для преобразования имён процедур применяются следующие правила:

Имена процедур преобразуются в верхний регистр

К именам процедуры в модуле будет добавлено имя этого модуля: _UNITNAME$$_

К именам всех процедур в основной программе будет добавлено _.

Все параметры в процедуре преобразуются с использованием типа параметра (в верхнем регистре) и добавлением символа $. Это делается в порядке слева направо для каждого параметра в процедуре.

Объекты и классы используют специальное предобразование: тип класса или объекта получает преобразованное имя. Имя преобразуется следующим образом: _$$_TYPEDECL_$$ дополнительно начинается с имени модуля и заканчивается именем метода.

Следующие конструкции

unit testman;
interface
type
  myobject = object
    constructor init;
    procedure mymethod;
  end;
 
implementation
constructor myobject.init;
begin
end;
 
procedure myobject.mymethod;
begin
end;
 
function myfunc: pointer;
begin
end;
 
procedure myprocedure(var x: integer; y: longint; z : pchar);
begin
end;
 
end.

Будут преобразованы в следующий ассемблерный файл для целевого процессора Intel 80x86:

.file "testman.pas"
 
.text .balign 16
.globl _TESTMAN$$_$$_MYOBJECT_$$_INIT
_TESTMAN$$_$$_MYOBJECT_$$_INIT:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
movl $0,%edi
call FPC_HELP_CONSTRUCTOR
jz .L5
jmp .L7
.L5:
movl 12(%ebp),%esi
movl $0,%edi
call FPC_HELP_FAIL
.L7:
movl %esi,%eax
testl %esi,%esi
leave
ret $8
.balign 16
.globl _TESTMAN$$_$$_MYOBJECT_$$_MYMETHOD
_TESTMAN$$_$$_MYOBJECT_$$_MYMETHOD:
pushl %ebp
movl %esp,%ebp
leave
ret $4
.balign 16
_TESTMAN$$_MYFUNC:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
movl -4(%ebp),%eax
leave
ret
.balign 16
_TESTMAN$$_MYPROCEDURE$INTEGER$LONGINT$PCHAR:
pushl %ebp
movl %esp,%ebp
leave
ret $12