| language-c-0.3.1.1: Analysis and generation of C 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

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
Return true if the struct/union/enum reference is anonymous.
data Ident

C identifiers
Instances

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

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

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
string of an identifier
internalIdent :: String -> Ident
returns an internal identifier (has internal position and no unique name)
isInternalIdent :: Ident -> Bool
return `True` if the given identifier is internal
builtinIdent :: String -> Ident
returns a builtin identifier (has builtin position and no unique name)
Unqiue names
newtype Name

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]
return an infinite stream of `Name`s starting with `nameId` 0
Source code positions
data Position

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

class of type which aggregate a source code location
Methods

posOf :: a -> Position

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
initialize a Position to the start of the translation unit starting in the given file
posFile :: Position -> String
get the source file of the specified position. Fails unless `isSourcePos pos`.
posRow :: Position -> Int
get the line number of the specified position. Fails unless `isSourcePos pos`
posColumn :: Position -> Int
get the column of the specified position. Fails unless `isSourcePos pos`
nopos :: Position
no position (for unknown position information)
builtinPos :: Position
position attached to built-in objects
internalPos :: Position
position used for internal errors
isSourcePos :: Position -> Bool
returns `True` if the given position refers to an actual source file
isBuiltinPos :: Position -> Bool
returns `True` if the given position refers to a builtin definition
isInternalPos :: Position -> Bool
returns `True` if the given position is internal
Syntax tree nodes
data NodeInfo

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

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

nodeInfo :: a -> NodeInfo

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
posOfNode :: NodeInfo -> Position
nameOfNode :: NodeInfo -> Maybe Name
internalNode :: NodeInfo
mkNodeInfoOnlyPos :: Position -> NodeInfo
Given only a source position, create a new attribute identifier
mkNodeInfo :: Position -> Name -> NodeInfo
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.7.2