Browse Source

* farpointerdef moved into pointerdef.is_far

peter 26 years ago
parent
commit
49786e5fe5
8 changed files with 58 additions and 57 deletions
  1. 6 3
      compiler/cg386mem.pas
  2. 5 2
      compiler/pexpr.pas
  3. 6 3
      compiler/pmodules.pas
  4. 4 2
      compiler/ppu.pas
  5. 18 29
      compiler/symdef.inc
  6. 8 11
      compiler/symdefh.inc
  7. 5 4
      compiler/symtable.pas
  8. 6 3
      compiler/tcmem.pas

+ 6 - 3
compiler/cg386mem.pas

@@ -312,7 +312,7 @@ implementation
                  p^.location.reference.base:=hr;
               end;
          end;
-         if p^.left^.resulttype^.deftype=farpointerdef then
+         if ppointerdef(p^.left^.resulttype)^.is_far then
           p^.location.reference.segment:=R_FS;
       end;
 
@@ -635,7 +635,7 @@ implementation
                      emitrangecheck(p^.right,p^.left^.resulttype);
                    end;
                end;
-               
+
               case p^.right^.location.loc of
                  LOC_REGISTER:
                    begin
@@ -882,7 +882,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.33  1999-03-26 11:43:26  pierre
+  Revision 1.34  1999-04-26 18:29:54  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.33  1999/03/26 11:43:26  pierre
    * bug0236 fixed
 
   Revision 1.32  1999/03/24 23:16:53  peter

+ 5 - 2
compiler/pexpr.pas

@@ -1201,7 +1201,7 @@ unit pexpr;
                 CARET:
                   begin
                     consume(CARET);
-                    if not(pd^.deftype in [pointerdef,farpointerdef]) then
+                    if (pd^.deftype<>pointerdef) then
                       begin
                          { ^ as binary operator is a problem!!!! (FK) }
                          again:=false;
@@ -1972,7 +1972,10 @@ unit pexpr;
 end.
 {
   $Log$
-  Revision 1.97  1999-04-19 09:27:48  peter
+  Revision 1.98  1999-04-26 18:29:56  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.97  1999/04/19 09:27:48  peter
     * removed my property fix
 
   Revision 1.96  1999/04/19 09:13:47  peter

+ 6 - 3
compiler/pmodules.pas

@@ -384,7 +384,7 @@ unit pmodules;
         st : punitsymtable;
         second_time : boolean;
         old_current_ppu : pppufile;
-        old_current_module,hp,hp2 : pmodule;
+        old_current_module,hp,hp2,hp3 : pmodule;
         name : string;{ necessary because
         current_module^.mainsource^ is reset in compile !! }
         scanner : pscannerfile;
@@ -505,7 +505,7 @@ unit pmodules;
                   if hp2^.do_reload then
                    begin
                      hp2^.do_reload:=false;
-                     loadunit(hp^.modulename^,false);
+                     hp3:=loadunit(hp^.modulename^,false);
                    end;
                   hp2:=pmodule(hp2^.next);
                 end;
@@ -1357,7 +1357,10 @@ unit pmodules;
 end.
 {
   $Log$
-  Revision 1.114  1999-04-26 13:31:39  peter
+  Revision 1.115  1999-04-26 18:29:58  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.114  1999/04/26 13:31:39  peter
     * release storenumber,double_checksum
 
   Revision 1.113  1999/04/25 17:32:14  peter

+ 4 - 2
compiler/ppu.pas

@@ -110,7 +110,6 @@ const
   iblongstringdef  = 54;
   ibansistringdef  = 55;
   ibwidestringdef  = 56;
-  ibfarpointerdef  = 57;
 
 { unit flags }
   uf_init          = $1;
@@ -869,7 +868,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.29  1999-04-26 13:31:41  peter
+  Revision 1.30  1999-04-26 18:30:00  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.29  1999/04/26 13:31:41  peter
     * release storenumber,double_checksum
 
   Revision 1.28  1999/04/26 09:33:07  peter

+ 18 - 29
compiler/symdef.inc

@@ -1283,6 +1283,17 @@
          inherited init;
          deftype:=pointerdef;
          definition:=def;
+         is_far:=false;
+         savesize:=target_os.size_of_pointer;
+      end;
+
+
+    constructor tpointerdef.initfar(def : pdef);
+      begin
+         inherited init;
+         deftype:=pointerdef;
+         definition:=def;
+         is_far:=true;
          savesize:=target_os.size_of_pointer;
       end;
 
@@ -1293,6 +1304,7 @@
          deftype:=pointerdef;
          { the real address in memory is calculated later (deref) }
          definition:=readdefref;
+         is_far:=(readbyte<>0);
          savesize:=target_os.size_of_pointer;
       end;
 
@@ -1307,6 +1319,7 @@
       begin
          inherited write;
          writedefref(definition);
+         writebyte(byte(is_far));
          current_ppu^.writeentry(ibpointerdef);
       end;
 
@@ -1366,34 +1379,6 @@
 {$endif GDB}
 
 
-{****************************************************************************
-                             TFARPOINTERDEF
-****************************************************************************}
-
-    constructor tfarpointerdef.init(def : pdef);
-      begin
-         inherited init(def);
-         deftype:=farpointerdef;
-         savesize:=target_os.size_of_pointer;
-      end;
-
-
-    constructor tfarpointerdef.load;
-      begin
-         inherited load;
-         deftype:=farpointerdef;
-         savesize:=target_os.size_of_pointer;
-      end;
-
-
-    procedure tfarpointerdef.write;
-      begin
-         tdef.write;
-         writedefref(definition);
-         current_ppu^.writeentry(ibfarpointerdef);
-      end;
-
-
 {****************************************************************************
                               TCLASSREFDEF
 ****************************************************************************}
@@ -1419,6 +1404,7 @@
          { be careful, tclassdefref inherits from tpointerdef }
          tdef.write;
          writedefref(definition);
+         writebyte(byte(is_far));
          current_ppu^.writeentry(ibclassrefdef);
       end;
 
@@ -3465,7 +3451,10 @@ Const local_symtable_index : longint = $8001;
 
 {
   $Log$
-  Revision 1.105  1999-04-26 13:31:47  peter
+  Revision 1.106  1999-04-26 18:30:01  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.105  1999/04/26 13:31:47  peter
     * release storenumber,double_checksum
 
   Revision 1.104  1999/04/21 09:43:50  peter

+ 8 - 11
compiler/symdefh.inc

@@ -28,7 +28,7 @@
        tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
                    stringdef,enumdef,procdef,objectdef,errordef,
                    filedef,formaldef,setdef,procvardef,floatdef,
-                   classrefdef,farpointerdef);
+                   classrefdef);
 
        pdef = ^tdef;
 {$ifndef OLDPPU}
@@ -157,25 +157,19 @@
        tpointerdef = object(tdef)
           definition : pdef;
           defsym : ptypesym;
+          is_far : boolean;
           constructor init(def : pdef);
+          constructor initfar(def : pdef);
           constructor load;
           procedure write;virtual;
 {$ifdef GDB}
-          function stabstring : pchar;virtual;
+          function  stabstring : pchar;virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
 {$endif GDB}
           procedure deref;virtual;
        end;
 
 
-       pfarpointerdef = ^tfarpointerdef;
-       tfarpointerdef = object(tpointerdef)
-          constructor init(def : pdef);
-          constructor load;
-          procedure write;virtual;
-       end;
-
-
        pobjectdef = ^tobjectdef;
        tobjectdef = object(tdef)
           childof : pobjectdef;
@@ -512,7 +506,10 @@
 
 {
   $Log$
-  Revision 1.22  1999-04-26 13:31:49  peter
+  Revision 1.23  1999-04-26 18:30:02  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.22  1999/04/26 13:31:49  peter
     * release storenumber,double_checksum
 
   Revision 1.21  1999/04/21 09:43:52  peter

+ 5 - 4
compiler/symtable.pas

@@ -293,7 +293,7 @@ unit symtable;
 
        voidpointerdef : ppointerdef; { pointer for Void-Pointerdef      }
        charpointerdef : ppointerdef; { pointer for Char-Pointerdef      }
-       voidfarpointerdef : pfarpointerdef;
+       voidfarpointerdef : ppointerdef;
 
        voiddef   : porddef;        { Pointer to Void (procedure)       }
        cchardef  : porddef;        { Pointer to Char                   }
@@ -318,6 +318,8 @@ unit symtable;
        cwidestringdef  : pstringdef;  { pointer to type of wide string const  }
        openshortstringdef : pstringdef;  { pointer to type of an open shortstring,
                                             needed for readln() }
+       openchararraydef : parraydef;     { pointer to type of an open array of char,
+                                            needed for readln() }
 
        cfiledef : pfiledef;       { get the same definition for all file }
                                   { uses for stabs }
@@ -1222,7 +1224,6 @@ const localsymtablestack : psymtable = nil;
               ibprocvardef : hp:=new(pprocvardef,load);
                  ibfiledef : hp:=new(pfiledef,load);
              ibclassrefdef : hp:=new(pclassrefdef,load);
-           ibfarpointerdef : hp:=new(pfarpointerdef,load);
                ibformaldef : hp:=new(pformaldef,load);
                  ibenddefs : break;
                      ibend : Message(unit_f_ppu_read_error);
@@ -3202,8 +3203,8 @@ const localsymtablestack : psymtable = nil;
 end.
 {
   $Log$
-  Revision 1.2  1999-04-26 15:12:25  peter
-    * reinstered
+  Revision 1.3  1999-04-26 18:30:03  peter
+    * farpointerdef moved into pointerdef.is_far
 
   Revision 1.151  1999/04/26 13:31:54  peter
     * release storenumber,double_checksum

+ 6 - 3
compiler/tcmem.pas

@@ -229,7 +229,7 @@ implementation
                      if not(cs_typed_addresses in aktlocalswitches) then
                        p^.resulttype:=voidfarpointerdef
                      else
-                       p^.resulttype:=new(pfarpointerdef,init(p^.left^.resulttype));
+                       p^.resulttype:=new(ppointerdef,initfar(p^.left^.resulttype));
                    end
                   else
                    begin
@@ -311,7 +311,7 @@ implementation
          p^.registersmmx:=p^.left^.registersmmx;
 {$endif SUPPORT_MMX}
 
-         if not(p^.left^.resulttype^.deftype in [pointerdef,farpointerdef]) then
+         if p^.left^.resulttype^.deftype<>pointerdef then
           CGMessage(cg_e_invalid_qualifier);
 
          p^.resulttype:=ppointerdef(p^.left^.resulttype)^.definition;
@@ -555,7 +555,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.12  1999-03-02 18:24:24  peter
+  Revision 1.13  1999-04-26 18:30:05  peter
+    * farpointerdef moved into pointerdef.is_far
+
+  Revision 1.12  1999/03/02 18:24:24  peter
     * fixed overloading of array of char
 
   Revision 1.11  1999/02/22 02:15:54  peter