language-c-0.3.1.1: Analysis and generation of C codeSource codeContentsIndex
Language.C.Data
Portabilityghc
Stabilityexperimental
Maintainerbenedikt.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
isAnonymousRef :: SUERef -> BoolSource
Return true if the struct/union/enum reference is anonymous.
data Ident Source
C identifiers
mkIdent :: Position -> String -> Name -> IdentSource

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 -> StringSource
string of an identifier
internalIdent :: String -> IdentSource
returns an internal identifier (has internal position and no unique name)
isInternalIdent :: Ident -> BoolSource
return True if the given identifier is internal
builtinIdent :: String -> IdentSource
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
newNameSupply :: [Name]Source
return an infinite stream of Names 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
class Pos a whereSource
class of type which aggregate a source code location
Methods
posOf :: a -> PositionSource
initPos :: FilePath -> PositionSource
initialize a Position to the start of the translation unit starting in the given file
posFile :: Position -> StringSource
get the source file of the specified position. Fails unless isSourcePos pos.
posRow :: Position -> IntSource
get the line number of the specified position. Fails unless isSourcePos pos
posColumn :: Position -> IntSource
get the column of the specified position. Fails unless isSourcePos pos
nopos :: PositionSource
no position (for unknown position information)
builtinPos :: PositionSource
position attached to built-in objects
internalPos :: PositionSource
position used for internal errors
isSourcePos :: Position -> BoolSource
returns True if the given position refers to an actual source file
isBuiltinPos :: Position -> BoolSource
returns True if the given position refers to a builtin definition
isInternalPos :: Position -> BoolSource
returns True if the given position is internal
Syntax tree nodes
data NodeInfo Source
Parsed entity attribute
Constructors
OnlyPos Position
NodeInfo Position Name
class CNode a whereSource
a class for convenient access to the attributes of an attributed object
Methods
nodeInfo :: a -> NodeInfoSource
fileOfNode :: CNode a => a -> FilePathSource
posOfNode :: NodeInfo -> PositionSource
nameOfNode :: NodeInfo -> Maybe NameSource
internalNode :: NodeInfoSource
mkNodeInfoOnlyPos :: Position -> NodeInfoSource
Given only a source position, create a new attribute identifier
mkNodeInfo :: Position -> Name -> NodeInfoSource
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.6.1