mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-25 22:01:53 +02:00
+ utf-8 <-> variant type casts, resolves #11371
* ucs-4 -> variant type cast (variant -> ucs-4 is not possible due to overloading contraints of fpc and how ucs-4 is implemented) * some newlines fixed git-svn-id: trunk@13451 -
This commit is contained in:
parent
44f588b7ad
commit
d38340c753
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -9060,6 +9060,7 @@ tests/webtbs/tw1133.pp svneol=native#text/plain
|
|||||||
tests/webtbs/tw11349.pp svneol=native#text/plain
|
tests/webtbs/tw11349.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11354.pp svneol=native#text/plain
|
tests/webtbs/tw11354.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11369.pp svneol=native#text/plain
|
tests/webtbs/tw11369.pp svneol=native#text/plain
|
||||||
|
tests/webtbs/tw11371.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11372.pp svneol=native#text/plain
|
tests/webtbs/tw11372.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11392.pp svneol=native#text/plain
|
tests/webtbs/tw11392.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11431.pp svneol=native#text/plain
|
tests/webtbs/tw11431.pp svneol=native#text/plain
|
||||||
|
|||||||
@ -194,14 +194,12 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
operator :=(const source : wordbool) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : wordbool) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Variantmanager.varfromBool(Dest,Boolean(Source));
|
Variantmanager.varfromBool(Dest,Boolean(Source));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
operator :=(const source : longbool) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : longbool) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Variantmanager.varfromBool(Dest,Boolean(Source));
|
Variantmanager.varfromBool(Dest,Boolean(Source));
|
||||||
end;
|
end;
|
||||||
@ -210,14 +208,12 @@ end;
|
|||||||
{ Chars }
|
{ Chars }
|
||||||
|
|
||||||
operator :=(const source : char) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : char) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
VariantManager.VarFromPStr(Dest,Source);
|
VariantManager.VarFromPStr(Dest,Source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
operator :=(const source : widechar) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : widechar) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Variantmanager.varfromInt(Dest,word(Source),2);
|
Variantmanager.varfromInt(Dest,word(Source),2);
|
||||||
end;
|
end;
|
||||||
@ -242,6 +238,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
operator :=(const source : UTF8String) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
begin
|
||||||
|
VariantManager.VarFromWStr(Dest,UTF8Encode(Source));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
operator :=(const source : UCS4String) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
begin
|
||||||
|
VariantManager.VarFromWStr(Dest,UCS4StringToWideString(Source));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
operator :=(const source : UnicodeString) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : UnicodeString) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
begin
|
begin
|
||||||
@ -357,14 +365,12 @@ operator :=(const source : variant) dest : longint;{$ifdef SYSTEMINLINE}inline;{
|
|||||||
|
|
||||||
|
|
||||||
operator :=(const source : variant) dest : qword;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : qword;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dest:=variantmanager.vartoword64(source);
|
dest:=variantmanager.vartoword64(source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
operator :=(const source : variant) dest : int64;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : int64;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dest:=variantmanager.vartoint64(source);
|
dest:=variantmanager.vartoint64(source);
|
||||||
end;
|
end;
|
||||||
@ -380,14 +386,12 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
operator :=(const source : variant) dest : wordbool;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : wordbool;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dest:=variantmanager.vartobool(source);
|
dest:=variantmanager.vartobool(source);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
operator :=(const source : variant) dest : longbool;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : longbool;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dest:=variantmanager.vartobool(source);
|
dest:=variantmanager.vartobool(source);
|
||||||
end;
|
end;
|
||||||
@ -396,10 +400,8 @@ end;
|
|||||||
{ Chars }
|
{ Chars }
|
||||||
|
|
||||||
operator :=(const source : variant) dest : char;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : char;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
Var
|
Var
|
||||||
S : String;
|
S : String;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
VariantManager.VarToPStr(S,Source);
|
VariantManager.VarToPStr(S,Source);
|
||||||
If Length(S)>0 then
|
If Length(S)>0 then
|
||||||
@ -408,7 +410,6 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
operator :=(const source : variant) dest : widechar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : widechar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dest:=widechar(variantmanager.vartoint(source));
|
dest:=widechar(variantmanager.vartoint(source));
|
||||||
end;
|
end;
|
||||||
@ -434,6 +435,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
operator :=(const source : variant) dest : UTF8String;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
var
|
||||||
|
temp : Widestring;
|
||||||
|
begin
|
||||||
|
VariantManager.VarToWStr(temp,Source);
|
||||||
|
dest:=UTF8Encode(temp);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$ifdef dummy}
|
||||||
|
operator :=(const source : variant) dest : UCS4String;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
var
|
||||||
|
temp : Widestring;
|
||||||
|
begin
|
||||||
|
VariantManager.VarToWStr(temp,Source);
|
||||||
|
dest:=WideStringToUCS4String(temp);
|
||||||
|
end;
|
||||||
|
{$endif dummy}
|
||||||
|
|
||||||
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
operator :=(const source : variant) dest : UnicodeString;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : UnicodeString;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
var
|
var
|
||||||
|
|||||||
@ -243,6 +243,8 @@ operator :=(const source : widechar) dest : variant;{$ifdef SYSTEMINLINE}inline;
|
|||||||
operator :=(const source : shortstring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : shortstring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
operator :=(const source : ansistring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : ansistring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
operator :=(const source : widestring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : widestring) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
operator :=(const source : UTF8String) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
operator :=(const source : UCS4String) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
operator :=(const source : UnicodeString) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : UnicodeString) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
@ -300,6 +302,8 @@ operator :=(const source : variant) dest : widechar;{$ifdef SYSTEMINLINE}inline;
|
|||||||
operator :=(const source : variant) dest : shortstring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : shortstring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
operator :=(const source : variant) dest : ansistring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : ansistring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
operator :=(const source : variant) dest : widestring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : widestring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
operator :=(const source : variant) dest : UTF8String;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
|
// operator :=(const source : variant) dest : UCS4String;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
operator :=(const source : variant) dest : unicodestring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
operator :=(const source : variant) dest : unicodestring;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
|
||||||
|
|||||||
26
tests/webtbs/tw11371.pp
Normal file
26
tests/webtbs/tw11371.pp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
program tw11371;
|
||||||
|
|
||||||
|
{$mode delphi}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
Variants;
|
||||||
|
|
||||||
|
procedure Test1(const s: string);
|
||||||
|
begin
|
||||||
|
// nothing
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Test2(const s: UTF8String);
|
||||||
|
begin
|
||||||
|
// nothing
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
V: Variant;
|
||||||
|
|
||||||
|
begin
|
||||||
|
V := 'Test';
|
||||||
|
Test1(V);
|
||||||
|
Test2(V);
|
||||||
|
end.
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user