Обнаружил неприятную проблемку. Не очень понимаю, это ошибка или так задумано.
Имеется код:
procedure TForm1.btnRecursClick(Sender: TObject);
var i:integer;
a:array[0..9] of integer;
function TestRecurs:integer;
var mm: integer;
begin
if i>=9 then begin
result := -1;
Exit;
end;
Inc(i);
result := i;
Memo1.Lines.Add('TestRecurs '+IntToStr(i));
a[i] := TestRecurs;
end;
function TestRecursDummy(dummy:integer):integer;
var mm: integer;
begin
if i>=9 then begin
result := -1;
Exit;
end;
Inc(i);
result := i;
Memo1.Lines.Add('TestRecursDummy '+IntToStr(i));
a[i] := TestRecursDummy(1);
end;
begin
i:=0;
ShowMessage(IntToStr(TestRecurs));
i:=0;
ShowMessage(IntToStr(TestRecursDummy(1)));
end;
Тут видно две идентичные вложенные функции TestRecurs и TestRecursDummy, которые отличаются только тем, что во второй функции есть фиктивный параметр.
Так вот, TestRecurs этим кодом вызывается всего 1 раз, а TestRecursDummy - 9 раз. То есть после выполнения Memo1 содержит:
TestRecurs 1
TestRecursDummy 1
TestRecursDummy 2
TestRecursDummy 3
TestRecursDummy 4
TestRecursDummy 5
TestRecursDummy 6
TestRecursDummy 7
TestRecursDummy 8
TestRecursDummy 9
Используется стандартный Lazarus 2.0.4 под Win32
В опциях проекта отключил оптимизацию - не помогает.