| language-c-0.3.1.1: Analysis and generation of C code | Source code | Contents | Index

Language.C.Data

Portability | ghc
Stability | experimental
Maintainer | benedikt.huber@gmail.com

Contents

Input stream
Identifiers
Unqiue names
Source code positions
Syntax tree nodes
Extensible errors

Description
Common data types for Language.C: Identifiers, unique names, source code locations, ast node attributes and extensible errors.
Synopsis

module Language.C.Data.InputStream

data SUERef

= AnonymousRef Name
| NamedRef Ident

isAnonymousRef :: SUERef -> Bool
data Ident
mkIdent :: Position -> String -> Name -> Ident
identToString :: Ident -> String
internalIdent :: String -> Ident
isInternalIdent :: Ident -> Bool
builtinIdent :: String -> Ident

newtype Name = Name {

nameId :: Int

}

newNameSupply :: [Name]
data Position = Position String !Int !Int
class Pos a where

posOf :: a -> Position

initPos :: FilePath -> Position
posFile :: Position -> String
posRow :: Position -> Int
posColumn :: Position -> Int
nopos :: Position
builtinPos :: Position
internalPos :: Position
isSourcePos :: Position -> Bool
isBuiltinPos :: Position -> Bool
isInternalPos :: Position -> Bool

data NodeInfo

= OnlyPos Position
| NodeInfo Position Name

class CNode a where

nodeInfo :: a -> NodeInfo

fileOfNode :: CNode a => a -> FilePath
posOfNode :: NodeInfo -> Position
nameOfNode :: NodeInfo -> Maybe Name
internalNode :: NodeInfo
mkNodeInfoOnlyPos :: Position -> NodeInfo
mkNodeInfo :: Position -> Name -> NodeInfo
module Language.C.Data.Error

Input stream
module Language.C.Data.InputStream
Identifiers

data SUERef | Source

References uniquely determining a struct, union or enum type. Those are either identified by an string identifier, or by a unique name (anonymous types).
Constructors

AnonymousRef Name |
NamedRef Ident |

Instances

Eq SUERef
Data SUERef
Ord SUERef
Show SUERef
Typeable SUERef
Pretty SUERef

isAnonymousRef :: SUERef -> Bool | Source

Return true if the struct/union/enum reference is anonymous.

data Ident | Source

C identifiers
Instances

Eq Ident
Data Ident
Ord Ident
Show Ident
Typeable Ident
Pos Ident
CNode Ident
Pretty Ident

mkIdent :: Position -> String -> Name -> Ident | Source

build an identifier from a string.

- only minimal error checking, e.g., the characters of the identifier are not checked for being alphanumerical only; the correct lexis of the identifier should be ensured by the caller, e.g., the scanner.
- for reasons of simplicity the complete lexeme is hashed.

identToString :: Ident -> String | Source

string of an identifier

internalIdent :: String -> Ident | Source

returns an internal identifier (has internal position and no unique name)

isInternalIdent :: Ident -> Bool | Source

return `True` if the given identifier is internal

builtinIdent :: String -> Ident | Source

returns a builtin identifier (has builtin position and no unique name)
Unqiue names

newtype Name | Source

Name is a unique identifier
Constructors

Name |

nameId :: Int |

Instances

Enum Name
Eq Name
Data Name
Ord Name
Read Name
Show Name
Ix Name
Typeable Name

newNameSupply :: [Name] | Source

return an infinite stream of `Name`s starting with `nameId` 0
Source code positions

data Position | Source

uniform representation of source file positions; the order of the arguments is important as it leads to the desired ordering of source positions
Constructors

Position String !Int !Int |

Instances

Eq Position
Data Position
Ord Position
Read Position
Show Position
Typeable Position

class Pos a where | Source

class of type which aggregate a source code location
Methods

posOf :: a -> Position | Source

Instances

Pos NodeInfo
Pos Ident
Pos CStrLit
Pos CConst
Pos CBuiltin
Pos CExpr
Pos CAttr
Pos CDesignator
Pos CInit
Pos CEnum
Pos CStructUnion
Pos CTypeQual
Pos CTypeSpec
Pos CStorageSpec
Pos CDeclSpec
Pos CBlockItem
Pos CAsmOperand
Pos CAsmStmt
Pos CStat
Pos CDerivedDeclr
Pos CDeclr
Pos CDecl
Pos CFunDef
Pos CExtDecl
Pos CTranslUnit
Pos CToken
Pos Attr
Pos Enumerator
Pos EnumType
Pos CompType
Pos EnumTypeRef
Pos CompTypeRef
Pos TypeDefRef
Pos TypeDef
Pos MemberDecl
Pos ParamDecl
Pos FunDef
Pos ObjDef
Pos Decl
Pos DeclEvent
Pos IdentDecl
Pos TagDef
Pos a => Pos ([] a)
Pos a => Pos (Reversed a)
Pos (Located a)

initPos :: FilePath -> Position | Source

initialize a Position to the start of the translation unit starting in the given file

posFile :: Position -> String | Source

get the source file of the specified position. Fails unless `isSourcePos pos`.

posRow :: Position -> Int | Source

get the line number of the specified position. Fails unless `isSourcePos pos`

posColumn :: Position -> Int | Source

get the column of the specified position. Fails unless `isSourcePos pos`

nopos :: Position | Source

no position (for unknown position information)

builtinPos :: Position | Source

position attached to built-in objects

internalPos :: Position | Source

position used for internal errors

isSourcePos :: Position -> Bool | Source

returns `True` if the given position refers to an actual source file

isBuiltinPos :: Position -> Bool | Source

returns `True` if the given position refers to a builtin definition

isInternalPos :: Position -> Bool | Source

returns `True` if the given position is internal
Syntax tree nodes

data NodeInfo | Source

Parsed entity attribute
Constructors

OnlyPos Position |
NodeInfo Position Name |

Instances

Eq NodeInfo
Data NodeInfo
Ord NodeInfo
Read NodeInfo
Show NodeInfo
Typeable NodeInfo
Pos NodeInfo
CNode NodeInfo

class CNode a where | Source

a class for convenient access to the attributes of an attributed object
Methods

nodeInfo :: a -> NodeInfo | Source

Instances

CNode NodeInfo
CNode Ident
CNode CStrLit
CNode CConst
CNode CBuiltin
CNode CExpr
CNode CAttr
CNode CDesignator
CNode CInit
CNode CEnum
CNode CStructUnion
CNode CTypeQual
CNode CTypeSpec
CNode CStorageSpec
CNode CDeclSpec
CNode CBlockItem
CNode CAsmOperand
CNode CAsmStmt
CNode CStat
CNode CDerivedDeclr
CNode CDeclr
CNode CDecl
CNode CFunDef
CNode CExtDecl
CNode CTranslUnit
CNode Attr
CNode Enumerator
CNode EnumType
CNode CompType
CNode EnumTypeRef
CNode CompTypeRef
CNode TypeDefRef
CNode TypeDef
CNode MemberDecl
CNode ParamDecl
CNode FunDef
CNode ObjDef
CNode Decl
CNode DeclEvent
CNode IdentDecl
CNode TagDef
CNode TagFwdDecl
(CNode a, CNode b) => CNode (Either a b)

fileOfNode :: CNode a => a -> FilePath | Source

posOfNode :: NodeInfo -> Position | Source

nameOfNode :: NodeInfo -> Maybe Name | Source

internalNode :: NodeInfo | Source

mkNodeInfoOnlyPos :: Position -> NodeInfo | Source

Given only a source position, create a new attribute identifier

mkNodeInfo :: Position -> Name -> NodeInfo | Source

Given a source position and a unique name, create a new attribute identifier
Extensible errors
module Language.C.Data.Error
Produced by Haddock version 2.4.2