-- Compiler Toolkit: basic error management -- -- Author : Manuel M. T. Chakravarty -- Created: 20 February 95 -- -- Version $Revision: 1.2 $ from $Date: 2004/11/13 17:26:50 $ -- -- Copyright (c) [1995..2000] Manuel M. T. Chakravarty -- -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Library General Public -- License as published by the Free Software Foundation; either -- version 2 of the License, or (at your option) any later version. -- -- This library 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 -- Library General Public License for more details. -- --- DESCRIPTION --------------------------------------------------------------- -- -- This modules exports some auxilliary routines for error handling. -- --- DOCU ---------------------------------------------------------------------- -- -- language: Haskell 98 -- -- * the single lines of error messages shouldn't be to long as file name -- and position are prepended at each line -- --- TODO ---------------------------------------------------------------------- -- module Errors ( -- handling of internal error -- interr, todo, -- -- errors in the compiled program -- ErrorLvl(..), Error, makeError, errorLvl, showError, errorAtPos ) where import Position (Position(..), isInternalPos) -- internal errors -- --------------- -- raise a fatal internal error; message may have multiple lines (EXPORTED) -- interr :: String -> a interr msg = error ("INTERNAL COMPILER ERROR:\n" ++ indentMultilineString 2 msg ++ "\n") -- raise a error due to a implementation restriction; message may have multiple -- lines (EXPORTED) -- todo :: String -> a todo msg = error ("Feature not yet implemented:\n" ++ indentMultilineString 2 msg ++ "\n") -- errors in the compiled program -- ------------------------------ -- the higher the level of an error, the more critical it is (EXPORTED) -- data ErrorLvl = WarningErr -- does not affect compilation | ErrorErr -- cannot generate code | FatalErr -- abort immediately deriving (Eq, Ord) data Error = Error ErrorLvl Position [String] -- (EXPORTED ABSTRACTLY) -- note that the equality to on errors takes into account only the error level -- and position (not the error text) -- -- note that these comparisions are expensive (the positions contain the file -- names as strings) -- instance Eq Error where (Error lvl1 pos1 _) == (Error lvl2 pos2 _) = lvl1 == lvl2 && pos1 == pos2 instance Ord Error where (Error lvl1 pos1 _) < (Error lvl2 pos2 _) = pos1 < pos2 <