mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 12:05:57 +02:00
compiler, rtl: add vtUnicodeString (issue #0018560)
git-svn-id: trunk@16833 -
This commit is contained in:
parent
e77a9051c8
commit
e4a6221bf3
@ -974,26 +974,27 @@ implementation
|
|||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
|
|
||||||
const
|
const
|
||||||
vtInteger = 0;
|
vtInteger = 0;
|
||||||
vtBoolean = 1;
|
vtBoolean = 1;
|
||||||
vtChar = 2;
|
vtChar = 2;
|
||||||
vtExtended = 3;
|
vtExtended = 3;
|
||||||
vtString = 4;
|
vtString = 4;
|
||||||
vtPointer = 5;
|
vtPointer = 5;
|
||||||
vtPChar = 6;
|
vtPChar = 6;
|
||||||
vtObject = 7;
|
vtObject = 7;
|
||||||
vtClass = 8;
|
vtClass = 8;
|
||||||
vtWideChar = 9;
|
vtWideChar = 9;
|
||||||
vtPWideChar = 10;
|
vtPWideChar = 10;
|
||||||
vtAnsiString32 = 11;
|
vtAnsiString32 = 11;
|
||||||
vtCurrency = 12;
|
vtCurrency = 12;
|
||||||
vtVariant = 13;
|
vtVariant = 13;
|
||||||
vtInterface = 14;
|
vtInterface = 14;
|
||||||
vtWideString = 15;
|
vtWideString = 15;
|
||||||
vtInt64 = 16;
|
vtInt64 = 16;
|
||||||
vtQWord = 17;
|
vtQWord = 17;
|
||||||
vtAnsiString16 = 18;
|
vtUnicodeString = 18;
|
||||||
vtAnsiString64 = 19;
|
vtAnsiString16 = 19;
|
||||||
|
vtAnsiString64 = 20;
|
||||||
|
|
||||||
procedure tcgarrayconstructornode.pass_generate_code;
|
procedure tcgarrayconstructornode.pass_generate_code;
|
||||||
var
|
var
|
||||||
@ -1151,10 +1152,16 @@ implementation
|
|||||||
freetemp:=false;
|
freetemp:=false;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if is_widestring(lt) or is_unicodestring(lt) then
|
if is_widestring(lt) then
|
||||||
begin
|
begin
|
||||||
vtype:=vtWideString;
|
vtype:=vtWideString;
|
||||||
freetemp:=false;
|
freetemp:=false;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if is_unicodestring(lt) then
|
||||||
|
begin
|
||||||
|
vtype:=vtUnicodeString;
|
||||||
|
freetemp:=false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -367,58 +367,60 @@
|
|||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
|
|
||||||
const
|
const
|
||||||
vtInteger = 0;
|
vtInteger = 0;
|
||||||
vtBoolean = 1;
|
vtBoolean = 1;
|
||||||
vtChar = 2;
|
vtChar = 2;
|
||||||
{$ifndef FPUNONE}
|
{$ifndef FPUNONE}
|
||||||
vtExtended = 3;
|
vtExtended = 3;
|
||||||
{$endif}
|
{$endif}
|
||||||
vtString = 4;
|
vtString = 4;
|
||||||
vtPointer = 5;
|
vtPointer = 5;
|
||||||
vtPChar = 6;
|
vtPChar = 6;
|
||||||
vtObject = 7;
|
vtObject = 7;
|
||||||
vtClass = 8;
|
vtClass = 8;
|
||||||
vtWideChar = 9;
|
vtWideChar = 9;
|
||||||
vtPWideChar = 10;
|
vtPWideChar = 10;
|
||||||
vtAnsiString = 11;
|
vtAnsiString = 11;
|
||||||
vtCurrency = 12;
|
vtCurrency = 12;
|
||||||
vtVariant = 13;
|
vtVariant = 13;
|
||||||
vtInterface = 14;
|
vtInterface = 14;
|
||||||
vtWideString = 15;
|
vtWideString = 15;
|
||||||
vtInt64 = 16;
|
vtInt64 = 16;
|
||||||
vtQWord = 17;
|
vtQWord = 17;
|
||||||
|
vtUnicodeString = 18;
|
||||||
|
|
||||||
type
|
type
|
||||||
PVarRec = ^TVarRec;
|
PVarRec = ^TVarRec;
|
||||||
TVarRec = record
|
TVarRec = record
|
||||||
case VType : sizeint of
|
case VType : sizeint of
|
||||||
{$ifdef ENDIAN_BIG}
|
{$ifdef ENDIAN_BIG}
|
||||||
vtInteger : ({$IFDEF CPU64}integerdummy1 : Longint;{$ENDIF CPU64}VInteger: Longint);
|
vtInteger : ({$IFDEF CPU64}integerdummy1 : Longint;{$ENDIF CPU64}VInteger: Longint);
|
||||||
vtBoolean : ({$IFDEF CPU64}booldummy : Longint;{$ENDIF CPU64}booldummy1,booldummy2,booldummy3: byte; VBoolean: Boolean);
|
vtBoolean : ({$IFDEF CPU64}booldummy : Longint;{$ENDIF CPU64}booldummy1,booldummy2,booldummy3: byte; VBoolean: Boolean);
|
||||||
vtChar : ({$IFDEF CPU64}chardummy : Longint;{$ENDIF CPU64}chardummy1,chardummy2,chardummy3: byte; VChar: Char);
|
vtChar : ({$IFDEF CPU64}chardummy : Longint;{$ENDIF CPU64}chardummy1,chardummy2,chardummy3: byte; VChar: Char);
|
||||||
vtWideChar : ({$IFDEF CPU64}widechardummy : Longint;{$ENDIF CPU64}wchardummy1,VWideChar: WideChar);
|
vtWideChar : ({$IFDEF CPU64}widechardummy : Longint;{$ENDIF CPU64}wchardummy1,VWideChar: WideChar);
|
||||||
{$else ENDIAN_BIG}
|
{$else ENDIAN_BIG}
|
||||||
vtInteger : (VInteger: Longint);
|
vtInteger : (VInteger: Longint);
|
||||||
vtBoolean : (VBoolean: Boolean);
|
vtBoolean : (VBoolean: Boolean);
|
||||||
vtChar : (VChar: Char);
|
vtChar : (VChar: Char);
|
||||||
vtWideChar : (VWideChar: WideChar);
|
vtWideChar : (VWideChar: WideChar);
|
||||||
{$endif ENDIAN_BIG}
|
{$endif ENDIAN_BIG}
|
||||||
{$ifndef FPUNONE}
|
{$ifndef FPUNONE}
|
||||||
vtExtended : (VExtended: PExtended);
|
vtExtended : (VExtended: PExtended);
|
||||||
{$endif}
|
{$endif}
|
||||||
vtString : (VString: PShortString);
|
vtString : (VString: PShortString);
|
||||||
vtPointer : (VPointer: Pointer);
|
vtPointer : (VPointer: Pointer);
|
||||||
vtPChar : (VPChar: PChar);
|
vtPChar : (VPChar: PChar);
|
||||||
vtObject : (VObject: TObject);
|
vtObject : (VObject: TObject);
|
||||||
vtClass : (VClass: TClass);
|
vtClass : (VClass: TClass);
|
||||||
vtPWideChar : (VPWideChar: PWideChar);
|
vtPWideChar : (VPWideChar: PWideChar);
|
||||||
vtAnsiString : (VAnsiString: Pointer);
|
vtAnsiString : (VAnsiString: Pointer);
|
||||||
vtCurrency : (VCurrency: PCurrency);
|
vtCurrency : (VCurrency: PCurrency);
|
||||||
vtVariant : (VVariant: PVariant);
|
vtVariant : (VVariant: PVariant);
|
||||||
vtInterface : (VInterface: Pointer);
|
vtInterface : (VInterface: Pointer);
|
||||||
vtWideString : (VWideString: Pointer);
|
vtWideString : (VWideString: Pointer);
|
||||||
vtInt64 : (VInt64: PInt64);
|
vtInt64 : (VInt64: PInt64);
|
||||||
vtQWord : (VQWord: PQWord);
|
vtUnicodeString : (VUnicodeString: Pointer);
|
||||||
|
vtQWord : (VQWord: PQWord);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
@ -310,6 +310,9 @@ begin
|
|||||||
else
|
else
|
||||||
if CheckArg(vtAnsiString,false) then
|
if CheckArg(vtAnsiString,false) then
|
||||||
hs:=ansistring(Args[doarg].VAnsiString)
|
hs:=ansistring(Args[doarg].VAnsiString)
|
||||||
|
else
|
||||||
|
if CheckArg(vtUnicodeString,false) then
|
||||||
|
hs:=UnicodeString(Args[doarg].VUnicodeString)
|
||||||
else
|
else
|
||||||
if CheckArg(vtVariant,true) then
|
if CheckArg(vtVariant,true) then
|
||||||
hs:=Args[doarg].VVariant^;
|
hs:=Args[doarg].VVariant^;
|
||||||
|
Loading…
Reference in New Issue
Block a user