Hi,
the following code behaves different between Delphi and Free Pascal:
{$APPTYPE CONSOLE}
{$IFDEF FPC}
{$MODE delphi}
{$ENDIF}
uses
Classes;
type TFoo = class(TStringList)
public
constructor Create;
end;
constructor TFoo.Create;
begin
inherited Create;
{$IFDEF FPC}
// Is needed by Free Pascal to get some fields initialized that are
initialized automatically by Delphi
// CheckSpecialChars;
{$ENDIF}
end;
var
Foo: TFoo;
begin
Foo := TFoo.Create;
try
writeln('NameValueSeparator = |', Foo.NameValueSeparator, '|');
Foo.IndexOfName('Test');
writeln('NameValueSeparator = |', Foo.NameValueSeparator, '|');
finally
Foo.Free;
end;
end.
Without calling CheckSpecialChars (which doesn't exist in Delphi) manually in
the constructor the default value of NameValueSeparator is in Free Pascal the
space character until you call a method like IndexOfName that calls
CheckSpecialChars at the beginning. After such a call NameValueSeparator
changes to the expected default value (=). In Delphi it has the right value
from the beginning.
From German Delphi 2006 and 2009 Help:
Bei Strings, die das NameValueSeparator-Zeichen enthalten, handelt es sich um
Namens-/Wertepaare. Das Standardzeichen für NameValueSeparator ist das
Gleichheitszeichen (=).
Short translation: Default value for NameValueSeparator is =.
Why are the values not initialized in TStringList.Create?
Do you agree that it is a bug? Shall I add this to the bug tracker?
I tested it with Delphi 2006 & 2009 and Free Pascal V2.4.0.
Regards
Michael_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal