Руководство по языку B.Pascal 7

       

Соглашения о вызовах методов


Методы используют те же соглашения о вызовах, что и обычные процедуры и функции, за тем исключением, что каждый метод имеет неявный дополнительный параметр Self, который соответствует пара- метру-переменной того же типа, что и объектный тип данного мето- да. Параметр Self всегда передается последним и всегда имеет фор- му 32-разрядного указателя на экземпляр, из которого вызывается метод. Например, если переменная PP имеет тип PPoint, как опреде- лено выше, то вызов PP^.MoveTo (10, 20) кодируется следующим об- разом:

mov ax, 10 ; загрузить 10 в AX push ax ; передать PX как параметр mov ax, 20 ; загрузить 20 в AX push ax ; передать PY как параметр les di, PP ; загрузить PP в ES:DI push es ; передать, как параметр Self push di mov di, es:[di + 6] ; извлечь смещение ТВМ из поля ТВМ call DWORD PTR [di + 16] ; вызвать запись ТВМ для MoveTo

Во время возврата метод должен удалить параметр Self из сте- ка точно так же, как он удаляет обычные параметры.

Методы всегда используют дальний тип вызова, независимо от состояния директивы $F компилятора.



Содержание раздела