mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 12:09:55 +02:00

* overflow checking bugfix (m68k and i386) -- pretty useless in secondadd, since everything is done using 32-bit * loading pointer to routines hopefully fixed (m68k) * flags problem with calls to RTL internal routines fixed (still strcmp to fix) (m68k) * #ELSE was still incorrect (didn't take care of the previous level) * problem with filenames in the command line solved * problem with mangledname solved * linking name problem solved (was case insensitive) * double id problem and potential crash solved * stop after first error * and=>test problem removed * correct read for all float types * 2 sigsegv fixes and a cosmetic fix for Internal Error * push/pop is now correct optimized (=> mov (%esp),reg)
283 lines
6.8 KiB
ObjectPascal
283 lines
6.8 KiB
ObjectPascal
{
|
|
$Id$
|
|
Copyright (c) 1998 by Peter Vreman
|
|
|
|
This unit handles the default verbose routines
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
****************************************************************************
|
|
}
|
|
unit verb_def;
|
|
interface
|
|
uses verbose;
|
|
|
|
{$define allow_oldstyle}
|
|
|
|
var
|
|
UseStdErr : boolean;
|
|
procedure SetRedirectFile(const fn:string);
|
|
|
|
procedure _stop;
|
|
procedure _comment(Level:Longint;const s:string);
|
|
{$ifdef allow_oldstyle}
|
|
function _warning(w : tmsgconst) : boolean;
|
|
function _note(w : tmsgconst) : boolean;
|
|
function _error(w : tmsgconst) : boolean;
|
|
function _fatalerror(w : tmsgconst) : boolean;
|
|
function _internalerror(i : longint) : boolean;
|
|
{$endif}
|
|
|
|
implementation
|
|
uses
|
|
strings,dos,cobjects,systems,globals,files;
|
|
|
|
const
|
|
{$ifdef USE_RHIDE}
|
|
{ RHIDE expect gcc like error output }
|
|
fatalstr='fatal: ';
|
|
errorstr='error: ';
|
|
warningstr='warning: ';
|
|
notestr='warning: ';
|
|
hintstr='warning: ';
|
|
{$else}
|
|
fatalstr='Fatal Error: ';
|
|
errorstr='Error: ';
|
|
warningstr='Warning: ';
|
|
notestr='Note: ';
|
|
hintstr='Hint: ';
|
|
{$endif USE_RHIDE}
|
|
|
|
var
|
|
redirexitsave : pointer;
|
|
redirtext : boolean;
|
|
redirfile : text;
|
|
|
|
{****************************************************************************
|
|
Extra Handlers for default compiler
|
|
****************************************************************************}
|
|
|
|
procedure DoneRedirectFile;{$ifndef FPC}far;{$ENDIF}
|
|
begin
|
|
exitproc:=redirexitsave;
|
|
if redirtext then
|
|
close(redirfile);
|
|
end;
|
|
|
|
|
|
procedure SetRedirectFile(const fn:string);
|
|
begin
|
|
assign(redirfile,fn);
|
|
{$I-}
|
|
rewrite(redirfile);
|
|
{$I+}
|
|
redirtext:=(ioresult=0);
|
|
if redirtext then
|
|
begin
|
|
redirexitsave:=exitproc;
|
|
exitproc:=@DoneRedirectFile;
|
|
end;
|
|
end;
|
|
|
|
|
|
{****************************************************************************
|
|
Predefined default Handlers
|
|
****************************************************************************}
|
|
|
|
|
|
{ predefined handler to stop the compiler }
|
|
procedure _stop;
|
|
begin
|
|
halt(1);
|
|
end;
|
|
|
|
|
|
Procedure _comment(Level:Longint;const s:string);
|
|
var
|
|
hs : string;
|
|
{$ifdef USE_RHIDE}
|
|
i : longint;
|
|
{$endif}
|
|
begin
|
|
if (verbosity and Level)=Level then
|
|
begin
|
|
{Create hs}
|
|
hs:='';
|
|
if (verbosity and Level)=V_Hint then
|
|
hs:=hintstr;
|
|
if (verbosity and Level)=V_Note then
|
|
hs:=notestr;
|
|
if (verbosity and Level)=V_Warning then
|
|
hs:=warningstr;
|
|
if (verbosity and Level)=V_Error then
|
|
hs:=errorstr;
|
|
if (verbosity and Level)=V_Fatal then
|
|
hs:=fatalstr;
|
|
if (Level<$100) and Assigned(current_module) and
|
|
Assigned(current_module^.current_inputfile) then
|
|
hs:=current_module^.current_inputfile^.get_file_line+' '+hs;
|
|
{$ifdef USE_RHIDE}
|
|
if (Level<$100) then
|
|
begin
|
|
i:=length(hs)+1;
|
|
hs:=hs+lowercase(Copy(s,1,5))+Copy(s,6,255);
|
|
end
|
|
else
|
|
{$endif USE_RHIDE}
|
|
hs:=hs+s;
|
|
{$ifdef FPC}
|
|
if UseStdErr and (Level<$100) then
|
|
begin
|
|
writeln(stderr,hs);
|
|
flush(stderr);
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
begin
|
|
if redirtext then
|
|
writeln(redirfile,hs)
|
|
else
|
|
writeln(hs);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
function _internalerror(i : longint) : boolean;
|
|
begin
|
|
comment(V_Fatal,'Internal error '+tostr(i));
|
|
_internalerror:=true;
|
|
end;
|
|
|
|
{****************************************************************************
|
|
Old Style
|
|
****************************************************************************}
|
|
|
|
|
|
{$ifdef allow_oldstyle}
|
|
|
|
procedure ShowExtError(l:longint;w:tmsgconst);
|
|
var
|
|
s : string;
|
|
begin
|
|
{fix the string to be written }
|
|
s:=msg^.get(ord(w));
|
|
if assigned(exterror) then
|
|
begin
|
|
s:=s+strpas(exterror);
|
|
strdispose(exterror);
|
|
exterror:=nil;
|
|
end;
|
|
_comment(l,s);
|
|
end;
|
|
|
|
|
|
{ predefined handler for warnings }
|
|
function _warning(w : tmsgconst) : boolean;
|
|
begin
|
|
ShowExtError(V_Warning,w);
|
|
_warning:=false;
|
|
end;
|
|
|
|
|
|
function _note(w : tmsgconst) : boolean;
|
|
begin
|
|
ShowExtError(V_Note,w);
|
|
_note:=false;
|
|
end;
|
|
|
|
|
|
function _error(w : tmsgconst) : boolean;
|
|
begin
|
|
ShowExtError(V_Error,w);
|
|
_error:=(errorcount>50);
|
|
end;
|
|
|
|
|
|
function _fatalerror(w : tmsgconst) : boolean;
|
|
begin
|
|
ShowExtError(V_Error,w);
|
|
_fatalerror:=true;
|
|
end;
|
|
|
|
{$endif}
|
|
|
|
begin
|
|
{$ifdef FPC}
|
|
do_stop:=@_stop;
|
|
do_comment:=@_comment;
|
|
{$ifdef allow_oldstyle}
|
|
do_note:=@_note;
|
|
do_warning:=@_warning;
|
|
do_error:=@_error;
|
|
do_fatalerror:=@_fatalerror;
|
|
do_internalerror:=@_internalerror;
|
|
{$endif}
|
|
{$else}
|
|
do_stop:=_stop;
|
|
do_comment:=_comment;
|
|
{$ifdef allow_oldstyle}
|
|
do_note:=_note;
|
|
do_warning:=_warning;
|
|
do_error:=_error;
|
|
do_fatalerror:=_fatalerror;
|
|
do_internalerror:=_internalerror;
|
|
{$endif}
|
|
{$endif}
|
|
end.
|
|
{
|
|
$Log$
|
|
Revision 1.2 1998-03-28 23:09:57 florian
|
|
* secondin bugfix (m68k and i386)
|
|
* overflow checking bugfix (m68k and i386) -- pretty useless in
|
|
secondadd, since everything is done using 32-bit
|
|
* loading pointer to routines hopefully fixed (m68k)
|
|
* flags problem with calls to RTL internal routines fixed (still strcmp
|
|
to fix) (m68k)
|
|
* #ELSE was still incorrect (didn't take care of the previous level)
|
|
* problem with filenames in the command line solved
|
|
* problem with mangledname solved
|
|
* linking name problem solved (was case insensitive)
|
|
* double id problem and potential crash solved
|
|
* stop after first error
|
|
* and=>test problem removed
|
|
* correct read for all float types
|
|
* 2 sigsegv fixes and a cosmetic fix for Internal Error
|
|
* push/pop is now correct optimized (=> mov (%esp),reg)
|
|
|
|
Revision 1.1.1.1 1998/03/25 11:18:15 root
|
|
* Restored version
|
|
|
|
Revision 1.6 1998/03/10 16:43:34 peter
|
|
* fixed Fatal error writting
|
|
|
|
Revision 1.5 1998/03/10 01:17:30 peter
|
|
* all files have the same header
|
|
* messages are fully implemented, EXTDEBUG uses Comment()
|
|
+ AG... files for the Assembler generation
|
|
|
|
Revision 1.4 1998/03/06 00:53:02 peter
|
|
* replaced all old messages from errore.msg, only ExtDebug and some
|
|
Comment() calls are left
|
|
* fixed options.pas
|
|
|
|
Revision 1.3 1998/03/04 17:34:15 michael
|
|
+ Changed ifdef FPK to ifdef FPC
|
|
|
|
Revision 1.2 1998/03/03 16:45:25 peter
|
|
+ message support for assembler parsers
|
|
|
|
}
|