language-c-0.4.7: Analysis and generation of C code

Copyright | (c) 2008 Benedikt Huber, Manuel M. T. Chakravarty
License | BSD-style
Maintainer | benedikt.huber@gmail.com
Stability | experimental
Portability | ghc
Safe Haskell | None
Language | Haskell98

Language.C.Data.Error

Contents

- Severity Level
- Error class
- Error `supertype`
- Infos attached to errors
- Default error types
- Raising internal errors

Description

Base type for errors occurring in parsing, analysing and pretty-printing. With ideas from Simon Marlow's "An extensible dynamically-typed hierarchy of execeptions [2006]"

Synopsis

- data ErrorLevel
  - = LevelWarn
  - | LevelError
  - | LevelFatal
- isHardError :: Error ex => ex -> Bool
- class (Typeable e, Show e) => Error e where
  - errorInfo :: e -> ErrorInfo
  - toError :: e -> CError
  - fromError :: CError -> Maybe e
  - changeErrorLevel :: e -> ErrorLevel -> e
- errorPos :: Error e => e -> Position
- errorLevel :: Error e => e -> ErrorLevel
- errorMsgs :: Error e => e -> [String]
- data CError = forall err . Error err => CError err
- data ErrorInfo = ErrorInfo ErrorLevel Position [String]
- showError :: Error e => String -> e -> String
- showErrorInfo :: String -> ErrorInfo -> String
- mkErrorInfo :: ErrorLevel -> String -> NodeInfo -> ErrorInfo
- data UnsupportedFeature
- unsupportedFeature :: Pos a => String -> a -> UnsupportedFeature
- unsupportedFeature_ :: String -> UnsupportedFeature
- data UserError
- userErr :: String -> UserError
- internalErr :: String -> a

# Severity Level

data ErrorLevel

Error levels (severity)

Constructors

LevelWarn |
LevelError |
LevelFatal |

Instances

Eq ErrorLevel |
Ord ErrorLevel |
Show ErrorLevel |

isHardError :: Error ex => ex -> Bool

return `True` when the given error makes it impossible to continue analysis or compilation.

# Error class

class (Typeable e, Show e) => Error e where

errors in Language.C are instance of `Error`

Minimal complete definition

errorInfo

Methods

errorInfo :: e -> ErrorInfo

obtain source location etc. of an error

toError :: e -> CError

wrap error in `CError`

fromError :: CError -> Maybe e

try to cast a generic `CError` to the specific error type

changeErrorLevel :: e -> ErrorLevel -> e

modify the error level

Instances

Error UserError |
Error UnsupportedFeature |
Error CError |
Error ErrorInfo |
Error TypeMismatch |
Error RedefError |
Error BadSpecifierError |
Error InvalidASTError |

errorPos :: Error e => e -> Position

position of an `Error`

errorLevel :: Error e => e -> ErrorLevel

severity level of an `Error`

errorMsgs :: Error e => e -> [String]

message lines of an `Error`

# Error `supertype`

data CError

`supertype` of all errors

Constructors

forall err . Error err => CError err |

Instances

Show CError |
Error CError |

# Infos attached to errors

data ErrorInfo

information attached to every error in Language.C

Constructors

ErrorInfo ErrorLevel Position [String] |

Instances

Show ErrorInfo |
Error ErrorInfo |

showError :: Error e => String -> e -> String

showErrorInfo :: String -> ErrorInfo -> String

converts an error into a string using a fixed format

- either the lines of the long error message or the short message has to be non-empty
- the format is

       <fname>:<row>: (column <col>) [<err lvl>]
         >>> <line_1>
         <line_2>
           ...
         <line_n>

mkErrorInfo :: ErrorLevel -> String -> NodeInfo -> ErrorInfo

# Default error types

data UnsupportedFeature

error raised if a operation requires an unsupported or not yet implemented feature.

Instances

Show UnsupportedFeature |
Error UnsupportedFeature |

unsupportedFeature :: Pos a => String -> a -> UnsupportedFeature

unsupportedFeature_ :: String -> UnsupportedFeature

data UserError

unspecified error raised by the user (in case the user does not want to define her own error types).

Instances

Show UserError |
Error UserError |

userErr :: String -> UserError

# Raising internal errors

internalErr :: String -> a

raise a fatal internal error; message may have multiple lines