+ BrowserLog for browser.log generation

+ BrowserCol for browser info in TCollections
  * released all other UseBrowser
This commit is contained in:
peter 1999-01-12 14:25:24 +00:00
parent 8e645c448e
commit f379498229
12 changed files with 750 additions and 345 deletions

460
compiler/browcol.pas Normal file
View File

@ -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
}

View File

@ -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; type
tbrowser=object 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; browserlog : tbrowserlog;
procedure WriteBrowserLog;
procedure InitBrowserLog;
procedure DoneBrowserLog;
procedure InitBrowser;
procedure DoneBrowser;
function get_source_file(moduleindex,fileindex : word) : pinputfile;
implementation implementation
uses uses
comphook,globals,symtable,systems,verbose; comphook,globals,systems,verbose;
{**************************************************************************** function get_file_line(ref:pref): string;
TRef
****************************************************************************}
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;
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;
function tref.get_file_line : string;
var var
inputfile : pinputfile; inputfile : pinputfile;
begin begin
get_file_line:=''; get_file_line:='';
inputfile:=get_source_file(moduleindex,posinfo.fileindex); with ref^ do
if assigned(inputfile) then begin
if status.use_gccoutput then inputfile:=get_source_file(moduleindex,posinfo.fileindex);
{ for use with rhide if assigned(inputfile) then
add warning so that it does not interpret if status.use_gccoutput then
this as an error !! } { for use with rhide
get_file_line:=lower(inputfile^.name^) add warning so that it does not interpret
+':'+tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':' this as an error !! }
else get_file_line:=lower(inputfile^.name^)
get_file_line:=inputfile^.name^ +':'+tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
+'('+tostr(posinfo.line)+','+tostr(posinfo.column)+')' else
else get_file_line:=inputfile^.name^
if status.use_gccoutput then +'('+tostr(posinfo.line)+','+tostr(posinfo.column)+')'
get_file_line:='file_unknown:' else
+tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':' if status.use_gccoutput then
else get_file_line:='file_unknown:'
get_file_line:='file_unknown(' +tostr(posinfo.line)+': warning: '+tostr(posinfo.column)+':'
+tostr(posinfo.line)+','+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 procedure InitBrowserLog;
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;
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 Revision 1.1 1999-01-12 14:25:24 peter
* some memory leaks specific to usebrowser define fixed + BrowserLog for browser.log generation
* removed tmodule.implsymtable (was like tmodule.localsymtable) + BrowserCol for browser info in TCollections
* released all other UseBrowser
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
} }

View File

@ -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} {$ifdef BrowserLog}
browser, browlog,
{$endif UseBrowser} {$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} {$ifdef BrowserLog}
DoneBrowser; DoneBrowserLog;
{$endif UseBrowser} {$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} {$ifdef BrowserLog}
InitBrowser; InitBrowserLog;
{$endif UseBrowser} {$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

View File

@ -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 implementation
dos,verbose,systems,
symtable,scanner; 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

View File

@ -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} {$ifdef BrowserLog}
browser, browlog,
{$endif UseBrowser} {$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; recoverpos : jmp_buf;
oldrecoverpos : pjmp_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 if setjmp(recoverpos)=0 then
begin begin
oldrecoverpos:=recoverpospointer; oldrecoverpos:=recoverpospointer;
recoverpospointer:=@recoverpos; recoverpospointer:=@recoverpos;
{$endif USEEXCEPT} {$endif USEEXCEPT}
if (token=_UNIT) or (compile_level>1) then if (token=_UNIT) or (compile_level>1) then
begin begin
current_module^.is_unit:=true; current_module^.is_unit:=true;
proc_unit; proc_unit;
end end
else else
proc_program(token=_LIBRARY); proc_program(token=_LIBRARY);
{$ifdef USEEXCEPT} {$ifdef USEEXCEPT}
recoverpospointer:=oldrecoverpos; recoverpospointer:=oldrecoverpos;
end end
else else
begin begin
recoverpospointer:=oldrecoverpos; recoverpospointer:=oldrecoverpos;
longjump_used:=true; longjump_used:=true;
end; 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 { restore old state, close trees, > 0.99.5 has heapblocks, so
it's the default to release the trees } 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 BrowserLog}
{$ifdef dummydebug} { Write Browser Log }
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}
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); Message1(parser_i_writing_browser_log,browserlog.Fname);
write_browser_log; WriteBrowserLog;
end end
else else
Browse.list_elements; browserlog.list_elements;
{$endif UseBrowser} end;
if assigned(aktprocsym) then {$endif BrowserLog}
begin
if (aktprocsym^.owner=nil) then {$ifdef BrowserCol}
begin { Write Browser Collections }
{ init parts are not needed in units !! } CreateBrowserCol;
if current_module^.is_unit then {$endif}
aktprocsym^.definition^.forwarddef:=false;
dispose(aktprocsym,done); { Free last aktprocsym }
end; if assigned(aktprocsym) and (aktprocsym^.owner=nil) then
end; 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

View File

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

View File

@ -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); browserlog.AddLog('***'+mangledname);
Browse.AddLogRefs(defref); 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

View File

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

View File

@ -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;
hp : pinputfile;
{$endif UseBrowser}
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

View File

@ -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+'***'); browserlog.AddLog('***'+name+'***');
Browse.AddLogRefs(defref); 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); dispose(defref,done);
{$endif UseBrowser}
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

View File

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

View File

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