Порядок выполнения в модуле

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Порядок выполнения в модуле

Сообщение VirtUX » 10.03.2011 09:08:55

Возможно-ли такое: чтоб перед выполнением любой процедуры/функции определенного модуля выполнялось некоторое действие? Как например есть секция initialization для выполнения определенных действий при инициализации модуля.
Например:
Есть модуль unitA.pas. В нем есть несколько переопределений оперторов. Хочу чтоб перед выполнением каждого переопределенного оператора глобальная переменная fl: boolean; всегда становилась в false. А после выполнения переопределенного оператора, ВОЗМОЖНО, становилась в true. Чтобы не писать в каждом переопределении вначале fl := false;
Код: Выделить всё
...
type
  Info = record
    ...
  end;
...
operator + (il: Info; ir: Info): Info;
operator - (il: Info; ir: Info): Info;
...
var
  fl: boolean;
implementation
...
operator+(il: Info; ir: Info): Info;
begin
  ...
  if ... then fl := true;
end;

operator-(il: Info; ir: Info): Info;
begin
   ... //А, возможно, fl вообще не встретится в переопределении!
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Порядок выполнения в модуле

Сообщение MageSlayer » 10.03.2011 10:36:46

Думаю, что без хаков тут не обойтись.
Вопрос в соотношении трудозатрат/полезности.

Можно патчить функции на лету (пару комманд асма), можно патчить компилятор :).
Если подобного кода много, то взять нормальный текстовый препроцессор (например m4), и нагенерировать подобного добра сколько хочешь.

Хотя смысл, если честно, непонятен.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Порядок выполнения в модуле

Сообщение Maxizar » 10.03.2011 10:48:42

VirtUX писал(а):Как например есть секция initialization для выполнения определенных действий при инициализации модуля.

Ну вы хотите тоже самое но для функций и процедур... и при каждом вызове этих процедур. Мне кажется такого механизма в языке нету.
Правильно будет не использовать хак как предложил MageSlayer, а честно описать инициализацию в каждой функции.
Код: Выделить всё
operator+(il: Info; ir: Info): Info;
begin
  fl := false;
  ...
  if ... then fl := true;
end;

Или попытаться реализовать работу и логику без этой переменной.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Порядок выполнения в модуле

Сообщение VirtUX » 10.03.2011 10:58:59

Maxizar писал(а):Или попытаться реализовать работу и логику без этой переменной.

Конечно можно и без нее, но с ней было б логичней и кода меньше. Ну да ладно - обойдемся :) На нет и суда нет.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru