Explorar o código

compiler, rtl: add vtUnicodeString (issue #0018560)

git-svn-id: trunk@16833 -
paul %!s(int64=14) %!d(string=hai) anos
pai
achega
e4a6221bf3
Modificáronse 3 ficheiros con 80 adicións e 68 borrados
  1. 28 21
      compiler/ncgld.pas
  2. 49 47
      rtl/inc/objpash.inc
  3. 3 0
      rtl/objpas/sysutils/sysformt.inc

+ 28 - 21
compiler/ncgld.pas

@@ -974,26 +974,27 @@ implementation
 *****************************************************************************}
 *****************************************************************************}
 
 
       const
       const
-        vtInteger    = 0;
-        vtBoolean    = 1;
-        vtChar       = 2;
-        vtExtended   = 3;
-        vtString     = 4;
-        vtPointer    = 5;
-        vtPChar      = 6;
-        vtObject     = 7;
-        vtClass      = 8;
-        vtWideChar   = 9;
-        vtPWideChar  = 10;
-        vtAnsiString32 = 11;
-        vtCurrency   = 12;
-        vtVariant    = 13;
-        vtInterface  = 14;
-        vtWideString = 15;
-        vtInt64      = 16;
-        vtQWord      = 17;
-        vtAnsiString16 = 18;
-        vtAnsiString64 = 19;
+        vtInteger       = 0;
+        vtBoolean       = 1;
+        vtChar          = 2;
+        vtExtended      = 3;
+        vtString        = 4;
+        vtPointer       = 5;
+        vtPChar         = 6;
+        vtObject        = 7;
+        vtClass         = 8;
+        vtWideChar      = 9;
+        vtPWideChar     = 10;
+        vtAnsiString32  = 11;
+        vtCurrency      = 12;
+        vtVariant       = 13;
+        vtInterface     = 14;
+        vtWideString    = 15;
+        vtInt64         = 16;
+        vtQWord         = 17;
+        vtUnicodeString = 18;
+        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;

+ 49 - 47
rtl/inc/objpash.inc

@@ -367,58 +367,60 @@
 *****************************************************************************}
 *****************************************************************************}
 
 
    const
    const
-      vtInteger    = 0;
-      vtBoolean    = 1;
-      vtChar       = 2;
-{$ifndef FPUNONE}
-      vtExtended   = 3;
-{$endif}
-      vtString     = 4;
-      vtPointer    = 5;
-      vtPChar      = 6;
-      vtObject     = 7;
-      vtClass      = 8;
-      vtWideChar   = 9;
-      vtPWideChar  = 10;
-      vtAnsiString = 11;
-      vtCurrency   = 12;
-      vtVariant    = 13;
-      vtInterface  = 14;
-      vtWideString = 15;
-      vtInt64      = 16;
-      vtQWord      = 17;
+      vtInteger       = 0;
+      vtBoolean       = 1;
+      vtChar          = 2;
+{$ifndef FPUNONE}     
+      vtExtended      = 3;
+{$endif}              
+      vtString        = 4;
+      vtPointer       = 5;
+      vtPChar         = 6;
+      vtObject        = 7;
+      vtClass         = 8;
+      vtWideChar      = 9;
+      vtPWideChar     = 10;
+      vtAnsiString    = 11;
+      vtCurrency      = 12;
+      vtVariant       = 13;
+      vtInterface     = 14;
+      vtWideString    = 15;
+      vtInt64         = 16;
+      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}
-           vtInteger    : ({$IFDEF CPU64}integerdummy1 : Longint;{$ENDIF CPU64}VInteger: Longint);
-           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);
-           vtWideChar   : ({$IFDEF CPU64}widechardummy : Longint;{$ENDIF CPU64}wchardummy1,VWideChar: WideChar);
-{$else ENDIAN_BIG}
-           vtInteger    : (VInteger: Longint);
-           vtBoolean    : (VBoolean: Boolean);
-           vtChar       : (VChar: Char);
-           vtWideChar   : (VWideChar: WideChar);
-{$endif ENDIAN_BIG}
-{$ifndef FPUNONE}
-           vtExtended   : (VExtended: PExtended);
-{$endif}
-           vtString     : (VString: PShortString);
-           vtPointer    : (VPointer: Pointer);
-           vtPChar      : (VPChar: PChar);
-           vtObject     : (VObject: TObject);
-           vtClass      : (VClass: TClass);
-           vtPWideChar  : (VPWideChar: PWideChar);
-           vtAnsiString : (VAnsiString: Pointer);
-           vtCurrency   : (VCurrency: PCurrency);
-           vtVariant    : (VVariant: PVariant);
-           vtInterface  : (VInterface: Pointer);
-           vtWideString : (VWideString: Pointer);
-           vtInt64      : (VInt64: PInt64);
-           vtQWord      : (VQWord: PQWord);
+{$ifdef ENDIAN_BIG}        
+           vtInteger       : ({$IFDEF CPU64}integerdummy1 : Longint;{$ENDIF CPU64}VInteger: Longint);
+           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);
+           vtWideChar      : ({$IFDEF CPU64}widechardummy : Longint;{$ENDIF CPU64}wchardummy1,VWideChar: WideChar);
+{$else ENDIAN_BIG}         
+           vtInteger       : (VInteger: Longint);
+           vtBoolean       : (VBoolean: Boolean);
+           vtChar          : (VChar: Char);
+           vtWideChar      : (VWideChar: WideChar);
+{$endif ENDIAN_BIG}        
+{$ifndef FPUNONE}          
+           vtExtended      : (VExtended: PExtended);
+{$endif}                   
+           vtString        : (VString: PShortString);
+           vtPointer       : (VPointer: Pointer);
+           vtPChar         : (VPChar: PChar);
+           vtObject        : (VObject: TObject);
+           vtClass         : (VClass: TClass);
+           vtPWideChar     : (VPWideChar: PWideChar);
+           vtAnsiString    : (VAnsiString: Pointer);
+           vtCurrency      : (VCurrency: PCurrency);
+           vtVariant       : (VVariant: PVariant);
+           vtInterface     : (VInterface: Pointer);
+           vtWideString    : (VWideString: Pointer);
+           vtInt64         : (VInt64: PInt64);
+           vtUnicodeString : (VUnicodeString: Pointer);
+           vtQWord         : (VQWord: PQWord);
        end;
        end;
 
 
   var
   var

+ 3 - 0
rtl/objpas/sysutils/sysformt.inc

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