From 552de7b426f990a961a051ec486a77982c4b7770 Mon Sep 17 00:00:00 2001 From: sof <unknown> Date: Thu, 22 Jan 1998 15:55:09 +0000 Subject: [PATCH] [project @ 1998-01-22 15:54:43 by sof] * removed ghc/Error.{lhs,hi-boot} * moved contents of Error to GHCerr + adjusted import lists of files that use old Error functionality. * moved seqError from Prelude to GHCerr. --- ghc/lib/ghc/ArrBase.lhs | 2 +- ghc/lib/ghc/Error.hi-boot | 12 ----- ghc/lib/ghc/Error.lhs | 68 -------------------------- ghc/lib/ghc/GHCerr.lhs | 92 ++++++++++++++++++++++++++++++++++-- ghc/lib/ghc/GHCmain.lhs | 3 +- ghc/lib/ghc/IOBase.lhs | 2 +- ghc/lib/ghc/IOHandle.lhs | 2 +- ghc/lib/ghc/PackBase.lhs | 2 +- ghc/lib/ghc/PrelBase.lhs | 2 +- ghc/lib/ghc/PrelList.lhs | 2 +- ghc/lib/ghc/PrelNum.lhs | 2 +- ghc/lib/ghc/PrelRead.lhs | 2 +- ghc/lib/ghc/PrelTup.lhs | 2 +- ghc/lib/ghc/Unsafe.lhs | 2 +- ghc/lib/required/Char.lhs | 2 +- ghc/lib/required/Ix.lhs | 2 +- ghc/lib/required/Maybe.lhs | 2 +- ghc/lib/required/Prelude.lhs | 6 +-- 18 files changed, 105 insertions(+), 102 deletions(-) delete mode 100644 ghc/lib/ghc/Error.hi-boot delete mode 100644 ghc/lib/ghc/Error.lhs diff --git a/ghc/lib/ghc/ArrBase.lhs b/ghc/lib/ghc/ArrBase.lhs index 4686421b8af6..b80c0cdbbb1c 100644 --- a/ghc/lib/ghc/ArrBase.lhs +++ b/ghc/lib/ghc/ArrBase.lhs @@ -11,7 +11,7 @@ types and operations. module ArrBase where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import Ix import PrelList (foldl) import STBase diff --git a/ghc/lib/ghc/Error.hi-boot b/ghc/lib/ghc/Error.hi-boot deleted file mode 100644 index fe91b8a86cd0..000000000000 --- a/ghc/lib/ghc/Error.hi-boot +++ /dev/null @@ -1,12 +0,0 @@ ---------------------------------------------------------------------------- --- Error.hi-boot --- --- This hand-written interface file is the initial bootstrap version --- for Error.hi. --- It doesn't need to give "error" a type signature, --- because it's wired into the compiler ---------------------------------------------------------------------------- - -_interface_ Error 1 -_exports_ -Error error; diff --git a/ghc/lib/ghc/Error.lhs b/ghc/lib/ghc/Error.lhs deleted file mode 100644 index 1d62ce613484..000000000000 --- a/ghc/lib/ghc/Error.lhs +++ /dev/null @@ -1,68 +0,0 @@ -% -% (c) The AQUA Project, Glasgow University, 1994-1996 -% - -\section[Error]{Module @Error@} - -\begin{code} -{-# OPTIONS -fno-implicit-prelude #-} - -module Error (errorIO, error) where - -import PrelBase -import IOBase -import Foreign -import Addr -\end{code} - -%********************************************************* -%* * -\subsection{Error-ish functions} -%* * -%********************************************************* - -\begin{code} -errorIO :: IO () -> a - -errorIO (IO io) - = case (errorIO# io) of - _ -> bottom - where - bottom = bottom -- Never evaluated - ---errorIO x = (waitRead#, errorIO#, makeForeignObj#, waitWrite#, (+#)) - --- error stops execution and displays an error message -error :: String -> a -error s = error__ ( \ x -> _ccall_ ErrorHdrHook x ) s - -error__ :: (Addr{-FILE *-} -> IO ()) -> String -> a - -error__ msg_hdr s -#ifdef __PARALLEL_HASKELL__ - = errorIO (msg_hdr sTDERR{-msg hdr-} >> - _ccall_ fflush sTDERR >> - fputs sTDERR s >> - _ccall_ fflush sTDERR >> - _ccall_ stg_exit (1::Int) - ) -#else - = errorIO (msg_hdr sTDERR{-msg hdr-} >> - _ccall_ fflush sTDERR >> - fputs sTDERR s >> - _ccall_ fflush sTDERR >> - _ccall_ getErrorHandler >>= \ errorHandler -> - if errorHandler == (-1::Int) then - _ccall_ stg_exit (1::Int) - else - _casm_ ``%r = (StgStablePtr)(%0);'' errorHandler - >>= \ osptr -> - _ccall_ decrementErrorCount >>= \ () -> - deRefStablePtr osptr >>= \ oact -> - oact - ) -#endif {- !parallel -} - where - sTDERR = (``stderr'' :: Addr) -\end{code} - diff --git a/ghc/lib/ghc/GHCerr.lhs b/ghc/lib/ghc/GHCerr.lhs index ee5643bc014e..afa3f15ac67a 100644 --- a/ghc/lib/ghc/GHCerr.lhs +++ b/ghc/lib/ghc/GHCerr.lhs @@ -13,12 +13,32 @@ with what the typechecker figures out. \begin{code} {-# OPTIONS -fno-implicit-prelude #-} -module GHCerr where +module GHCerr + + ( + irrefutPatError + , noDefaultMethodError + , noExplicitMethodError + , nonExhaustiveGuardsError + , patError + , recConError + , recUpdError -- :: String -> a + + , absentErr, parError -- :: a + , seqError -- :: a + + , error -- :: String -> a + , ioError -- :: String -> a + , assert__ -- :: String -> Bool -> a -> a + ) where --import Prelude import PrelBase +import IOBase +import Addr +import Foreign ( StablePtr, deRefStablePtr ) import PrelList ( span ) -import Error + --------------------------------------------------------------- -- HACK: Magic unfoldings not implemented for unboxed lists @@ -32,15 +52,74 @@ augment = error "GHCbase.augment" --build g = g (:) [] \end{code} +%********************************************************* +%* * +\subsection{Error-ish functions} +%* * +%********************************************************* + +\begin{code} +errorIO :: IO () -> a + +errorIO (IO io) + = case (errorIO# io) of + _ -> bottom + where + bottom = bottom -- Never evaluated + +ioError :: String -> a +ioError s = error__ ( \ x -> _ccall_ IOErrorHdrHook x ) s + +-- error stops execution and displays an error message +error :: String -> a +error s = error__ ( \ x -> _ccall_ ErrorHdrHook x ) s + +error__ :: (Addr{-FILE *-} -> IO ()) -> String -> a + +error__ msg_hdr s +#ifdef __PARALLEL_HASKELL__ + = errorIO (msg_hdr sTDERR{-msg hdr-} >> + _ccall_ fflush sTDERR >> + fputs sTDERR s >> + _ccall_ fflush sTDERR >> + _ccall_ stg_exit (1::Int) + ) +#else + = errorIO (msg_hdr sTDERR{-msg hdr-} >> + _ccall_ fflush sTDERR >> + fputs sTDERR s >> + _ccall_ fflush sTDERR >> + _ccall_ getErrorHandler >>= \ errorHandler -> + if errorHandler == (-1::Int) then + _ccall_ stg_exit (1::Int) + else + _casm_ ``%r = (StgStablePtr)(%0);'' errorHandler + >>= \ osptr -> + _ccall_ decrementErrorCount >>= \ () -> + deRefStablePtr osptr >>= \ oact -> + oact + ) +#endif {- !parallel -} + where + sTDERR = (``stderr'' :: Addr) +\end{code} + +%********************************************************* +%* * +\subsection{Compiler generated errors + local utils} +%* * +%********************************************************* Used for compiler-generated error message; encoding saves bytes of string junk. \begin{code} -absentErr, parError :: a +absentErr, parError, seqError :: a absentErr = error "Oops! The program has entered an `absent' argument!\n" parError = error "Oops! Entered GHCerr.parError (a GHC bug -- please report it!)\n" +seqError = error "Oops! Entered seqError (a GHC bug -- please report it!)\n" + \end{code} \begin{code} @@ -59,6 +138,13 @@ nonExhaustiveGuardsError s = error (untangle s "Non-exhaustive guards in") patError s = error (untangle s "Non-exhaustive patterns in") recConError s = error (untangle s "Missing field in record construction:") recUpdError s = error (untangle s "Record to doesn't contain field(s) to be updated") + + +assert__ :: String -> Bool -> a -> a +assert__ str pred v + | pred = v + | otherwise = error (untangle str "Assertion failed") + \end{code} diff --git a/ghc/lib/ghc/GHCmain.lhs b/ghc/lib/ghc/GHCmain.lhs index 0a67a1d704fb..fa143b666974 100644 --- a/ghc/lib/ghc/GHCmain.lhs +++ b/ghc/lib/ghc/GHCmain.lhs @@ -9,11 +9,12 @@ module GHCmain( mainIO ) where import Prelude import {-# SOURCE #-} qualified Main -- for type of "Main.main" +import GHCerr ( ioError ) \end{code} \begin{code} mainIO :: IO () -- It must be of type (IO t) because that's what -- the RTS expects. GHC doesn't check this, so -- make sure this type signature stays! -mainIO = catch Main.main (\err -> error ("I/O error: "++showsPrec 0 err "\n")) +mainIO = catch Main.main (\err -> ioError (showsPrec 0 err "\n")) \end{code} diff --git a/ghc/lib/ghc/IOBase.lhs b/ghc/lib/ghc/IOBase.lhs index b9a9fca98041..f23a25ad1dae 100644 --- a/ghc/lib/ghc/IOBase.lhs +++ b/ghc/lib/ghc/IOBase.lhs @@ -13,7 +13,7 @@ concretely; the @IO@ module itself exports abstractly. module IOBase where -import {-# SOURCE #-} Error +import {-# SOURCE #-} GHCerr ( error ) import STBase import PrelTup import PrelMaybe diff --git a/ghc/lib/ghc/IOHandle.lhs b/ghc/lib/ghc/IOHandle.lhs index a2787815a919..a0d4f14a0098 100644 --- a/ghc/lib/ghc/IOHandle.lhs +++ b/ghc/lib/ghc/IOHandle.lhs @@ -27,7 +27,7 @@ import PrelMaybe import PrelBase import GHC import Addr -import Error +import GHCerr ( error ) #ifndef __PARALLEL_HASKELL__ import Foreign ( ForeignObj, makeForeignObj, writeForeignObj ) diff --git a/ghc/lib/ghc/PackBase.lhs b/ghc/lib/ghc/PackBase.lhs index 1f8614b9aabf..0f9dd04b5914 100644 --- a/ghc/lib/ghc/PackBase.lhs +++ b/ghc/lib/ghc/PackBase.lhs @@ -47,7 +47,7 @@ module PackBase where import PrelBase -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelList ( length ) import STBase import ArrBase diff --git a/ghc/lib/ghc/PrelBase.lhs b/ghc/lib/ghc/PrelBase.lhs index cfe4a83cfc67..ee3151b4ae82 100644 --- a/ghc/lib/ghc/PrelBase.lhs +++ b/ghc/lib/ghc/PrelBase.lhs @@ -13,7 +13,7 @@ module PrelBase( -- to import it explicitly ) where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import GHC infixr 9 . diff --git a/ghc/lib/ghc/PrelList.lhs b/ghc/lib/ghc/PrelList.lhs index 7fd2d20aeb09..df0e4fb8dcd4 100644 --- a/ghc/lib/ghc/PrelList.lhs +++ b/ghc/lib/ghc/PrelList.lhs @@ -22,7 +22,7 @@ module PrelList ( zip, zip3, zipWith, zipWith3, unzip, unzip3 ) where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelTup import PrelMaybe import PrelBase diff --git a/ghc/lib/ghc/PrelNum.lhs b/ghc/lib/ghc/PrelNum.lhs index 434406021e83..3c1e4fee47c8 100644 --- a/ghc/lib/ghc/PrelNum.lhs +++ b/ghc/lib/ghc/PrelNum.lhs @@ -21,7 +21,7 @@ module PrelNum where import PrelBase import GHC -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelList import PrelMaybe diff --git a/ghc/lib/ghc/PrelRead.lhs b/ghc/lib/ghc/PrelRead.lhs index 60917b369040..3b3e4c8eaf34 100644 --- a/ghc/lib/ghc/PrelRead.lhs +++ b/ghc/lib/ghc/PrelRead.lhs @@ -11,7 +11,7 @@ Instances of the Read class. module PrelRead where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelNum import PrelList import PrelTup diff --git a/ghc/lib/ghc/PrelTup.lhs b/ghc/lib/ghc/PrelTup.lhs index e400bcd951dc..951d46dfe907 100644 --- a/ghc/lib/ghc/PrelTup.lhs +++ b/ghc/lib/ghc/PrelTup.lhs @@ -11,7 +11,7 @@ This modules defines the typle data types. module PrelTup where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelBase \end{code} diff --git a/ghc/lib/ghc/Unsafe.lhs b/ghc/lib/ghc/Unsafe.lhs index 1a145af090d0..653a5d0f1d9f 100644 --- a/ghc/lib/ghc/Unsafe.lhs +++ b/ghc/lib/ghc/Unsafe.lhs @@ -21,7 +21,7 @@ module Unsafe import PrelBase import IOBase import Addr -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) \end{code} %********************************************************* diff --git a/ghc/lib/required/Char.lhs b/ghc/lib/required/Char.lhs index 40ba72d82cde..9dcca7e2270b 100644 --- a/ghc/lib/required/Char.lhs +++ b/ghc/lib/required/Char.lhs @@ -27,7 +27,7 @@ module Char import PrelBase import PrelRead (readLitChar) -import Error ( error ) +import GHCerr ( error ) \end{code} diff --git a/ghc/lib/required/Ix.lhs b/ghc/lib/required/Ix.lhs index 65d32e78e2e1..50bc1632b207 100644 --- a/ghc/lib/required/Ix.lhs +++ b/ghc/lib/required/Ix.lhs @@ -13,7 +13,7 @@ module Ix rangeSize ) where -import {-# SOURCE #-} Error ( error ) +import {-# SOURCE #-} GHCerr ( error ) import PrelTup import PrelBase \end{code} diff --git a/ghc/lib/required/Maybe.lhs b/ghc/lib/required/Maybe.lhs index 40b130f63cf7..acecd04bb5d8 100644 --- a/ghc/lib/required/Maybe.lhs +++ b/ghc/lib/required/Maybe.lhs @@ -20,7 +20,7 @@ module Maybe unfoldr ) where -import Error ( error ) +import GHCerr ( error ) import Monad ( filter ) import PrelList import PrelMaybe diff --git a/ghc/lib/required/Prelude.lhs b/ghc/lib/required/Prelude.lhs index 84dca26d754a..b386d66405b1 100644 --- a/ghc/lib/required/Prelude.lhs +++ b/ghc/lib/required/Prelude.lhs @@ -71,8 +71,7 @@ import PrelEither import PrelBounded import Monad import Maybe -import Error ( error ) -import GHCerr +import GHCerr ( error, seqError ) -- These can't conveniently be defined in PrelBase because they use numbers, -- or I/O, so here's a convenient place to do them. @@ -96,9 +95,6 @@ strict f x = x `seq` f x seq :: Eval a => a -> b -> b seq x y = case (seq# x) of { 0# -> seqError; _ -> y } -seqError :: a -seqError = error "Oops! Entered seqError (a GHC bug -- please report it!)\n" - -- It is expected that compilers will recognize this and insert error -- messages which are more appropriate to the context in which undefined -- appears. -- GitLab