X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2FPrelErr.lhs;h=cd6a56f5f8014eb59e6ae3437ecaad084c54a903;hb=548865d36344b60a5bd8ea8a33ccffed5f915e00;hp=9415258f030a1fba1032685d7dac01d3f4408b29;hpb=e2b25405bae167eeaff661b753ecef64416f5eac;p=ghc-hetmet.git diff --git a/ghc/lib/std/PrelErr.lhs b/ghc/lib/std/PrelErr.lhs index 9415258..cd6a56f 100644 --- a/ghc/lib/std/PrelErr.lhs +++ b/ghc/lib/std/PrelErr.lhs @@ -1,5 +1,7 @@ +% ----------------------------------------------------------------------------- +% $Id: PrelErr.lhs,v 1.19 2001/05/18 16:54:05 simonmar Exp $ % -% (c) The AQUA Project, Glasgow University, 1994-1996 +% (c) The University of Glasgow, 1994-2000 % \section[PrelErr]{Module @PrelErr@} @@ -29,31 +31,12 @@ module PrelErr , error -- :: String -> a , assertError -- :: String -> Bool -> a -> a + , undefined -- :: a ) where import PrelBase -import PrelIOBase ( IO(..) ) ---import PrelHandle ( catch ) -import PrelAddr import PrelList ( span ) import PrelException -import PrelPack ( packString ) -import PrelArr ( ByteArray(..) ) - -#ifndef __PARALLEL_HASKELL__ -import PrelStable ( StablePtr, deRefStablePtr ) -#endif - ---------------------------------------------------------------- --- HACK: Magic unfoldings not implemented for unboxed lists --- Need to define a "build" to avoid undefined symbol --- in this module to avoid .hi proliferation. - ---{-# GENERATE_SPECS build a #-} ---build :: ((a -> [a] -> [a]) -> [a] -> [a]) -> [a] ---build g = g (:) [] ---build = error "GHCbase.build" ---augment = error "GHCbase.augment" \end{code} %********************************************************* @@ -63,65 +46,16 @@ import PrelStable ( StablePtr, deRefStablePtr ) %********************************************************* \begin{code} -{- -errorIO :: IO () -> a - -errorIO (IO io) - = case (errorIO# io) of - _ -> bottom - where - bottom = bottom -- Never evaluated --} ---ioError :: String -> a ---ioError s = error__ ``&IOErrorHdrHook'' s - -- error stops execution and displays an error message error :: String -> a error s = throw (ErrorCall s) ---error s = error__ ``&ErrorHdrHook'' s -{- --- This local variant of "error" calls PatErrorHdrHook instead of ErrorHdrHook, --- but the former does exactly the same as the latter, so I nuked it. --- SLPJ Jan 97 --- --- Hmm..distinguishing between these two kinds of error is quite useful in the --- compiler sources, printing out a more verbose msg in the case of patter --- matching failure. --- So I've reinstated patError to invoke its own message function hook again. --- SOF 8/98 -patError__ x = error__ ``&PatErrorHdrHook'' x - -error__ :: Addr{-C function pointer to hook-} -> String -> a - -error__ msg_hdr s -#ifdef __PARALLEL_HASKELL__ - = errorIO (do - (hFlush stdout) `catchException` (\ _ -> return ()) - let bs@(ByteArray (_,len) _) = packString s - _ccall_ writeErrString__ msg_hdr bs len - _ccall_ stg_exit (1::Int) - ) -#else - = errorIO ( do - (hFlush stdout) `catchException` (\ _ -> return ()) - -- Note: there's potential for trouble here in a - -- a concurrent setting if an error is flagged after the - -- lock on the stdout handle. (I don't see a possibility - -- of this occurring with the current impl, but still.) - let bs@(ByteArray (_,len) _) = packString s - _ccall_ writeErrString__ msg_hdr bs len - errorHandler <- _ccall_ getErrorHandler - if errorHandler == (-1::Int) then - _ccall_ stg_exit (1::Int) - else do - osptr <- _casm_ ``%r = (StgStablePtr)(%0);'' errorHandler - _ccall_ decrementErrorCount - oact <- deRefStablePtr osptr - oact - ) - -#endif {- !parallel -} --} + +-- It is expected that compilers will recognize this and insert error +-- messages which are more appropriate to the context in which undefined +-- appears. + +undefined :: a +undefined = error "Prelude.undefined" \end{code} %********************************************************* @@ -153,7 +87,7 @@ irrefutPatError noMethodBindingError s = throw (NoMethodError (untangle s "No instance nor default method for class operation")) irrefutPatError s = throw (PatternMatchFail (untangle s "Irrefutable pattern failed for pattern")) -nonExhaustiveGuardsError s = throw (NonExhaustiveGuards (untangle s "Non-exhaustive guards in")) +nonExhaustiveGuardsError s = throw (PatternMatchFail (untangle s "Non-exhaustive guards in")) patError s = throw (PatternMatchFail (untangle s "Non-exhaustive patterns in")) recSelError s = throw (RecSelError (untangle s "Missing field in record selection")) recConError s = throw (RecConError (untangle s "Missing field in record construction"))