Собственно вопрос по сабжу.
Есть функция следующего вида:
- Код: Выделить всё
function IfThen(b: Boolean; const aThen: Integer; const aElse: Integer = 0): Integer; inline;
begin
if b then
Result:=aThen
else
Result:=aElse;
end;
Собственно директива {$inline on} присутствует.
Существует следующий код её использующий:
- Код: Выделить всё
type
TTest = class
...
function AsInt: Integer;
end;
...
var
P: TTest;
begin
...
// Далее производится поиск и переменная P получает своё значение
i:=IfThen(p<>nil,p.AsInt,-1);
...
Вопрос в том, что бывают такие ситуации когда P получает значение nil. По логике не должна вызываться функция AsInt, а она всё равно вызывается.
Как (логически) я думаю, что код после трансляции должен выглядеть так
- Код: Выделить всё
...
if p<>nil then
Result:=p.AsInt
else
Result:=-1;
...
и соответственно функция AsInt не должна вызываться, но...
ps Может я что то не понимаю (накосячил), вразумите

Добавлено спустя 1 минуту 55 секунд:
Да, чуть не забыл. FPC 2.4.0