Browse Source

* very basic widestring support

florian 26 years ago
parent
commit
89c403c529

+ 5 - 2
compiler/htypechk.pas

@@ -95,7 +95,7 @@ implementation
           (bvoid,bvoid,bchar,
            bint,bint,bint,
            bint,bint,bint,
-           bbool,bbool,bbool,bint,bint);
+           bbool,bbool,bbool,bint,bint,bchar);
 
         basedefconverts : array[tbasedef,tbasedef] of tconverttype =
          ((tc_not_possible,tc_not_possible,tc_not_possible,tc_not_possible),
@@ -847,7 +847,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.52  1999-12-16 19:12:04  peter
+  Revision 1.53  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.52  1999/12/16 19:12:04  peter
     * allow constant pointer^ also for assignment
 
   Revision 1.51  1999/12/09 09:35:54  peter

+ 5 - 1
compiler/options.pas

@@ -1131,6 +1131,7 @@ begin
   def_symbol('SYSTEMTVARREC');
   def_symbol('INCLUDEOK');
   def_symbol('NEWMM');
+  def_symbol('HASWIDECHAR');
 {$ifdef FPC_USE_CPREFIX}
   { default on next round }
   def_symbol('FPC_USE_CPREFIX');
@@ -1338,7 +1339,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.42  1999-12-11 18:53:31  jonas
+  Revision 1.43  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.42  1999/12/11 18:53:31  jonas
     * fixed type conversions of results of operations with cardinals
       (between -dcardinalmulfix)
 

+ 8 - 1
compiler/psystem.pas

@@ -88,6 +88,7 @@ begin
   p^.insert(new(ptypesym,initdef('qword',cu64bitdef)));
   p^.insert(new(ptypesym,initdef('int64',cs64bitdef)));
   p^.insert(new(ptypesym,initdef('char',cchardef)));
+  p^.insert(new(ptypesym,initdef('widechar',cwidechardef)));
   p^.insert(new(ptypesym,initdef('shortstring',cshortstringdef)));
   p^.insert(new(ptypesym,initdef('longstring',clongstringdef)));
   p^.insert(new(ptypesym,initdef('ansistring',cansistringdef)));
@@ -139,6 +140,7 @@ begin
   p^.insert(new(ptypesym,initdef('WORDBOOL',new(porddef,init(bool16bit,0,1)))));
   p^.insert(new(ptypesym,initdef('LONGBOOL',new(porddef,init(bool32bit,0,1)))));
   p^.insert(new(ptypesym,initdef('CHAR',cchardef)));
+  p^.insert(new(ptypesym,initdef('WIDECHAR',cwidechardef)));
   p^.insert(new(ptypesym,initdef('TEXT',new(pfiledef,inittext))));
   p^.insert(new(ptypesym,initdef('CARDINAL',u32bitdef)));
   p^.insert(new(ptypesym,initdef('FIXED',new(pfloatdef,init(f32bit)))));
@@ -163,6 +165,7 @@ begin
   cformaldef:=pformaldef(globaldef('formal'));
   voiddef:=porddef(globaldef('void'));
   cchardef:=porddef(globaldef('char'));
+  cwidechardef:=porddef(globaldef('char'));
   cshortstringdef:=pstringdef(globaldef('shortstring'));
   clongstringdef:=pstringdef(globaldef('longstring'));
   cansistringdef:=pstringdef(globaldef('ansistring'));
@@ -202,6 +205,7 @@ begin
   cs64bitdef:=new(porddef,init(s64bit,0,0));
   booldef:=new(porddef,init(bool8bit,0,1));
   cchardef:=new(porddef,init(uchar,0,255));
+  cwidechardef:=new(porddef,init(uwidechar,0,65535));
   cshortstringdef:=new(pstringdef,shortinit(255));
   { should we give a length to the default long and ansi string definition ?? }
   clongstringdef:=new(pstringdef,longinit(-1));
@@ -237,7 +241,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.30  1999-11-30 10:40:51  peter
+  Revision 1.31  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.30  1999/11/30 10:40:51  peter
     + ttype, tsymlist
 
   Revision 1.29  1999/11/06 14:34:23  peter

+ 9 - 1
compiler/ptconst.pas

@@ -148,6 +148,11 @@ unit ptconst;
                                   Message(cg_e_illegal_expression);
                                 curconstsegment^.concat(new(pai_const,init_8bit(p^.value)));
                             end;
+                    uwidechar : begin
+                                if not is_constcharnode(p) then
+                                  Message(cg_e_illegal_expression);
+                                curconstsegment^.concat(new(pai_const,init_16bit(p^.value)));
+                            end;
                     u16bit,
                     s16bit : begin
                                 if not is_constintnode(p) then
@@ -764,7 +769,10 @@ unit ptconst;
 end.
 {
   $Log$
-  Revision 1.59  1999-11-30 10:40:51  peter
+  Revision 1.60  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.59  1999/11/30 10:40:51  peter
     + ttype, tsymlist
 
   Revision 1.58  1999/11/08 18:50:11  florian

+ 5 - 2
compiler/symconst.pas

@@ -50,7 +50,7 @@ type
     u8bit,u16bit,u32bit,
     s8bit,s16bit,s32bit,
     bool8bit,bool16bit,bool32bit,
-    u64bit,s64bit
+    u64bit,s64bit,uwidechar
   );
 
   { float types }
@@ -212,7 +212,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.7  1999-11-30 10:40:54  peter
+  Revision 1.8  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.7  1999/11/30 10:40:54  peter
     + ttype, tsymlist
 
   Revision 1.6  1999/11/17 17:05:04  pierre

+ 8 - 3
compiler/symdef.inc

@@ -1026,7 +1026,7 @@
                   savesize:=1;
 
                 u16bit,s16bit,
-                bool16bit:
+                bool16bit,uwidechar:
                   savesize:=2;
 
                 s32bit,u32bit,
@@ -1130,6 +1130,8 @@
             bool8bit:
               rttilist^.concat(new(pai_const,init_8bit(tkBool)));
             uchar:
+              rttilist^.concat(new(pai_const,init_8bit(tkWChar)));
+            uwidechar:
               rttilist^.concat(new(pai_const,init_8bit(tkChar)));
             else
               rttilist^.concat(new(pai_const,init_8bit(tkInteger)));
@@ -1152,7 +1154,7 @@
         names : array[tbasetype] of string[20] = ('<unknown type>',
           'untyped','Char','Byte','Word','DWord','ShortInt',
           'SmallInt','LongInt','Boolean','WordBool',
-          'LongBool','QWord','Int64');
+          'LongBool','QWord','Int64','WideChar');
 
       begin
          gettypename:=names[typ];
@@ -3841,7 +3843,10 @@ Const local_symtable_index : longint = $8001;
 
 {
   $Log$
-  Revision 1.180  1999-12-06 18:21:03  peter
+  Revision 1.181  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.180  1999/12/06 18:21:03  peter
     * support !ENVVAR for long commandlines
     * win32/go32v2 write short pathnames to link.res so c:\Program Files\ is
       finally supported as installdir.

+ 5 - 1
compiler/symtable.pas

@@ -300,6 +300,7 @@ unit symtable;
        cformaldef : pformaldef;    { unique formal definition     }
        voiddef   : porddef;     { Pointer to Void (procedure)       }
        cchardef  : porddef;     { Pointer to Char                  }
+       cwidechardef : porddef;  { Pointer to WideChar }
        booldef   : porddef;     { pointer to boolean type          }
        u8bitdef  : porddef;     { Pointer to 8-Bit unsigned      }
        u16bitdef : porddef;     { Pointer to 16-Bit unsigned    }
@@ -2791,7 +2792,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.70  1999-12-02 11:28:27  peter
+  Revision 1.71  1999-12-18 14:55:21  florian
+    * very basic widestring support
+
+  Revision 1.70  1999/12/02 11:28:27  peter
     * moved verbose to implementation uses
 
   Revision 1.69  1999/12/01 22:32:35  pierre

+ 7 - 1
rtl/inc/system.inc

@@ -116,6 +116,9 @@ Procedure Rewrite(var f : TypedFile); [INTERNPROC: In_Rewrite_TypedFile];
 
 {$i astrings.inc}
 
+{$ifdef haswidechar}
+{$i wstrings.inc}
+{$endif haswidechar}
 
 {****************************************************************************
                          Run-Time Type Information (RTTI)
@@ -590,7 +593,10 @@ end;
 
 {
   $Log$
-  Revision 1.75  1999-12-12 13:29:34  jonas
+  Revision 1.76  1999-12-18 14:54:34  florian
+    * very basic widestring support
+
+  Revision 1.75  1999/12/12 13:29:34  jonas
     * remove "random(longint): longint" if cardinalmulfixed is defined
 
   Revision 1.74  1999/12/01 12:37:13  jonas

+ 7 - 1
rtl/inc/systemh.inc

@@ -81,6 +81,9 @@ Type
 { Zero - terminated strings }
   PChar       = ^Char;
   PPChar      = ^PChar;
+{$ifdef HASWIDECHAR}
+  PWideChar = ^WideChar;
+{$endif HASWIDECHAR}
 
 { procedure type }
   TProcedure  = Procedure;
@@ -402,7 +405,10 @@ const
 
 {
   $Log$
-  Revision 1.70  1999-12-12 13:29:34  jonas
+  Revision 1.71  1999-12-18 14:55:05  florian
+    * very basic widestring support
+
+  Revision 1.70  1999/12/12 13:29:34  jonas
     * remove "random(longint): longint" if cardinalmulfixed is defined
 
   Revision 1.69  1999/12/01 12:37:13  jonas