Browse Source

* File now obsolete; moved to symtype.pas

daniel 21 years ago
parent
commit
7484f26734
1 changed files with 0 additions and 486 deletions
  1. 0 486
      compiler/symppu.pas

+ 0 - 486
compiler/symppu.pas

@@ -1,486 +0,0 @@
-{
-    $Id$
-    Copyright (c) 1998-2002 by Florian Klaempfl, Pierre Muller
-
-    Implementation of the reading of PPU Files for the symtable
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- ****************************************************************************
-}
-unit symppu;
-
-{$i fpcdefs.inc}
-
-interface
-
-    uses
-       cclasses,
-       globtype,globals,
-       cpuinfo,aasmbase,
-       symbase,symtype,
-       ppu;
-
-    type
-       tcompilerppufile=class(tppufile)
-       public
-         procedure checkerror;
-         procedure getguid(var g: tguid);
-         function  getexprint:tconstexprint;
-         function  getptruint:TConstPtrUInt;
-         procedure getposinfo(var p:tfileposinfo);
-         procedure getderef(var d:tderef);
-         function  getsymlist:tsymlist;
-         procedure gettype(var t:ttype);
-         function  getasmsymbol:tasmsymbol;
-         procedure putguid(const g: tguid);
-         procedure putexprint(v:tconstexprint);
-         procedure PutPtrUInt(v:TConstPtrUInt);
-         procedure putposinfo(const p:tfileposinfo);
-         procedure putderef(const d:tderef);
-         procedure putsymlist(p:tsymlist);
-         procedure puttype(const t:ttype);
-         procedure putasmsymbol(s:tasmsymbol);
-       end;
-
-
-implementation
-
-    uses
-       symconst,
-       verbose;
-
-{*****************************************************************************
-                            TCompilerPPUFile
-*****************************************************************************}
-
-    procedure tcompilerppufile.checkerror;
-      begin
-        if error then
-         Message(unit_f_ppu_read_error);
-      end;
-
-
-    procedure tcompilerppufile.getguid(var g: tguid);
-      begin
-        getdata(g,sizeof(g));
-      end;
-
-
-    function tcompilerppufile.getexprint:tconstexprint;
-      var
-        l1,l2 : longint;
-      begin
-        if sizeof(tconstexprint)=8 then
-          begin
-            l1:=getlongint;
-            l2:=getlongint;
-{$ifopt R+}
-  {$define Range_check_on}
-{$endif opt R+}
-{$R- needed here }
-{$ifdef Delphi}
-            result:=int64(l1)+(int64(l2) shl 32);
-{$else}
-            result:=qword(l1)+(int64(l2) shl 32);
-{$endif}
-{$ifdef Range_check_on}
-  {$R+}
-  {$undef Range_check_on}
-{$endif Range_check_on}
-          end
-        else
-          result:=tconstexprint(getlongint);
-      end;
-
-
-    function tcompilerppufile.getPtrUInt:TConstPtrUInt;
-      var
-        l1,l2 : longint;
-      begin
-        if sizeof(TConstPtrUInt)=8 then
-          begin
-            l1:=getlongint;
-            l2:=getlongint;
-{$ifopt R+}
-  {$define Range_check_on}
-{$endif opt R+}
-{$R- needed here }
-{$ifdef Delphi}
-            result:=int64(l1)+(int64(l2) shl 32);
-{$else}
-            result:=qword(l1)+(int64(l2) shl 32);
-{$endif}
-{$ifdef Range_check_on}
-  {$R+}
-  {$undef Range_check_on}
-{$endif Range_check_on}
-          end
-        else
-          result:=TConstPtrUInt(getlongint);
-      end;
-
-
-    procedure tcompilerppufile.getposinfo(var p:tfileposinfo);
-      var
-        info : byte;
-      begin
-        {
-          info byte layout in bits:
-          0-1 - amount of bytes for fileindex
-          2-3 - amount of bytes for line
-          4-5 - amount of bytes for column
-        }
-        info:=getbyte;
-        case (info and $03) of
-         0 : p.fileindex:=getbyte;
-         1 : p.fileindex:=getword;
-         2 : p.fileindex:=(getbyte shl 16) or getword;
-         3 : p.fileindex:=getlongint;
-        end;
-        case ((info shr 2) and $03) of
-         0 : p.line:=getbyte;
-         1 : p.line:=getword;
-         2 : p.line:=(getbyte shl 16) or getword;
-         3 : p.line:=getlongint;
-        end;
-        case ((info shr 4) and $03) of
-         0 : p.column:=getbyte;
-         1 : p.column:=getword;
-         2 : p.column:=(getbyte shl 16) or getword;
-         3 : p.column:=getlongint;
-        end;
-      end;
-
-
-    procedure tcompilerppufile.getderef(var d:tderef);
-      begin
-        d.dataidx:=getlongint;
-      end;
-
-
-    function tcompilerppufile.getsymlist:tsymlist;
-      var
-        symderef : tderef;
-        tt  : ttype;
-        slt : tsltype;
-        idx : longint;
-        p   : tsymlist;
-      begin
-        p:=tsymlist.create;
-        getderef(p.procdefderef);
-        repeat
-          slt:=tsltype(getbyte);
-          case slt of
-            sl_none :
-              break;
-            sl_call,
-            sl_load,
-            sl_subscript :
-              begin
-                getderef(symderef);
-                p.addsymderef(slt,symderef);
-              end;
-            sl_typeconv :
-              begin
-                gettype(tt);
-                p.addtype(slt,tt);
-              end;
-            sl_vec :
-              begin
-                idx:=getlongint;
-                p.addconst(slt,idx);
-              end;
-            else
-              internalerror(200110204);
-          end;
-        until false;
-        getsymlist:=tsymlist(p);
-      end;
-
-
-    procedure tcompilerppufile.gettype(var t:ttype);
-      begin
-        getderef(t.deref);
-        t.def:=nil;
-        t.sym:=nil;
-      end;
-
-
-    function  tcompilerppufile.getasmsymbol:tasmsymbol;
-      begin
-        getasmsymbol:=tasmsymbol(pointer(getlongint));
-      end;
-
-
-    procedure tcompilerppufile.putposinfo(const p:tfileposinfo);
-      var
-        oldcrc : boolean;
-        info   : byte;
-      begin
-        { posinfo is not relevant for changes in PPU }
-        oldcrc:=do_crc;
-        do_crc:=false;
-        {
-          info byte layout in bits:
-          0-1 - amount of bytes for fileindex
-          2-3 - amount of bytes for line
-          4-5 - amount of bytes for column
-        }
-        info:=0;
-        { calculate info byte }
-        if (p.fileindex>$ff) then
-         begin
-           if (p.fileindex<=$ffff) then
-            info:=info or $1
-           else
-            if (p.fileindex<=$ffffff) then
-             info:=info or $2
-           else
-            info:=info or $3;
-          end;
-        if (p.line>$ff) then
-         begin
-           if (p.line<=$ffff) then
-            info:=info or $4
-           else
-            if (p.line<=$ffffff) then
-             info:=info or $8
-           else
-            info:=info or $c;
-          end;
-        if (p.column>$ff) then
-         begin
-           if (p.column<=$ffff) then
-            info:=info or $10
-           else
-            if (p.column<=$ffffff) then
-             info:=info or $20
-           else
-            info:=info or $30;
-          end;
-        { write data }
-        putbyte(info);
-        case (info and $03) of
-         0 : putbyte(p.fileindex);
-         1 : putword(p.fileindex);
-         2 : begin
-               putbyte(p.fileindex shr 16);
-               putword(p.fileindex and $ffff);
-             end;
-         3 : putlongint(p.fileindex);
-        end;
-        case ((info shr 2) and $03) of
-         0 : putbyte(p.line);
-         1 : putword(p.line);
-         2 : begin
-               putbyte(p.line shr 16);
-               putword(p.line and $ffff);
-             end;
-         3 : putlongint(p.line);
-        end;
-        case ((info shr 4) and $03) of
-         0 : putbyte(p.column);
-         1 : putword(p.column);
-         2 : begin
-               putbyte(p.column shr 16);
-               putword(p.column and $ffff);
-             end;
-         3 : putlongint(p.column);
-        end;
-        do_crc:=oldcrc;
-      end;
-
-
-    procedure tcompilerppufile.putguid(const g: tguid);
-      begin
-        putdata(g,sizeof(g));
-      end;
-
-
-    procedure tcompilerppufile.putexprint(v:tconstexprint);
-      begin
-        if sizeof(TConstExprInt)=8 then
-          begin
-             putlongint(longint(lo(v)));
-             putlongint(longint(hi(v)));
-          end
-        else if sizeof(TConstExprInt)=4 then
-          putlongint(longint(v))
-        else
-          internalerror(2002082601);
-      end;
-
-
-    procedure tcompilerppufile.PutPtrUInt(v:TConstPtrUInt);
-      begin
-        if sizeof(TConstPtrUInt)=8 then
-          begin
-             putlongint(longint(lo(v)));
-             putlongint(longint(hi(v)));
-          end
-        else if sizeof(TConstPtrUInt)=4 then
-          putlongint(longint(v))
-        else
-          internalerror(2002082601);
-      end;
-
-
-    procedure tcompilerppufile.putderef(const d:tderef);
-      var
-        oldcrc : boolean;
-      begin
-        oldcrc:=do_crc;
-        do_crc:=false;
-        putlongint(d.dataidx);
-        do_crc:=oldcrc;
-      end;
-
-
-    procedure tcompilerppufile.putsymlist(p:tsymlist);
-      var
-        hp : psymlistitem;
-      begin
-        putderef(p.procdefderef);
-        hp:=p.firstsym;
-        while assigned(hp) do
-         begin
-           putbyte(byte(hp^.sltype));
-           case hp^.sltype of
-             sl_call,
-             sl_load,
-             sl_subscript :
-               putderef(hp^.symderef);
-             sl_typeconv :
-               puttype(hp^.tt);
-             sl_vec :
-               putlongint(hp^.value);
-             else
-              internalerror(200110205);
-           end;
-           hp:=hp^.next;
-         end;
-        putbyte(byte(sl_none));
-      end;
-
-
-    procedure tcompilerppufile.puttype(const t:ttype);
-      begin
-        putderef(t.deref);
-      end;
-
-
-    procedure tcompilerppufile.putasmsymbol(s:tasmsymbol);
-      begin
-        if assigned(s) then
-         begin
-           if s.ppuidx=-1 then
-            begin
-              inc(objectlibrary.asmsymbolppuidx);
-              s.ppuidx:=objectlibrary.asmsymbolppuidx;
-            end;
-           putlongint(s.ppuidx);
-         end
-        else
-         putlongint(0);
-      end;
-
-
-end.
-{
-  $Log$
-  Revision 1.25  2004-01-23 15:47:23  peter
-    * range check error
-
-  Revision 1.24  2003/12/22 22:15:13  peter
-    * fix write pointerconst
-
-  Revision 1.23  2003/10/28 15:36:01  peter
-    * absolute to object field supported, fixes tb0458
-
-  Revision 1.22  2003/10/23 14:44:07  peter
-    * splitted buildderef and buildderefimpl to fix interface crc
-      calculation
-
-  Revision 1.21  2003/10/22 20:40:00  peter
-    * write derefdata in a separate ppu entry
-
-  Revision 1.20  2003/10/07 16:06:30  peter
-    * tsymlist.def renamed to tsymlist.procdef
-    * tsymlist.procdef is now only used to store the procdef
-
-  Revision 1.19  2003/06/07 20:26:32  peter
-    * re-resolving added instead of reloading from ppu
-    * tderef object added to store deref info for resolving
-
-  Revision 1.18  2002/12/21 13:07:34  peter
-    * type redefine fix for tb0437
-
-  Revision 1.17  2002/10/05 12:43:29  carl
-    * fixes for Delphi 6 compilation
-     (warning : Some features do not work under Delphi)
-
-  Revision 1.16  2002/08/26 14:05:57  pierre
-   * fixed compilation cycle with -Cr option by adding explicit
-     longint typecast in PutPtrUInt and putexprint methods.
-   + added checks for sizeof and internalerros if size is not handled.
-
-  Revision 1.15  2002/08/18 20:06:26  peter
-    * inlining is now also allowed in interface
-    * renamed write/load to ppuwrite/ppuload
-    * tnode storing in ppu
-    * nld,ncon,nbas are already updated for storing in ppu
-
-  Revision 1.14  2002/08/11 14:32:28  peter
-    * renamed current_library to objectlibrary
-
-  Revision 1.13  2002/08/11 13:24:14  peter
-    * saving of asmsymbols in ppu supported
-    * asmsymbollist global is removed and moved into a new class
-      tasmlibrarydata that will hold the info of a .a file which
-      corresponds with a single module. Added librarydata to tmodule
-      to keep the library info stored for the module. In the future the
-      objectfiles will also be stored to the tasmlibrarydata class
-    * all getlabel/newasmsymbol and friends are moved to the new class
-
-  Revision 1.12  2002/05/18 13:34:18  peter
-    * readded missing revisions
-
-  Revision 1.11  2002/05/16 19:46:45  carl
-  + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
-  + try to fix temp allocation (still in ifdef)
-  + generic constructor calls
-  + start of tassembler / tmodulebase class cleanup
-
-  Revision 1.9  2002/05/12 16:53:15  peter
-    * moved entry and exitcode to ncgutil and cgobj
-    * foreach gets extra argument for passing local data to the
-      iterator function
-    * -CR checks also class typecasts at runtime by changing them
-      into as
-    * fixed compiler to cycle with the -CR option
-    * fixed stabs with elf writer, finally the global variables can
-      be watched
-    * removed a lot of routines from cga unit and replaced them by
-      calls to cgobj
-    * u32bit-s32bit updates for and,or,xor nodes. When one element is
-      u32bit then the other is typecasted also to u32bit without giving
-      a rangecheck warning/error.
-    * fixed pascal calling method with reversing also the high tree in
-      the parast, detected by tcalcst3 test
-
-  Revision 1.8  2002/04/19 15:40:40  peter
-    * optimize tfileposinfo writing, this reduces the ppu size with 20%
-
-}