On Wed, 12 Jul 2006, Alexandre Leclerc wrote:

I tried the following:

procedure ThisAndThat(bitmap: TBitmap);
begin
if not Assigned(bitmap) then
  bitmap := TBitmap.Create;
end;

function Test: boolean;
var
bitmap: TBitmap;
begin
bitmap := nil;
ThisAndThat(bitmap);
Result := Assigned(bitmap);
bitmap.Free;
end;

In Delphi a class is always treated as a 'var' when passed in a
function since a class is a pointer to actual data; logical but
confusing when begining in Delphi. So in Delphi Test() would return
true.

Ahem.

Have you tried that ? Because it is manifestly NOT true:

-----------------------------------------------------------------------
procedure TForm2.DoTest(S : TStrings);

begin
  S:=TStringList.Create;
end;

procedure TForm2.WisaButton1Click(Sender: TObject);
Var
  S : TSTrings;

begin
  S:=Nil;
  DoTest(S);
  If S=Nil then
    ShowMessage('S still nil')
  else
    ShowMessage('S assigned');
end;
-----------------------------------------------------------------------

Shows 'S still nil'.

What is more, it gives a warning for the dotest method:

  [Hint] frmmain.pas(44): Value assigned to 'S' never used

What IS true is that you can change the properties of S, even if it is
passed by value or as const. But the pointer S cannot be changed.

So FPC is perfectly compliant.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to