From 97722babadf725baf7217a66c021774533efb50d Mon Sep 17 00:00:00 2001 From: micha Date: Sat, 7 Oct 2006 09:23:38 +0000 Subject: [PATCH] generate more verbose messages in case of PPU/unit not found git-svn-id: trunk@4817 - --- compiler/fppu.pas | 48 +++++++++++++++++++++++---- compiler/verbose.pas | 78 ++++++++++++++++++++++++++------------------ 2 files changed, 87 insertions(+), 39 deletions(-) diff --git a/compiler/fppu.pas b/compiler/fppu.pas index 6c137554b5..d307995f31 100644 --- a/compiler/fppu.pas +++ b/compiler/fppu.pas @@ -43,6 +43,7 @@ interface tppumodule = class(tmodule) ppufile : tcompilerppufile; { the PPU file } sourcefn : pstring; { Source specified with "uses .. in '..'" } + comments : tstringlist; {$ifdef Test_Double_checksum} crc_array : pointer; crc_size : longint; @@ -63,6 +64,8 @@ interface procedure load_implementation; procedure load_symtable_refs; procedure load_usedunits; + procedure printcomments; + procedure queuecomment(s:string;v,w:longint); procedure writesourcefiles; procedure writeusedunit(intf:boolean); procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean); @@ -93,7 +96,8 @@ uses symtable, symsym, scanner, aasmbase,ogbase, - parser; + parser, + comphook; {**************************************************************************** Helpers @@ -131,6 +135,8 @@ uses if assigned(ppufile) then ppufile.free; ppufile:=nil; + comments.free; + comments:=nil; stringdispose(sourcefn); inherited Destroy; end; @@ -146,13 +152,34 @@ uses inherited reset; end; + procedure tppumodule.queuecomment(s:string;v,w:longint); + begin + if comments = nil then + comments := tstringlist.create; + comments.insert(s); + end; + + procedure tppumodule.printcomments; + var + comment: string; + begin + if comments = nil then + exit; + { comments are inserted in reverse order } + repeat + comment := comments.getlast; + if length(comment) = 0 then + exit; + do_comment(v_normal, comment); + until false; + end; function tppumodule.openppu:boolean; var ppufiletime : longint; begin openppu:=false; - Message1(unit_t_ppu_loading,ppufilename^); + Message1(unit_t_ppu_loading,ppufilename^,@queuecomment); { Get ppufile time (also check if the file exists) } ppufiletime:=getnamedfiletime(ppufilename^); if ppufiletime=-1 then @@ -178,7 +205,7 @@ uses { check for allowed PPU versions } if not (ppufile.GetPPUVersion = CurrentPPUVersion) then begin - Message1(unit_u_ppu_invalid_version,tostr(ppufile.GetPPUVersion)); + Message1(unit_u_ppu_invalid_version,tostr(ppufile.GetPPUVersion),@queuecomment); ppufile.free; ppufile:=nil; exit; @@ -188,7 +215,7 @@ uses begin ppufile.free; ppufile:=nil; - Message(unit_u_ppu_invalid_processor); + Message(unit_u_ppu_invalid_processor,@queuecomment); exit; end; { check target } @@ -196,7 +223,7 @@ uses begin ppufile.free; ppufile:=nil; - Message(unit_u_ppu_invalid_target); + Message(unit_u_ppu_invalid_target,@queuecomment); exit; end; {$ifdef cpufpemu} @@ -1211,7 +1238,7 @@ uses (pu.u.crc<>pu.checksum) ) then begin - Message2(unit_u_recompile_crc_change,realmodulename^,pu.u.realmodulename^); + Message2(unit_u_recompile_crc_change,realmodulename^,pu.u.realmodulename^,@queuecomment); recompile_reason:=rr_crcchanged; do_compile:=true; exit; @@ -1256,7 +1283,7 @@ uses { need to recompile the current unit ? } if (pu.u.interface_crc<>pu.interface_checksum) then begin - Message2(unit_u_recompile_crc_change,realmodulename^,pu.u.realmodulename^+' {impl}'); + Message2(unit_u_recompile_crc_change,realmodulename^,pu.u.realmodulename^+' {impl}',@queuecomment); recompile_reason:=rr_crcchanged; do_compile:=true; exit; @@ -1445,12 +1472,19 @@ uses search_unit(true,true); if not(sources_avail) then begin + printcomments; if recompile_reason=rr_noppu then Message1(unit_f_cant_find_ppu,realmodulename^) else Message1(unit_f_cant_compile_unit,realmodulename^); end; end; + { we found the sources, we do not need the verbose messages anymore } + if comments <> nil then + begin + comments.free; + comments:=nil; + end; { Flag modules to reload } flagdependent(old_current_module); { Reset the module } diff --git a/compiler/verbose.pas b/compiler/verbose.pas index a971eba3a1..4ebf147605 100644 --- a/compiler/verbose.pas +++ b/compiler/verbose.pas @@ -68,6 +68,9 @@ interface var msg : pmessage; + type + tmsgqueueevent = procedure(s:string;v,w:longint) of object; + const msgfilename : string = ''; @@ -84,16 +87,16 @@ interface procedure Internalerror(i:longint); procedure Comment(l:longint;s:string); function MessagePchar(w:longint):pchar; - procedure Message(w:longint); - procedure Message1(w:longint;const s1:string); - procedure Message2(w:longint;const s1,s2:string); - procedure Message3(w:longint;const s1,s2,s3:string); - procedure Message4(w:longint;const s1,s2,s3,s4:string); - procedure MessagePos(const pos:tfileposinfo;w:longint); - procedure MessagePos1(const pos:tfileposinfo;w:longint;const s1:string); - procedure MessagePos2(const pos:tfileposinfo;w:longint;const s1,s2:string); - procedure MessagePos3(const pos:tfileposinfo;w:longint;const s1,s2,s3:string); - procedure MessagePos4(const pos:tfileposinfo;w:longint;const s1,s2,s3,s4:string); + procedure Message(w:longint;onqueue:tmsgqueueevent=nil); + procedure Message1(w:longint;const s1:string;onqueue:tmsgqueueevent=nil); + procedure Message2(w:longint;const s1,s2:string;onqueue:tmsgqueueevent=nil); + procedure Message3(w:longint;const s1,s2,s3:string;onqueue:tmsgqueueevent=nil); + procedure Message4(w:longint;const s1,s2,s3,s4:string;onqueue:tmsgqueueevent=nil); + procedure MessagePos(const pos:tfileposinfo;w:longint;onqueue:tmsgqueueevent=nil); + procedure MessagePos1(const pos:tfileposinfo;w:longint;const s1:string;onqueue:tmsgqueueevent=nil); + procedure MessagePos2(const pos:tfileposinfo;w:longint;const s1,s2:string;onqueue:tmsgqueueevent=nil); + procedure MessagePos3(const pos:tfileposinfo;w:longint;const s1,s2,s3:string;onqueue:tmsgqueueevent=nil); + procedure MessagePos4(const pos:tfileposinfo;w:longint;const s1,s2,s3,s4:string;onqueue:tmsgqueueevent=nil); { message calls with codegenerror support } procedure cgmessage(t : longint); @@ -486,13 +489,15 @@ var end; - Procedure Msg2Comment(s:string); + Procedure Msg2Comment(s:string;w:longint;onqueue:tmsgqueueevent); var idx,i,v : longint; dostop : boolean; + doqueue : boolean; begin {Reset} dostop:=false; + doqueue:=false; v:=0; {Parse options} idx:=pos('_',s); @@ -564,13 +569,22 @@ var Delete(s,1,idx); { check verbosity level } if not CheckVerbosity(v) then - exit; + begin + doqueue := onqueue <> nil; + if not doqueue then + exit; + end; if (v and V_LineInfoMask)<>0 then v:=v or V_LineInfo; { fix status } UpdateStatus; { Fix replacements } DefaultReplacements(s); + if doqueue then + begin + onqueue(s,v,w); + exit; + end; { show comment } if do_comment(v,s) or dostop then raise ECompilerAbort.Create; @@ -590,98 +604,98 @@ var end; - procedure Message(w:longint); + procedure Message(w:longint;onqueue:tmsgqueueevent=nil); begin MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[])); + Msg2Comment(msg^.Get(w,[]),w,onqueue); end; - procedure Message1(w:longint;const s1:string); + procedure Message1(w:longint;const s1:string;onqueue:tmsgqueueevent=nil); begin MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1])); + Msg2Comment(msg^.Get(w,[s1]),w,onqueue); end; - procedure Message2(w:longint;const s1,s2:string); + procedure Message2(w:longint;const s1,s2:string;onqueue:tmsgqueueevent=nil); begin MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2])); + Msg2Comment(msg^.Get(w,[s1,s2]),w,onqueue); end; - procedure Message3(w:longint;const s1,s2,s3:string); + procedure Message3(w:longint;const s1,s2,s3:string;onqueue:tmsgqueueevent=nil); begin MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2,s3])); + Msg2Comment(msg^.Get(w,[s1,s2,s3]),w,onqueue); end; - procedure Message4(w:longint;const s1,s2,s3,s4:string); + procedure Message4(w:longint;const s1,s2,s3,s4:string;onqueue:tmsgqueueevent=nil); begin MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2,s3,s4])); + Msg2Comment(msg^.Get(w,[s1,s2,s3,s4]),w,onqueue); end; - procedure MessagePos(const pos:tfileposinfo;w:longint); + procedure MessagePos(const pos:tfileposinfo;w:longint;onqueue:tmsgqueueevent=nil); var oldpos : tfileposinfo; begin oldpos:=aktfilepos; aktfilepos:=pos; MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[])); + Msg2Comment(msg^.Get(w,[]),w,onqueue); aktfilepos:=oldpos; end; - procedure MessagePos1(const pos:tfileposinfo;w:longint;const s1:string); + procedure MessagePos1(const pos:tfileposinfo;w:longint;const s1:string;onqueue:tmsgqueueevent=nil); var oldpos : tfileposinfo; begin oldpos:=aktfilepos; aktfilepos:=pos; MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1])); + Msg2Comment(msg^.Get(w,[s1]),w,onqueue); aktfilepos:=oldpos; end; - procedure MessagePos2(const pos:tfileposinfo;w:longint;const s1,s2:string); + procedure MessagePos2(const pos:tfileposinfo;w:longint;const s1,s2:string;onqueue:tmsgqueueevent=nil); var oldpos : tfileposinfo; begin oldpos:=aktfilepos; aktfilepos:=pos; MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2])); + Msg2Comment(msg^.Get(w,[s1,s2]),w,onqueue); aktfilepos:=oldpos; end; - procedure MessagePos3(const pos:tfileposinfo;w:longint;const s1,s2,s3:string); + procedure MessagePos3(const pos:tfileposinfo;w:longint;const s1,s2,s3:string;onqueue:tmsgqueueevent=nil); var oldpos : tfileposinfo; begin oldpos:=aktfilepos; aktfilepos:=pos; MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2,s3])); + Msg2Comment(msg^.Get(w,[s1,s2,s3]),w,onqueue); aktfilepos:=oldpos; end; - procedure MessagePos4(const pos:tfileposinfo;w:longint;const s1,s2,s3,s4:string); + procedure MessagePos4(const pos:tfileposinfo;w:longint;const s1,s2,s3,s4:string;onqueue:tmsgqueueevent=nil); var oldpos : tfileposinfo; begin oldpos:=aktfilepos; aktfilepos:=pos; MaybeLoadMessageFile; - Msg2Comment(msg^.Get(w,[s1,s2,s3,s4])); + Msg2Comment(msg^.Get(w,[s1,s2,s3,s4]),w,onqueue); aktfilepos:=oldpos; end;