Browse Source

+ BrowserLog for browser.log generation
+ BrowserCol for browser info in TCollections
* released all other UseBrowser

peter 26 years ago
parent
commit
f379498229

+ 460 - 0
compiler/browcol.pas

@@ -0,0 +1,460 @@
+{
+    $Id$
+    Copyright (c) 1993-98 by the FPC development team
+
+    Support routines for getting browser info in collections
+
+    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.
+
+ ****************************************************************************
+}
+{$ifdef TP}
+  {$N+,E+}
+{$endif}
+unit browcol;
+interface
+uses
+  objects,symtable;
+
+const
+  RecordTypes : set of tsymtyp =
+    ([typesym,unitsym,programsym]);
+
+type
+    TStoreCollection = object(TStringCollection)
+      function Add(const S: string): PString;
+    end;
+
+    PModuleNameCollection = ^TModuleNameCollection;
+    TModuleNameCollection = object(TStoreCollection)
+    end;
+
+    PTypeNameCollection = ^TTypeNameCollection;
+    TTypeNameCollection = object(TStoreCollection)
+    end;
+
+    PSymbolCollection       = ^TSymbolCollection;
+    PSortedSymbolCollection = ^TSortedSymbolCollection;
+    PReferenceCollection    = ^TReferenceCollection;
+
+    PReference = ^TReference;
+    TReference = object(TObject)
+      FileName  : PString;
+      Position  : TPoint;
+      constructor Init(AFileName: PString; ALine, AColumn: Sw_integer);
+      function    GetFileName: string;
+      destructor  Done; virtual;
+    end;
+
+    PSymbol = ^TSymbol;
+    TSymbol = object(TObject)
+      Name       : PString;
+      Typ        : tsymtyp;
+      ParamCount : Sw_integer;
+      Params     : PPointerArray;
+      References : PReferenceCollection;
+      Items      : PSymbolCollection;
+      constructor Init(const AName: string; ATyp: tsymtyp; AParamCount: Sw_integer; AParams: PPointerArray);
+      procedure   SetParams(AParamCount: Sw_integer; AParams: PPointerArray);
+      function    GetReferenceCount: Sw_integer;
+      function    GetReference(Index: Sw_integer): PReference;
+      function    GetItemCount: Sw_integer;
+      function    GetItem(Index: Sw_integer): PSymbol;
+      function    GetName: string;
+      function    GetText: string;
+      function    GetTypeName: string;
+      destructor  Done; virtual;
+    end;
+
+    TSymbolCollection = object(TSortedCollection)
+       function  At(Index: Sw_Integer): PSymbol;
+       procedure Insert(Item: Pointer); virtual;
+    end;
+
+    TSortedSymbolCollection = object(TSymbolCollection)
+      function  Compare(Key1, Key2: Pointer): Sw_Integer; virtual;
+      procedure Insert(Item: Pointer); virtual;
+    end;
+
+    TReferenceCollection = object(TCollection)
+       function At(Index: Sw_Integer): PReference;
+    end;
+
+const
+  Modules     : PSymbolCollection = nil;
+  ModuleNames : PModuleNameCollection = nil;
+  TypeNames   : PTypeNameCollection = nil;
+
+
+procedure CreateBrowserCol;
+procedure InitBrowserCol;
+procedure DoneBrowserCol;
+
+
+implementation
+
+uses
+  files;
+
+
+{****************************************************************************
+                                   Helpers
+****************************************************************************}
+
+function GetStr(P: PString): string;
+begin
+  if P=nil then
+    GetStr:=''
+  else
+    GetStr:=P^;
+end;
+
+
+{****************************************************************************
+                                TStoreCollection
+****************************************************************************}
+
+function TStoreCollection.Add(const S: string): PString;
+var P: PString;
+    Index: Sw_integer;
+begin
+  if Search(@S,Index) then P:=At(Index) else
+    begin
+      P:=NewStr(S);
+      Insert(P);
+    end;
+  Add:=P;
+end;
+
+
+{****************************************************************************
+                                TSymbolCollection
+****************************************************************************}
+
+function TSymbolCollection.At(Index: Sw_Integer): PSymbol;
+begin
+  At:=inherited At(Index);
+end;
+
+procedure TSymbolCollection.Insert(Item: Pointer);
+begin
+  TCollection.Insert(Item);
+end;
+
+
+{****************************************************************************
+                               TReferenceCollection
+****************************************************************************}
+
+function TReferenceCollection.At(Index: Sw_Integer): PReference;
+begin
+  At:=inherited At(Index);
+end;
+
+
+{****************************************************************************
+                            TSortedSymbolCollection
+****************************************************************************}
+
+function TSortedSymbolCollection.Compare(Key1, Key2: Pointer): Sw_Integer;
+var K1: PSymbol absolute Key1;
+    K2: PSymbol absolute Key2;
+    R: Sw_integer;
+begin
+  if K1^.GetName<K2^.GetName then R:=-1 else
+  if K1^.GetName>K2^.GetName then R:=1 else
+  R:=0;
+  Compare:=R;
+end;
+
+procedure TSortedSymbolCollection.Insert(Item: Pointer);
+begin
+  TSortedCollection.Insert(Item);
+end;
+
+
+{****************************************************************************
+                                TReference
+****************************************************************************}
+
+constructor TReference.Init(AFileName: PString; ALine, AColumn: Sw_integer);
+begin
+  inherited Init;
+  FileName:=AFileName;
+  Position.X:=AColumn;
+  Position.Y:=ALine;
+end;
+
+function TReference.GetFileName: string;
+begin
+  GetFileName:=GetStr(FileName);
+end;
+
+destructor TReference.Done;
+begin
+  inherited Done;
+end;
+
+
+{****************************************************************************
+                                   TSymbol
+****************************************************************************}
+
+constructor TSymbol.Init(const AName: string; ATyp: tsymtyp; AParamCount: Sw_integer; AParams: PPointerArray);
+begin
+  inherited Init;
+  Name:=NewStr(AName); Typ:=ATyp;
+  SetParams(AParamCount,AParams);
+  New(References, Init(20,50));
+  if ATyp in RecordTypes then
+    begin
+      Items:=New(PSortedSymbolCollection, Init(50,100));
+    end;
+end;
+
+procedure TSymbol.SetParams(AParamCount: Sw_integer; AParams: PPointerArray);
+begin
+  if AParams=nil then AParamCount:=0 else
+  if AParamCount=0 then AParams:=nil;
+  ParamCount:=AParamCount;
+  if (ParamCount>0) and (AParams<>nil) then
+  begin
+    GetMem(Params, ParamCount*4);
+    Move(AParams^,Params^,ParamCount*4);
+  end;
+end;
+
+function TSymbol.GetReferenceCount: Sw_integer;
+var Count: Sw_integer;
+begin
+  if References=nil then Count:=0 else
+    Count:=References^.Count;
+  GetReferenceCount:=Count;
+end;
+
+function TSymbol.GetReference(Index: Sw_integer): PReference;
+begin
+  GetReference:=References^.At(Index);
+end;
+
+function TSymbol.GetItemCount: Sw_integer;
+var Count: Sw_integer;
+begin
+  if Items=nil then Count:=0 else
+    Count:=Items^.Count;
+  GetItemCount:=Count;
+end;
+
+function TSymbol.GetItem(Index: Sw_integer): PSymbol;
+begin
+  GetItem:=Items^.At(Index);
+end;
+
+function TSymbol.GetName: string;
+begin
+  GetName:=GetStr(Name);
+end;
+
+function TSymbol.GetText: string;
+var S: string;
+    I: Sw_integer;
+begin
+  S:=GetTypeName+' '+GetName;
+  if ParamCount>0 then
+    begin
+      S:=S+'(';
+      for I:=1 to ParamCount do
+        begin
+          S:=S+GetStr(Params^[I-1]);
+          if I<>ParamCount then S:=S+', ';
+        end;
+      S:=S+')';
+    end;
+  GetText:=S;
+end;
+
+function TSymbol.GetTypeName: string;
+var S: string;
+begin
+  case Typ of
+    abstractsym  : S:='abst ';
+    varsym       : S:='var  ';
+    typesym      : S:='type ';
+    procsym      : S:='proc ';
+    unitsym      : S:='unit ';
+    programsym   : S:='prog ';
+    constsym     : S:='const';
+    enumsym      : S:='enum ';
+    typedconstsym: S:='const';
+    errorsym     : S:='error';
+    syssym       : S:='sys  ';
+    labelsym     : S:='label';
+    absolutesym  : S:='abs  ';
+    propertysym  : S:='prop ';
+    funcretsym   : S:='func ';
+    macrosym     : S:='macro';
+  else S:='';
+  end;
+  GetTypeName:=S;
+end;
+
+destructor TSymbol.Done;
+begin
+  inherited Done;
+  if References<>nil then Dispose(References, Done);
+  if Items<>nil then Dispose(Items, Done);
+  if Name<>nil then DisposeStr(Name);
+  if Params<>nil then FreeMem(Params,ParamCount*2);
+end;
+
+
+procedure CreateBrowserCol;
+
+  procedure ProcessSymTable(var Owner: PSymbolCollection; Table: PSymTable);
+  var I,J,defcount, symcount: longint;
+      Ref: PRef;
+      Sym,ParSym: PSym;
+      Symbol: PSymbol;
+      Reference: PReference;
+      ParamCount: Sw_integer;
+      Params: array[0..20] of PString;
+      inputfile : pinputfile;
+  begin
+    if Assigned(Table)=false then Exit;
+    if Owner=nil then Owner:=New(PSortedSymbolCollection, Init(10,50));
+    defcount:=Table^.number_defs;
+    symcount:=Table^.number_symbols;
+  {  for I:=0 to defcount-1 do
+     begin
+       Def:=Table^.GetDefNr(I);
+     end;}
+    for I:=1 to symcount-1 do
+      begin
+        Sym:=Table^.GetsymNr(I);
+        if Sym=nil then Continue;
+        ParamCount:=0;
+        New(Symbol, Init(Sym^.Name,Sym^.Typ,0,nil));
+        case Sym^.Typ of
+          unitsym :
+            begin
+  {            ProcessSymTable(Symbol^.Items,punitsym(sym)^.unitsymtable);}
+            end;
+          procsym :
+            with pprocsym(sym)^ do
+            if assigned(definition) then
+            begin
+              if assigned(definition^.parast) then
+                begin
+                  with definition^.parast^ do
+                  for J:=1 to number_symbols do
+                    begin
+                      ParSym:=GetsymNr(J);
+                      if ParSym=nil then Break;
+                      Inc(ParamCount);
+                      Params[ParamCount-1]:=TypeNames^.Add(ParSym^.Name);
+                    end;
+                end;
+              if assigned(definition^.localst) then
+                ProcessSymTable(Symbol^.Items,definition^.localst);
+            end;
+          typesym :
+            begin
+            end;
+        end;
+        Ref:=Sym^.defref;
+        while assigned(Ref) do
+          begin
+            inputfile:=get_source_file(ref^.moduleindex,ref^.posinfo.fileindex);
+            if Assigned(inputfile) and Assigned(inputfile^.name) then
+              begin
+                New(Reference, Init(ModuleNames^.Add(inputfile^.name^),
+                  ref^.posinfo.line,ref^.posinfo.column));
+                Symbol^.References^.Insert(Reference);
+              end;
+            Ref:=Ref^.nextref;
+          end;
+        Owner^.Insert(Symbol);
+      end;
+  end;
+
+var
+  T: PSymTable;
+  UnitS: PSymbol;
+begin
+  T:=SymTableStack;
+  while T<>nil do
+   begin
+     New(UnitS, Init(T^.Name^,unitsym, 0, nil));
+     Modules^.Insert(UnitS);
+     ProcessSymTable(UnitS^.Items,T);
+     T:=T^.Next;
+   end;
+end;
+
+
+{*****************************************************************************
+                                 Initialize
+*****************************************************************************}
+
+var
+  oldexit : pointer;
+
+procedure browcol_exit;{$ifndef FPC}far;{$endif}
+begin
+  exitproc:=oldexit;
+  if assigned(Modules) then
+   begin
+     dispose(Modules,Done);
+     Modules:=nil;
+   end;
+  if assigned(ModuleNames) then
+   begin
+     dispose(ModuleNames,Done);
+     Modules:=nil;
+   end;
+  if assigned(TypeNames) then
+   begin
+     dispose(TypeNames,Done);
+     TypeNames:=nil;
+   end;
+end;
+
+
+procedure InitBrowserCol;
+begin
+  New(Modules, Init(50,50));
+  New(ModuleNames, Init(50,50));
+  New(TypeNames, Init(1000,5000));
+end;
+
+
+procedure DoneBrowserCol;
+begin
+  { nothing, the collections are freed in the exitproc }
+end;
+
+
+begin
+  oldexit:=exitproc;
+  exitproc:=@browcol_exit;
+end.
+{
+  $Log$
+  Revision 1.1  1999-01-12 14:25:24  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+}

+ 87 - 193
compiler/browser.pas → compiler/browlog.pas

@@ -2,7 +2,7 @@
     $Id$
     $Id$
     Copyright (c) 1993-98 by the FPC development team
     Copyright (c) 1993-98 by the FPC development team
 
 
-    Support routines for the browser
+    Support routines for creating the browser log
 
 
     This program is free software; you can redistribute it and/or modify
     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
     it under the terms of the GNU General Public License as published by
@@ -23,11 +23,11 @@
 {$ifdef TP}
 {$ifdef TP}
   {$N+,E+}
   {$N+,E+}
 {$endif}
 {$endif}
-unit browser;
+unit browlog;
 
 
 interface
 interface
 uses
 uses
-  cobjects,files;
+  cobjects,globtype,files,symtable;
 
 
 const
 const
 {$ifdef TP}
 {$ifdef TP}
@@ -35,20 +35,10 @@ const
 {$else}
 {$else}
   logbufsize   = 16384;
   logbufsize   = 16384;
 {$endif}
 {$endif}
-type
-  pref = ^tref;
-  tref = object
-    nextref     : pref;
-    posinfo     : tfileposinfo;
-    moduleindex : word;
-    is_written  : boolean;
-    constructor init(ref:pref;pos:pfileposinfo);
-    destructor  done; virtual;
-    function  get_file_line : string;
-  end;
 
 
-  pbrowser=^tbrowser;
-  tbrowser=object
+type
+  pbrowserlog=^tbrowserlog;
+  tbrowserlog=object
     fname    : string;
     fname    : string;
     logopen  : boolean;
     logopen  : boolean;
     stderrlog : boolean;
     stderrlog : boolean;
@@ -73,78 +63,52 @@ type
   end;
   end;
 
 
 var
 var
-  browse : tbrowser;
-
-  procedure InitBrowser;
-  procedure DoneBrowser;
-  function get_source_file(moduleindex,fileindex : word) : pinputfile;
-
-implementation
-
-  uses
-    comphook,globals,symtable,systems,verbose;
-
-{****************************************************************************
-                               TRef
-****************************************************************************}
+  browserlog : tbrowserlog;
 
 
+  procedure WriteBrowserLog;
 
 
-    constructor tref.init(ref :pref;pos : pfileposinfo);
-      begin
-        nextref:=nil;
-        if assigned(pos) then
-          posinfo:=pos^;
-        if assigned(current_module) then
-          moduleindex:=current_module^.unit_index;
-        if assigned(ref) then
-          ref^.nextref:=@self;
-        is_written:=false;
-      end;
+  procedure InitBrowserLog;
+  procedure DoneBrowserLog;
 
 
 
 
-    destructor tref.done;
-      var
-         inputfile : pinputfile;
-      begin
-         inputfile:=get_source_file(moduleindex,posinfo.fileindex);
-         if inputfile<>nil then
-           dec(inputfile^.ref_count);
-         if assigned(nextref) then
-          dispose(nextref,done);
-         nextref:=nil;
-      end;
+implementation
 
 
+  uses
+    comphook,globals,systems,verbose;
 
 
-    function tref.get_file_line : string;
+    function get_file_line(ref:pref): string;
       var
       var
          inputfile : pinputfile;
          inputfile : pinputfile;
       begin
       begin
         get_file_line:='';
         get_file_line:='';
-        inputfile:=get_source_file(moduleindex,posinfo.fileindex);
-        if assigned(inputfile) then
-          if status.use_gccoutput then
-          { for use with rhide
-            add warning so that it does not interpret
-            this as an error !! }
-            get_file_line:=lower(inputfile^.name^)
-              +':'+tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
-          else
-            get_file_line:=inputfile^.name^
-              +'('+tostr(posinfo.line)+','+tostr(posinfo.column)+')'
-        else
-          if status.use_gccoutput then
-            get_file_line:='file_unknown:'
-              +tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
-          else
-            get_file_line:='file_unknown('
-              +tostr(posinfo.line)+','+tostr(posinfo.column)+')'
+        with ref^ do
+         begin
+           inputfile:=get_source_file(moduleindex,posinfo.fileindex);
+           if assigned(inputfile) then
+             if status.use_gccoutput then
+             { for use with rhide
+               add warning so that it does not interpret
+               this as an error !! }
+               get_file_line:=lower(inputfile^.name^)
+                 +':'+tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
+             else
+               get_file_line:=inputfile^.name^
+                 +'('+tostr(posinfo.line)+','+tostr(posinfo.column)+')'
+           else
+             if status.use_gccoutput then
+               get_file_line:='file_unknown:'
+                 +tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
+             else
+               get_file_line:='file_unknown('
+                 +tostr(posinfo.line)+','+tostr(posinfo.column)+')'
+         end;
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************
                               TBrowser
                               TBrowser
 ****************************************************************************}
 ****************************************************************************}
 
 
-    constructor tbrowser.init;
+    constructor tbrowserlog.init;
       begin
       begin
         fname:=FixFileName('browser.log');
         fname:=FixFileName('browser.log');
         logopen:=false;
         logopen:=false;
@@ -152,7 +116,7 @@ implementation
       end;
       end;
 
 
 
 
-    destructor tbrowser.done;
+    destructor tbrowserlog.done;
       begin
       begin
         if logopen then
         if logopen then
          closelog;
          closelog;
@@ -160,13 +124,13 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tbrowser.setfilename(const fn:string);
+    procedure tbrowserlog.setfilename(const fn:string);
       begin
       begin
         fname:=FixFileName(fn);
         fname:=FixFileName(fn);
       end;
       end;
 
 
 
 
-    procedure tbrowser.createlog;
+    procedure tbrowserlog.createlog;
       begin
       begin
         if logopen then
         if logopen then
          closelog;
          closelog;
@@ -183,7 +147,7 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tbrowser.flushlog;
+    procedure tbrowserlog.flushlog;
       begin
       begin
         if logopen then
         if logopen then
          if not stderrlog then
          if not stderrlog then
@@ -201,7 +165,7 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tbrowser.closelog;
+    procedure tbrowserlog.closelog;
       begin
       begin
         if logopen then
         if logopen then
          begin
          begin
@@ -211,8 +175,8 @@ implementation
            logopen:=false;
            logopen:=false;
          end;
          end;
       end;
       end;
-      
-    procedure tbrowser.list_elements;
+
+    procedure tbrowserlog.list_elements;
 
 
       begin
       begin
 
 
@@ -227,7 +191,7 @@ implementation
          stderrlog:=false;
          stderrlog:=false;
       end;
       end;
 
 
-    procedure tbrowser.list_debug_infos;
+    procedure tbrowserlog.list_debug_infos;
 {$ifndef debug}
 {$ifndef debug}
       begin
       begin
       end;
       end;
@@ -250,8 +214,8 @@ implementation
            end;
            end;
       end;
       end;
 {$endif debug}
 {$endif debug}
-      
-    procedure tbrowser.addlog(const s:string);
+
+    procedure tbrowserlog.addlog(const s:string);
       begin
       begin
         if not logopen then
         if not logopen then
          exit;
          exit;
@@ -279,7 +243,7 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tbrowser.addlogrefs(p:pref);
+    procedure tbrowserlog.addlogrefs(p:pref);
       var
       var
         ref : pref;
         ref : pref;
       begin
       begin
@@ -287,14 +251,14 @@ implementation
         Ident;
         Ident;
         while assigned(ref) do
         while assigned(ref) do
          begin
          begin
-           Browse.AddLog(ref^.get_file_line);
+           Browserlog.AddLog(get_file_line(ref));
            ref:=ref^.nextref;
            ref:=ref^.nextref;
          end;
          end;
         Unident;
         Unident;
       end;
       end;
 
 
 
 
-    procedure tbrowser.browse_symbol(const sr : string);
+    procedure tbrowserlog.browse_symbol(const sr : string);
       var
       var
          sym,symb : psym;
          sym,symb : psym;
          symt : psymtable;
          symt : psymtable;
@@ -429,135 +393,65 @@ implementation
              addlog('!!!Symbol '+ss+' not found !!!');
              addlog('!!!Symbol '+ss+' not found !!!');
            make_ref:=true;
            make_ref:=true;
       end;
       end;
-      
-    procedure tbrowser.ident;
+
+    procedure tbrowserlog.ident;
       begin
       begin
         inc(identidx,2);
         inc(identidx,2);
       end;
       end;
 
 
 
 
-    procedure tbrowser.unident;
+    procedure tbrowserlog.unident;
       begin
       begin
         dec(identidx,2);
         dec(identidx,2);
       end;
       end;
 
 
+
 {****************************************************************************
 {****************************************************************************
                              Helpers
                              Helpers
 ****************************************************************************}
 ****************************************************************************}
 
 
+   procedure WriteBrowserLog;
+     var
+       p : psymtable;
+       hp : pmodule;
+     begin
+       browserlog.CreateLog;
+       browserlog.list_debug_infos;
+       hp:=pmodule(loaded_units.first);
+       while assigned(hp) do
+         begin
+            p:=psymtable(hp^.globalsymtable);
+            if assigned(p) then
+              p^.writebrowserlog;
+            if cs_local_browser in aktmoduleswitches then
+              begin
+                 p:=psymtable(hp^.localsymtable);
+                 if assigned(p) then
+                   p^.writebrowserlog;
+              end;
+            hp:=pmodule(hp^.next);
+         end;
+       browserlog.CloseLog;
+     end;
 
 
-    function get_source_file(moduleindex,fileindex : word) : pinputfile;
-
-      var
-         hp : pmodule;
-         f : pinputfile;
 
 
-      begin
-         hp:=pmodule(loaded_units.first);
-         while assigned(hp) and (hp^.unit_index<>moduleindex) do
-           hp:=pmodule(hp^.next);
-         get_source_file:=nil;
-         if not assigned(hp) then
-           exit;
-         f:=pinputfile(hp^.sourcefiles^.files);
-         while assigned(f) do
-           begin
-              if f^.ref_index=fileindex then
-                begin
-                   get_source_file:=f;
-                   exit;
-                end;
-              f:=pinputfile(f^.ref_next);
-           end;
-      end;
-
-  procedure InitBrowser;
+  procedure InitBrowserLog;
     begin
     begin
-       browse.init;
+       browserlog.init;
     end;
     end;
-    
-  procedure DoneBrowser;
+
+  procedure DoneBrowserLog;
     begin
     begin
-       browse.done;
+       browserlog.done;
     end;
     end;
-    
+
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.12  1998-10-09 16:36:01  pierre
-    * some memory leaks specific to usebrowser define fixed
-    * removed tmodule.implsymtable (was like tmodule.localsymtable)
-
-  Revision 1.11  1998/10/08 17:17:09  pierre
-    * current_module old scanner tagged as invalid if unit is recompiled
-    + added ppheap for better info on tracegetmem of heaptrc
-      (adds line column and file index)
-    * several memory leaks removed ith help of heaptrc !!
-
-  Revision 1.10  1998/09/28 16:57:12  pierre
-    * changed all length(p^.value_str^) into str_length(p)
-      to get it work with and without ansistrings
-    * changed sourcefiles field of tmodule to a pointer
-
-  Revision 1.9  1998/09/23 15:38:59  pierre
-    * browser bugfixes
-      was adding a reference when looking for the symbol
-      if -bSYM_NAME was used
-
-  Revision 1.8  1998/09/22 17:13:42  pierre
-    + browsing updated and developed
-      records and objects fields are also stored
-
-  Revision 1.7  1998/09/21 08:45:05  pierre
-    + added vmt_offset in tobjectdef.write for fututre use
-      (first steps to have objects without vmt if no virtual !!)
-    + added fpu_used field for tabstractprocdef  :
-      sets this level to 2 if the functions return with value in FPU
-      (is then set to correct value at parsing of implementation)
-      THIS MIGHT refuse some code with FPU expression too complex
-      that were accepted before and even in some cases
-      that don't overflow in fact
-      ( like if f : float; is a forward that finally in implementation
-       only uses one fpu register !!)
-      Nevertheless I think that it will improve security on
-      FPU operations !!
-    * most other changes only for UseBrowser code
-      (added symtable references for record and objects)
-      local switch for refs to args and local of each function
-      (static symtable still missing)
-      UseBrowser still not stable and probably broken by
-      the definition hash array !!
-
-  Revision 1.6  1998/09/01 07:54:16  pierre
-    * UseBrowser a little updated (might still be buggy !!)
-    * bug in psub.pas in function specifier removed
-    * stdcall allowed in interface and in implementation
-      (FPC will not yet complain if it is missing in either part
-      because stdcall is only a dummy !!)
-
-  Revision 1.5  1998/06/13 00:10:04  peter
-    * working browser and newppu
-    * some small fixes against crashes which occured in bp7 (but not in
-      fpc?!)
-
-  Revision 1.4  1998/06/11 10:11:57  peter
-    * -gb works again
-
-  Revision 1.3  1998/05/20 09:42:32  pierre
-    + UseTokenInfo now default
-    * unit in interface uses and implementation uses gives error now
-    * only one error for unknown symbol (uses lastsymknown boolean)
-      the problem came from the label code !
-    + first inlined procedures and function work
-      (warning there might be allowed cases were the result is still wrong !!)
-    * UseBrower updated gives a global list of all position of all used symbols
-      with switch -gb
-
-  Revision 1.2  1998/04/30 15:59:39  pierre
-    * GDB works again better :
-      correct type info in one pass
-    + UseTokenInfo for better source position
-    * fixed one remaining bug in scanner for line counts
-    * several little fixes
+  Revision 1.1  1999-01-12 14:25:24  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
 }
 }
 
 

+ 25 - 11
compiler/compiler.pas

@@ -80,15 +80,18 @@ uses
     dpmiexcp,
     dpmiexcp,
   {$endif GO32V2}
   {$endif GO32V2}
   {$ifdef LINUX}
   {$ifdef LINUX}
-{    catch, }
+    catch,
   {$endif LINUX}
   {$endif LINUX}
 {$endif}
 {$endif}
 {$ifdef USEEXCEPT}
 {$ifdef USEEXCEPT}
   tpexcept,
   tpexcept,
 {$endif USEEXCEPT}
 {$endif USEEXCEPT}
-{$ifdef UseBrowser}
-  browser,
-{$endif UseBrowser}
+{$ifdef BrowserLog}
+  browlog,
+{$endif BrowserLog}
+{$ifdef BrowserCol}
+  browcol,
+{$endif BrowserCol}
   dos,verbose,comphook,systems,
   dos,verbose,comphook,systems,
   globals,options,parser,symtable,link,import,export;
   globals,options,parser,symtable,link,import,export;
 
 
@@ -134,9 +137,12 @@ begin
   DoneSymtable;
   DoneSymtable;
   DoneGlobals;
   DoneGlobals;
   linker.done;
   linker.done;
-{$ifdef UseBrowser}
-  DoneBrowser;
-{$endif UseBrowser}
+{$ifdef BrowserLog}
+  DoneBrowserLog;
+{$endif BrowserLog}
+{$ifdef BrowserCol}
+  DoneBrowserCol;
+{$endif BrowserCol}
 end;
 end;
 
 
 
 
@@ -146,9 +152,12 @@ begin
    DoneCompiler;
    DoneCompiler;
 { inits which need to be done before the arguments are parsed }
 { inits which need to be done before the arguments are parsed }
   InitVerbose;
   InitVerbose;
-{$ifdef UseBrowser}
-  InitBrowser;
-{$endif UseBrowser}
+{$ifdef BrowserLog}
+  InitBrowserLog;
+{$endif BrowserLog}
+{$ifdef BrowserCol}
+  InitBrowserCol;
+{$endif BrowserCol}
   InitGlobals;
   InitGlobals;
   InitSymtable;
   InitSymtable;
   linker.init;
   linker.init;
@@ -252,7 +261,12 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.16  1998-12-15 10:23:23  peter
+  Revision 1.17  1999-01-12 14:25:25  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.16  1998/12/15 10:23:23  peter
     + -iSO, -iSP, -iTO, -iTP
     + -iSO, -iSP, -iTO, -iTP
 
 
   Revision 1.15  1998/10/29 11:35:40  florian
   Revision 1.15  1998/10/29 11:35:40  florian

+ 36 - 5
compiler/files.pas

@@ -196,12 +196,14 @@ unit files;
        usedunits      : tlinkedlist; { Used units for this program }
        usedunits      : tlinkedlist; { Used units for this program }
        loaded_units   : tlinkedlist; { All loaded units }
        loaded_units   : tlinkedlist; { All loaded units }
 
 
+  function get_source_file(moduleindex,fileindex : word) : pinputfile;
 
 
-  implementation
 
 
-  uses
-    dos,verbose,systems,
-    symtable,scanner;
+implementation
+
+uses
+  dos,verbose,systems,
+  symtable,scanner;
 
 
 {****************************************************************************
 {****************************************************************************
                                   TINPUTFILE
                                   TINPUTFILE
@@ -583,6 +585,30 @@ unit files;
      end;
      end;
 
 
 
 
+    function get_source_file(moduleindex,fileindex : word) : pinputfile;
+      var
+         hp : pmodule;
+         f : pinputfile;
+      begin
+         hp:=pmodule(loaded_units.first);
+         while assigned(hp) and (hp^.unit_index<>moduleindex) do
+           hp:=pmodule(hp^.next);
+         get_source_file:=nil;
+         if not assigned(hp) then
+           exit;
+         f:=pinputfile(hp^.sourcefiles^.files);
+         while assigned(f) do
+           begin
+              if f^.ref_index=fileindex then
+                begin
+                   get_source_file:=f;
+                   exit;
+                end;
+              f:=pinputfile(f^.ref_next);
+           end;
+      end;
+
+
 {****************************************************************************
 {****************************************************************************
                                   TMODULE
                                   TMODULE
  ****************************************************************************}
  ****************************************************************************}
@@ -1051,7 +1077,12 @@ unit files;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.81  1998-12-28 23:26:14  peter
+  Revision 1.82  1999-01-12 14:25:26  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.81  1998/12/28 23:26:14  peter
     + resource file handling ($R directive) for Win32
     + resource file handling ($R directive) for Win32
 
 
   Revision 1.80  1998/12/16 00:27:19  peter
   Revision 1.80  1998/12/16 00:27:19  peter

+ 61 - 64
compiler/parser.pas

@@ -49,9 +49,12 @@ unit parser;
       cobjects,comphook,globals,verbose,
       cobjects,comphook,globals,verbose,
       symtable,files,aasm,hcodegen,
       symtable,files,aasm,hcodegen,
       assemble,link,script,gendef,
       assemble,link,script,gendef,
-{$ifdef UseBrowser}
-      browser,
-{$endif UseBrowser}
+{$ifdef BrowserLog}
+      browlog,
+{$endif BrowserLog}
+{$ifdef BrowserCol}
+      browcol,
+{$endif BrowserCol}
 {$ifdef UseExcept}
 {$ifdef UseExcept}
       tpexcept,compiler,
       tpexcept,compiler,
 {$endif UseExcept}
 {$endif UseExcept}
@@ -159,14 +162,9 @@ unit parser;
          oldaktasmmode      : tasmmode;
          oldaktasmmode      : tasmmode;
          oldaktmodeswitches : tmodeswitches;
          oldaktmodeswitches : tmodeswitches;
 {$ifdef USEEXCEPT}
 {$ifdef USEEXCEPT}
-  recoverpos : jmp_buf;
-  oldrecoverpos : pjmp_buf;
+         recoverpos    : jmp_buf;
+         oldrecoverpos : pjmp_buf;
 {$endif useexcept}
 {$endif useexcept}
-{$ifdef usebrowser}
-{$ifdef dummydebug}
-         hp : pmodule;
-{$endif debug}
-{$endif usebrowser}
 
 
       begin
       begin
          inc(compile_level);
          inc(compile_level);
@@ -274,29 +272,29 @@ unit parser;
          { If the compile level > 1 we get a nice "unit expected" error
          { If the compile level > 1 we get a nice "unit expected" error
            message if we are trying to use a program as unit.}
            message if we are trying to use a program as unit.}
 {$ifdef USEEXCEPT}
 {$ifdef USEEXCEPT}
-  if setjmp(recoverpos)=0 then
-   begin
-     oldrecoverpos:=recoverpospointer;
-     recoverpospointer:=@recoverpos;
+         if setjmp(recoverpos)=0 then
+          begin
+            oldrecoverpos:=recoverpospointer;
+            recoverpospointer:=@recoverpos;
 {$endif USEEXCEPT}
 {$endif USEEXCEPT}
-         if (token=_UNIT) or (compile_level>1) then
-           begin
-             current_module^.is_unit:=true;
-             proc_unit;
-           end
-         else
-           proc_program(token=_LIBRARY);
-
+            if (token=_UNIT) or (compile_level>1) then
+              begin
+                current_module^.is_unit:=true;
+                proc_unit;
+              end
+            else
+              proc_program(token=_LIBRARY);
 {$ifdef USEEXCEPT}
 {$ifdef USEEXCEPT}
-       recoverpospointer:=oldrecoverpos;
-     end
-     else
-       begin
-          recoverpospointer:=oldrecoverpos;
-          longjump_used:=true;
-       end;
+            recoverpospointer:=oldrecoverpos;
+          end
+         else
+          begin
+            recoverpospointer:=oldrecoverpos;
+            longjump_used:=true;
+          end;
 {$endif USEEXCEPT}
 {$endif USEEXCEPT}
-         { clear memory }
+
+       { clear memory }
 {$ifdef Splitheap}
 {$ifdef Splitheap}
          if testsplit then
          if testsplit then
            begin
            begin
@@ -306,11 +304,10 @@ unit parser;
            end;
            end;
 {$endif Splitheap}
 {$endif Splitheap}
 
 
-         { restore old state, close trees, > 0.99.5 has heapblocks, so
-           it's the default to release the trees }
+       { restore old state, close trees, > 0.99.5 has heapblocks, so
+         it's the default to release the trees }
          codegen_donemodule;
          codegen_donemodule;
 
 
-
        { free ppu }
        { free ppu }
          if assigned(current_module^.ppufile) then
          if assigned(current_module^.ppufile) then
           begin
           begin
@@ -330,10 +327,6 @@ unit parser;
 
 
          if (compile_level>1) then
          if (compile_level>1) then
            begin
            begin
-              { reset ranges/stabs in exported definitions }
-              { reset_global_defs;
-                moved to pmodules (PM) }
-
               { restore scanner }
               { restore scanner }
               c:=oldc;
               c:=oldc;
               pattern:=oldpattern;
               pattern:=oldpattern;
@@ -383,35 +376,34 @@ unit parser;
                Message1(exec_i_closing_script,AsmRes.Fn);
                Message1(exec_i_closing_script,AsmRes.Fn);
                AsmRes.WriteToDisk;
                AsmRes.WriteToDisk;
              end;
              end;
-{$ifdef UseBrowser}
-          { Write Browser }
-{$ifdef dummydebug}
-            hp:=pmodule(loaded_units.first);
-            while assigned(hp) do
-              begin
-                 writeln('Unit ',hp^.modulename^,' has index ',hp^.unit_index);
-                 hp:=pmodule(hp^.next);
-              end;
-{$endif dummydebug}
+
+{$ifdef BrowserLog}
+          { Write Browser Log }
             if cs_browser in aktmoduleswitches then
             if cs_browser in aktmoduleswitches then
-              if Browse.elements_to_list^.empty then
+             begin
+               if browserlog.elements_to_list^.empty then
                 begin
                 begin
-                   Message1(parser_i_writing_browser_log,Browse.Fname);
-                   write_browser_log;
+                  Message1(parser_i_writing_browser_log,browserlog.Fname);
+                  WriteBrowserLog;
                 end
                 end
-              else
-                Browse.list_elements;
-{$endif UseBrowser}
-            if assigned(aktprocsym) then
-              begin
-                 if (aktprocsym^.owner=nil) then
-                   begin
-                      { init parts are not needed in units !! }
-                      if current_module^.is_unit then
-                        aktprocsym^.definition^.forwarddef:=false;
-                      dispose(aktprocsym,done);
-                   end;
-              end;
+               else
+                browserlog.list_elements;
+             end;
+{$endif BrowserLog}
+
+{$ifdef BrowserCol}
+          { Write Browser Collections }
+            CreateBrowserCol;
+{$endif}
+
+          { Free last aktprocsym }
+            if assigned(aktprocsym) and (aktprocsym^.owner=nil) then
+             begin
+               { init parts are not needed in units !! }
+               if current_module^.is_unit then
+                 aktprocsym^.definition^.forwarddef:=false;
+               dispose(aktprocsym,done);
+             end;
           end;
           end;
 
 
          dec(compile_level);
          dec(compile_level);
@@ -424,7 +416,12 @@ unit parser;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.63  1998-12-11 00:03:26  peter
+  Revision 1.64  1999-01-12 14:25:29  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.63  1998/12/11 00:03:26  peter
     + globtype,tokens,version unit splitted from globals
     + globtype,tokens,version unit splitted from globals
 
 
   Revision 1.62  1998/12/01 12:51:21  peter
   Revision 1.62  1998/12/01 12:51:21  peter

+ 14 - 12
compiler/pmodules.pas

@@ -303,7 +303,7 @@ unit pmodules;
             end;
             end;
            pu:=pused_unit(pu^.next);
            pu:=pused_unit(pu^.next);
          end;
          end;
-{$ifdef UseBrowser}
+        { load browser info if turned on }
         if cs_browser in aktmoduleswitches then
         if cs_browser in aktmoduleswitches then
           punitsymtable(current_module^.globalsymtable)^.load_symtable_refs;
           punitsymtable(current_module^.globalsymtable)^.load_symtable_refs;
         if ((current_module^.flags and uf_has_browser)<>0) and
         if ((current_module^.flags and uf_has_browser)<>0) and
@@ -314,7 +314,6 @@ unit pmodules;
               stringdup('implementation of '+psymtable(current_module^.globalsymtable)^.name^);
               stringdup('implementation of '+psymtable(current_module^.globalsymtable)^.name^);
            psymtable(current_module^.localsymtable)^.load_browser;
            psymtable(current_module^.localsymtable)^.load_browser;
          end;
          end;
-{$endif UseBrowser}
         { remove the map, it's not needed anymore }
         { remove the map, it's not needed anymore }
         dispose(current_module^.map);
         dispose(current_module^.map);
         current_module^.map:=nil;
         current_module^.map:=nil;
@@ -631,10 +630,10 @@ unit pmodules;
 
 
 
 
      procedure write_gdb_info;
      procedure write_gdb_info;
-      var
+{$IfDef GDB}
+       var
          hp : pused_unit;
          hp : pused_unit;
        begin
        begin
-{$IfDef GDB}
          if not (cs_debuginfo in aktmoduleswitches) then
          if not (cs_debuginfo in aktmoduleswitches) then
           exit;
           exit;
          { now insert the units in the symtablestack }
          { now insert the units in the symtablestack }
@@ -670,8 +669,11 @@ unit pmodules;
                    punitsymtable(current_module^.globalsymtable)^.concatstabto(debuglist);
                    punitsymtable(current_module^.globalsymtable)^.concatstabto(debuglist);
                 end;
                 end;
            end;
            end;
-{$EndIf GDB}
         end;
         end;
+{$Else GDB}
+       begin
+       end;
+{$EndIf GDB}
 
 
     procedure parse_implementation_uses(symt:Psymtable);
     procedure parse_implementation_uses(symt:Psymtable);
       begin
       begin
@@ -887,11 +889,10 @@ unit pmodules;
 
 
          { number the definitions, so a deref from other units works }
          { number the definitions, so a deref from other units works }
          refsymtable^.number_defs;
          refsymtable^.number_defs;
-{$ifdef UseBrowser}
          refsymtable^.number_symbols;
          refsymtable^.number_symbols;
          { we don't want implementation units symbols in unitsymtable !! PM }
          { we don't want implementation units symbols in unitsymtable !! PM }
          refsymtable:=st;
          refsymtable:=st;
-{$endif UseBrowser}
+
          { Read the implementation units }
          { Read the implementation units }
          parse_implementation_uses(unitst);
          parse_implementation_uses(unitst);
 
 
@@ -1043,14 +1044,12 @@ unit pmodules;
            writeunitas(current_module^.ppufilename^,punitsymtable(symtablestack));
            writeunitas(current_module^.ppufilename^,punitsymtable(symtablestack));
 
 
          { write local browser }
          { write local browser }
-{$ifdef UseBrowser}
          if cs_local_browser in aktmoduleswitches then
          if cs_local_browser in aktmoduleswitches then
           begin
           begin
             current_module^.localsymtable:=refsymtable;
             current_module^.localsymtable:=refsymtable;
             refsymtable^.write;
             refsymtable^.write;
             refsymtable^.write_browser;
             refsymtable^.write_browser;
           end;
           end;
-{$endif UseBrowser}
 
 
 {$ifdef GDB}
 {$ifdef GDB}
          pu:=pused_unit(usedunits.first);
          pu:=pused_unit(usedunits.first);
@@ -1062,10 +1061,8 @@ unit pmodules;
 {$endif GDB}
 {$endif GDB}
 
 
          { remove static symtable (=refsymtable) here to save some mem }
          { remove static symtable (=refsymtable) here to save some mem }
-{$ifndef UseBrowser}
          dispose(st,done);
          dispose(st,done);
          current_module^.localsymtable:=nil;
          current_module^.localsymtable:=nil;
-{$endif UseBrowser}
 
 
          if is_assembler_generated then
          if is_assembler_generated then
           begin
           begin
@@ -1232,7 +1229,12 @@ unit pmodules;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.93  1999-01-06 12:39:46  peter
+  Revision 1.94  1999-01-12 14:25:31  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.93  1999/01/06 12:39:46  peter
     * renamed resource -> comprsrc (conflicted with FV)
     * renamed resource -> comprsrc (conflicted with FV)
 
 
   Revision 1.92  1998/12/28 23:26:23  peter
   Revision 1.92  1998/12/28 23:26:23  peter

+ 10 - 13
compiler/symdef.inc

@@ -2139,7 +2139,6 @@
          { this is used by insert
          { this is used by insert
           to check same names in parast and localst }
           to check same names in parast and localst }
          localst^.next:=parast;
          localst^.next:=parast;
-{$ifdef UseBrowser}
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
          refcount:=0;
          refcount:=0;
@@ -2149,7 +2148,6 @@
             inc(refcount);
             inc(refcount);
           end;
           end;
          lastref:=defref;
          lastref:=defref;
-{$endif UseBrowser}
        { first, we assume, that all registers are used }
        { first, we assume, that all registers are used }
 {$ifdef i386}
 {$ifdef i386}
          usedregisters:=$ff;
          usedregisters:=$ff;
@@ -2199,16 +2197,13 @@
          parast:=nil;
          parast:=nil;
          localst:=nil;
          localst:=nil;
          forwarddef:=false;
          forwarddef:=false;
-{$ifdef UseBrowser}
          lastref:=nil;
          lastref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
          defref:=nil;
          defref:=nil;
          refcount:=0;
          refcount:=0;
-{$endif UseBrowser}
       end;
       end;
 
 
 
 
-{$ifdef UseBrowser}
     procedure tprocdef.load_references;
     procedure tprocdef.load_references;
       var
       var
         pos : tfileposinfo;
         pos : tfileposinfo;
@@ -2284,12 +2279,13 @@
       end;
       end;
 
 
 
 
+{$ifdef BrowserLog}
     procedure tprocdef.add_to_browserlog;
     procedure tprocdef.add_to_browserlog;
       begin
       begin
          if assigned(defref) then
          if assigned(defref) then
           begin
           begin
-            Browse.AddLog('***'+mangledname);
-            Browse.AddLogRefs(defref);
+            browserlog.AddLog('***'+mangledname);
+            browserlog.AddLogRefs(defref);
             if (current_module^.flags and uf_local_browser)<>0 then
             if (current_module^.flags and uf_local_browser)<>0 then
               begin
               begin
                  if assigned(parast) then
                  if assigned(parast) then
@@ -2299,15 +2295,13 @@
               end;
               end;
           end;
           end;
       end;
       end;
-{$endif UseBrowser}
+{$endif BrowserLog}
 
 
 
 
     destructor tprocdef.done;
     destructor tprocdef.done;
       begin
       begin
-{$ifdef UseBrowser}
          if assigned(defref) then
          if assigned(defref) then
            dispose(defref,done);
            dispose(defref,done);
-{$endif UseBrowser}
          if assigned(parast) then
          if assigned(parast) then
            dispose(parast,done);
            dispose(parast,done);
          if assigned(localst) and (localst^.symtabletype<>staticsymtable) then
          if assigned(localst) and (localst^.symtabletype<>staticsymtable) then
@@ -2488,7 +2482,6 @@
          if {$ifdef tp}not(use_big) and{$endif} (assigned(_mangledname)) then
          if {$ifdef tp}not(use_big) and{$endif} (assigned(_mangledname)) then
            strdispose(_mangledname);
            strdispose(_mangledname);
          setstring(_mangledname,s);
          setstring(_mangledname,s);
-{$ifdef UseBrowser}
          if assigned(parast) then
          if assigned(parast) then
            begin
            begin
               stringdispose(parast^.name);
               stringdispose(parast^.name);
@@ -2499,7 +2492,6 @@
               stringdispose(localst^.name);
               stringdispose(localst^.name);
               localst^.name:=stringdup('locals of '+s);
               localst^.name:=stringdup('locals of '+s);
            end;
            end;
-{$endif UseBrowser}
       end;
       end;
 
 
 
 
@@ -3282,7 +3274,12 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.85  1998-12-30 22:15:52  peter
+  Revision 1.86  1999-01-12 14:25:32  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.85  1998/12/30 22:15:52  peter
     + farpointer type
     + farpointer type
     * absolutesym now also stores if its far
     * absolutesym now also stores if its far
 
 

+ 9 - 5
compiler/symdefh.inc

@@ -375,12 +375,11 @@
           localst : psymtable;
           localst : psymtable;
           { pointer to the parameter symbol table }
           { pointer to the parameter symbol table }
           parast : psymtable;
           parast : psymtable;
-{$ifdef UseBrowser}
+          { browser info }
           lastref,
           lastref,
           defref,
           defref,
           lastwritten : pref;
           lastwritten : pref;
           refcount : longint;
           refcount : longint;
-{$endif UseBrowser}
           _class : pobjectdef;
           _class : pobjectdef;
           _mangledname : pchar;
           _mangledname : pchar;
           { it's a tree, but this not easy to handle }
           { it's a tree, but this not easy to handle }
@@ -412,11 +411,11 @@
           procedure deref;virtual;
           procedure deref;virtual;
           function mangledname : string;
           function mangledname : string;
           procedure setmangledname(const s : string);
           procedure setmangledname(const s : string);
-{$ifdef UseBrowser}
           procedure load_references;
           procedure load_references;
           function  write_references : boolean;
           function  write_references : boolean;
+{$ifdef BrowserLog}
           procedure add_to_browserlog;
           procedure add_to_browserlog;
-{$endif UseBrowser}
+{$endif BrowserLog}
        end;
        end;
 
 
        tstringtype = (st_shortstring, st_longstring, st_ansistring, st_widestring);
        tstringtype = (st_shortstring, st_longstring, st_ansistring, st_widestring);
@@ -494,7 +493,12 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.13  1998-12-30 22:15:53  peter
+  Revision 1.14  1999-01-12 14:25:33  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.13  1998/12/30 22:15:53  peter
     + farpointer type
     + farpointer type
     * absolutesym now also stores if its far
     * absolutesym now also stores if its far
 
 

+ 7 - 8
compiler/symppu.inc

@@ -197,12 +197,10 @@
 {$endif GDB}
 {$endif GDB}
             if target_os.endian=endian_big then
             if target_os.endian=endian_big then
              flags:=flags or uf_big_endian;
              flags:=flags or uf_big_endian;
-{$ifdef UseBrowser}
             if cs_browser in aktmoduleswitches then
             if cs_browser in aktmoduleswitches then
              flags:=flags or uf_has_browser;
              flags:=flags or uf_has_browser;
             if cs_local_browser in aktmoduleswitches then
             if cs_local_browser in aktmoduleswitches then
              flags:=flags or uf_local_browser;
              flags:=flags or uf_local_browser;
-{$endif UseBrowser}
           end;
           end;
 
 
        { open ppufile }
        { open ppufile }
@@ -325,9 +323,7 @@
         incfile_found : boolean;
         incfile_found : boolean;
         ppufiletime,
         ppufiletime,
         source_time   : longint;
         source_time   : longint;
-{$ifdef UseBrowser}
-        hp : pinputfile;
-{$endif UseBrowser}
+        hp            : pinputfile;
       begin
       begin
         ppufiletime:=getnamedfiletime(current_module^.ppufilename^);
         ppufiletime:=getnamedfiletime(current_module^.ppufilename^);
         current_module^.sources_avail:=true;
         current_module^.sources_avail:=true;
@@ -384,11 +380,9 @@
                      end;
                      end;
                   end;
                   end;
                end;
                end;
-{$ifdef UseBrowser}
               new(hp,init(hs));
               new(hp,init(hs));
               { the indexing is wrong here PM }
               { the indexing is wrong here PM }
               current_module^.sourcefiles^.register_file(hp);
               current_module^.sourcefiles^.register_file(hp);
-{$endif UseBrowser}
             end;
             end;
            Message1(unit_u_ppu_source,hs+temp);
            Message1(unit_u_ppu_source,hs+temp);
          end;
          end;
@@ -448,7 +442,12 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.27  1998-12-08 10:18:14  peter
+  Revision 1.28  1999-01-12 14:25:35  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.27  1998/12/08 10:18:14  peter
     + -gh for heaptrc unit
     + -gh for heaptrc unit
 
 
   Revision 1.26  1998/11/26 14:36:02  peter
   Revision 1.26  1998/11/26 14:36:02  peter

+ 24 - 19
compiler/symsym.inc

@@ -38,7 +38,6 @@
          isstabwritten := false;
          isstabwritten := false;
 {$endif GDB}
 {$endif GDB}
          fileinfo:=tokenpos;
          fileinfo:=tokenpos;
-{$ifdef UseBrowser}
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
          refcount:=0;
          refcount:=0;
@@ -48,7 +47,6 @@
             inc(refcount);
             inc(refcount);
           end;
           end;
          lastref:=defref;
          lastref:=defref;
-{$endif UseBrowser}
       end;
       end;
 
 
     constructor tsym.load;
     constructor tsym.load;
@@ -63,18 +61,15 @@
            properties:=symprop(readbyte)
            properties:=symprop(readbyte)
          else
          else
            properties:=sp_public;
            properties:=sp_public;
-{$ifdef UseBrowser}
          lastref:=nil;
          lastref:=nil;
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
          refcount:=0;
          refcount:=0;
-{$endif UseBrowser}
 {$ifdef GDB}
 {$ifdef GDB}
          isstabwritten := false;
          isstabwritten := false;
 {$endif GDB}
 {$endif GDB}
       end;
       end;
 
 
-{$ifdef UseBrowser}
 
 
     procedure tsym.load_references;
     procedure tsym.load_references;
       var
       var
@@ -143,15 +138,16 @@
       end;
       end;
 
 
 
 
+{$ifdef BrowserLog}
     procedure tsym.add_to_browserlog;
     procedure tsym.add_to_browserlog;
       begin
       begin
         if assigned(defref) then
         if assigned(defref) then
          begin
          begin
-           Browse.AddLog('***'+name+'***');
-           Browse.AddLogRefs(defref);
+           browserlog.AddLog('***'+name+'***');
+           browserlog.AddLogRefs(defref);
          end;
          end;
       end;
       end;
-{$endif UseBrowser}
+{$endif BrowserLog}
 
 
 
 
     destructor tsym.done;
     destructor tsym.done;
@@ -160,29 +156,28 @@
          if not(use_big) then
          if not(use_big) then
 {$endif tp}
 {$endif tp}
            strdispose(_name);
            strdispose(_name);
-{$ifdef UseBrowser}
          if assigned(defref) then
          if assigned(defref) then
-          dispose(defref,done);
-{$endif UseBrowser}
+           dispose(defref,done);
          if assigned(left) then
          if assigned(left) then
            dispose(left,done);
            dispose(left,done);
          if assigned(right) then
          if assigned(right) then
            dispose(right,done);
            dispose(right,done);
       end;
       end;
 
 
-    procedure tsym.write;
 
 
+    procedure tsym.write;
       begin
       begin
          writestring(name);
          writestring(name);
          if object_options then
          if object_options then
            writebyte(byte(properties));
            writebyte(byte(properties));
       end;
       end;
 
 
-    procedure tsym.deref;
 
 
+    procedure tsym.deref;
       begin
       begin
       end;
       end;
 
 
+
     function tsym.name : string;
     function tsym.name : string;
 {$ifdef tp}
 {$ifdef tp}
       var
       var
@@ -462,7 +457,7 @@
          current_ppu^.writeentry(ibprocsym);
          current_ppu^.writeentry(ibprocsym);
       end;
       end;
 
 
-{$ifdef UseBrowser}
+
     procedure tprocsym.load_references;
     procedure tprocsym.load_references;
       var
       var
         prdef : pprocdef;
         prdef : pprocdef;
@@ -493,6 +488,8 @@
           end;
           end;
       end;
       end;
 
 
+
+{$ifdef BrowserLog}
     procedure tprocsym.add_to_browserlog;
     procedure tprocsym.add_to_browserlog;
       var
       var
         prdef : pprocdef;
         prdef : pprocdef;
@@ -505,7 +502,8 @@
               prdef:=pprocdef(prdef)^.nextoverloaded;
               prdef:=pprocdef(prdef)^.nextoverloaded;
            end;
            end;
       end;
       end;
-{$endif UseBrowser}
+{$endif BrowserLog}
+
 
 
 {$ifdef GDB}
 {$ifdef GDB}
     function tprocsym.stabstring : pchar;
     function tprocsym.stabstring : pchar;
@@ -1646,8 +1644,6 @@
       end;
       end;
 
 
 
 
-{$ifdef UseBrowser}
-
     procedure ttypesym.load_references;
     procedure ttypesym.load_references;
       begin
       begin
          inherited load_references;
          inherited load_references;
@@ -1657,6 +1653,7 @@
              pobjectdef(definition)^.publicsyms^.load_browser;
              pobjectdef(definition)^.publicsyms^.load_browser;
       end;
       end;
 
 
+
     function ttypesym.write_references : boolean;
     function ttypesym.write_references : boolean;
       begin
       begin
         if not inherited write_references then
         if not inherited write_references then
@@ -1676,6 +1673,8 @@
              pobjectdef(definition)^.publicsyms^.write_browser;
              pobjectdef(definition)^.publicsyms^.write_browser;
       end;
       end;
 
 
+
+{$ifdef BrowserLog}
     procedure ttypesym.add_to_browserlog;
     procedure ttypesym.add_to_browserlog;
       begin
       begin
          inherited add_to_browserlog;
          inherited add_to_browserlog;
@@ -1684,7 +1683,8 @@
          if (definition^.deftype=objectdef) then
          if (definition^.deftype=objectdef) then
              pobjectdef(definition)^.publicsyms^.writebrowserlog;
              pobjectdef(definition)^.publicsyms^.writebrowserlog;
       end;
       end;
-{$endif UseBrowser}
+{$endif BrowserLog}
+
 
 
 {$ifdef GDB}
 {$ifdef GDB}
     function ttypesym.stabstring : pchar;
     function ttypesym.stabstring : pchar;
@@ -1755,7 +1755,12 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.67  1998-12-30 22:15:54  peter
+  Revision 1.68  1999-01-12 14:25:36  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.67  1998/12/30 22:15:54  peter
     + farpointer type
     + farpointer type
     * absolutesym now also stores if its far
     * absolutesym now also stores if its far
 
 

+ 12 - 10
compiler/symsymh.inc

@@ -31,7 +31,6 @@
                   constsym,enumsym,typedconstsym,errorsym,syssym,
                   constsym,enumsym,typedconstsym,errorsym,syssym,
                   labelsym,absolutesym,propertysym,funcretsym,
                   labelsym,absolutesym,propertysym,funcretsym,
                   macrosym);
                   macrosym);
-                  { varsym_C,typedconstsym_C); }
 
 
        { this object is the base for all symbol objects }
        { this object is the base for all symbol objects }
        psym = ^tsym;
        psym = ^tsym;
@@ -50,12 +49,10 @@
 {$ifdef GDB}
 {$ifdef GDB}
           isstabwritten : boolean;
           isstabwritten : boolean;
 {$endif GDB}
 {$endif GDB}
-{$ifdef UseBrowser}
           lastref,
           lastref,
           defref,
           defref,
           lastwritten : pref;
           lastwritten : pref;
           refcount    : longint;
           refcount    : longint;
-{$endif UseBrowser}
           constructor init(const n : string);
           constructor init(const n : string);
           constructor load;
           constructor load;
           destructor done;virtual;
           destructor done;virtual;
@@ -69,11 +66,11 @@
           function stabstring : pchar;virtual;
           function stabstring : pchar;virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
 {$endif GDB}
 {$endif GDB}
-{$ifdef UseBrowser}
           procedure load_references;virtual;
           procedure load_references;virtual;
           function  write_references : boolean;virtual;
           function  write_references : boolean;virtual;
+{$ifdef BrowserLog}
           procedure add_to_browserlog;virtual;
           procedure add_to_browserlog;virtual;
-{$endif UseBrowser}
+{$endif BrowserLog}
        end;
        end;
 
 
        plabelsym = ^tlabelsym;
        plabelsym = ^tlabelsym;
@@ -137,11 +134,11 @@
           procedure check_forward;
           procedure check_forward;
           procedure write;virtual;
           procedure write;virtual;
           procedure deref;virtual;
           procedure deref;virtual;
-{$ifdef UseBrowser}
           procedure load_references;virtual;
           procedure load_references;virtual;
           function  write_references : boolean;virtual;
           function  write_references : boolean;virtual;
+{$ifdef BrowserLog}
           procedure add_to_browserlog;virtual;
           procedure add_to_browserlog;virtual;
-{$endif UseBrowser}
+{$endif BrowserLog}
 {$ifdef GDB}
 {$ifdef GDB}
           function stabstring : pchar;virtual;
           function stabstring : pchar;virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
@@ -159,11 +156,11 @@
           destructor done;virtual;
           destructor done;virtual;
           procedure write;virtual;
           procedure write;virtual;
           procedure deref;virtual;
           procedure deref;virtual;
-{$ifdef UseBrowser}
           procedure load_references;virtual;
           procedure load_references;virtual;
           function  write_references : boolean;virtual;
           function  write_references : boolean;virtual;
+{$ifdef BrowserLog}
           procedure add_to_browserlog;virtual;
           procedure add_to_browserlog;virtual;
-{$endif UseBrowser}
+{$endif BrowserLog}
 {$ifdef GDB}
 {$ifdef GDB}
           function stabstring : pchar;virtual;
           function stabstring : pchar;virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
           procedure concatstabto(asmlist : paasmoutput);virtual;
@@ -324,7 +321,12 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.11  1998-12-30 22:15:55  peter
+  Revision 1.12  1999-01-12 14:25:37  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.11  1998/12/30 22:15:55  peter
     + farpointer type
     + farpointer type
     * absolutesym now also stores if its far
     * absolutesym now also stores if its far
 
 

+ 6 - 6
compiler/tccal.pas

@@ -45,9 +45,6 @@ implementation
 {$ifdef m68k}
 {$ifdef m68k}
       ,m68k,tgen68k
       ,m68k,tgen68k
 {$endif}
 {$endif}
-{$ifdef UseBrowser}
-      ,browser
-{$endif UseBrowser}
       ;
       ;
 
 
 {*****************************************************************************
 {*****************************************************************************
@@ -746,14 +743,12 @@ implementation
                      end;
                      end;
                  end ; { of while assigned(p^.symtableprocentry) do }
                  end ; { of while assigned(p^.symtableprocentry) do }
 {$endif TEST_PROCSYMS}
 {$endif TEST_PROCSYMS}
-     {$ifdef UseBrowser}
                    if make_ref then
                    if make_ref then
                      begin
                      begin
                         procs^.data^.lastref:=new(pref,init(procs^.data^.lastref,@p^.fileinfo));
                         procs^.data^.lastref:=new(pref,init(procs^.data^.lastref,@p^.fileinfo));
                         if procs^.data^.defref=nil then
                         if procs^.data^.defref=nil then
                           procs^.data^.defref:=procs^.data^.lastref;
                           procs^.data^.defref:=procs^.data^.lastref;
                      end;
                      end;
-     {$endif UseBrowser}
 
 
                    p^.procdefinition:=procs^.data;
                    p^.procdefinition:=procs^.data;
                    p^.resulttype:=procs^.data^.retdef;
                    p^.resulttype:=procs^.data^.retdef;
@@ -994,7 +989,12 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.17  1998-12-11 00:03:52  peter
+  Revision 1.18  1999-01-12 14:25:40  peter
+    + BrowserLog for browser.log generation
+    + BrowserCol for browser info in TCollections
+    * released all other UseBrowser
+
+  Revision 1.17  1998/12/11 00:03:52  peter
     + globtype,tokens,version unit splitted from globals
     + globtype,tokens,version unit splitted from globals
 
 
   Revision 1.16  1998/12/10 14:57:52  pierre
   Revision 1.16  1998/12/10 14:57:52  pierre