compiler, rtl: add vtUnicodeString (issue #0018560)

git-svn-id: trunk@16833 -
This commit is contained in:
paul 2011-01-29 09:18:53 +00:00
parent e77a9051c8
commit e4a6221bf3
3 changed files with 80 additions and 68 deletions

View File

@ -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;

View File

@ -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

View File

@ -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^;