* correct TValue.Cast<AnsiString>, patch by Евгений Савин. Fixes issue #41042

This commit is contained in:
Michaël Van Canneyt 2024-11-26 09:04:08 +01:00
parent 6f5f567087
commit 1b8209fee4
2 changed files with 11 additions and 2 deletions

View File

@ -2862,7 +2862,7 @@ var
RS : RawByteString;
WS : WideString;
SS : ShortString;
AStr: AnsiString;
begin
aRes:=False;
US:=AsUnicodeString;
@ -2894,6 +2894,11 @@ begin
SetString(RS,PAnsiChar(US),Length(US));
TValue.Make(@RS, aDestType, aDest);
end;
tkAString:
begin
AStr := AnsiString(US);
TValue.Make(@AStr, aDestType, aDest);
end;
tkWChar:
begin
if Length(US)<>1 then
@ -2901,7 +2906,7 @@ begin
TValue.Make(PWideChar(US),aDestType,aDest);
end;
else
// silence compiler warning
Exit;
end;
aRes:=True;
end;

View File

@ -1954,6 +1954,10 @@ begin
{$endif}
CheckTrue(Byte(397) = (TValue. specialize From<Integer>(397). specialize Cast<Byte>(). specialize AsType<Byte>), 'Byte(397) = (TValue.From<Integer>(397).Cast<Byte>().AsType<Byte>)');
CheckTrue(32 = (TValue. specialize From<Byte>(32). specialize Cast<Integer>(). specialize AsType<Integer>), '32 = (TValue.From<Byte>(32).Cast<Integer>().AsType<Integer>)');
CheckTrue('test_str' = TValue.{$ifdef fpc}specialize{$endif} From<ShortString>('test_str')
.{$ifdef fpc}specialize{$endif} Cast<AnsiString>
.{$ifdef fpc}specialize{$endif} AsType<AnsiString>, 'TValue.From<shortring>.Cast<AnsiString> failed');
end;