Hallo,
in System.pas ist eine UniqueString routine für diverse string Typen (
Unicode, WideString und AnsiString) enthalten,
nicht jedoch für RawByteString. Hier aus Auszug die AnsiString Variante aus 10.1 Berlin. Kann diese auch mit
RawByteString korrekt benutzt werden, da man diesen als eine Sonderform des AnsiStrings betrachten darf?
Code:
procedure UniqueString(var str: _AnsiStr);
{$IFDEF PUREPASCAL}
begin
InternalUniqueStringA(str);
end;
{$ELSE !PUREPASCAL}
{$IFDEF CPUX86}
asm
JMP InternalUniqueStringA
end;
Und noch was aufgefallen als ich mir eben InternalUniqueStringA angeschaut habe:
Code:
function InternalUniqueStringA(var Str: _AnsiStr): Pointer;
{$IFDEF PUREPASCAL}
var
P: PStrRec;
begin
Result := Pointer(Str);
if Result <> nil then
begin
Result := Pointer(Str);
P := Pointer(PByte(Str) - sizeof(StrRec));
if P.refCnt <> 1 then
begin
Result := _NewAnsiString(P.length, P.codePage);
Move(_PAnsiChr(Str)^, _PAnsiChr(Result)^, P.length);
_LStrClr(Str);
Pointer(Str) := Result;
end;
end;
end;
{$ELSE !PUREPASCAL}
Warum gibt's diese Result := Pointer(Str); Zuweisung zweimal?
Ist der zweite Aufruf nicht überflüssig?