Language.C.Data.Ident

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

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

Language.C.Data.Ident

Description

This module provides the notion of identifiers in C, speed up using hashing. Identifiers are associated optionally associated with a `NodeInfo`, i.e. with a unique `Name` and a source location (`Position`). The ordering relation on identifiers is based on the hash and does not follow the lexical order.

Synopsis

- data Ident = Ident String !Int NodeInfo
- data SUERef
  - = AnonymousRef Name
  - | NamedRef Ident
- isAnonymousRef :: SUERef -> Bool
- mkIdent :: Position -> String -> Name -> Ident
- builtinIdent :: String -> Ident
- internalIdent :: String -> Ident
- internalIdentAt :: Position -> String -> Ident
- isInternalIdent :: Ident -> Bool
- identToString :: Ident -> String
- sueRefToString :: SUERef -> String
- dumpIdent :: Ident -> String

# Documentation

data Ident #

C identifiers

Constructors

Ident String !Int NodeInfo |

Instances

Eq Ident # |
Methods (==) :: Ident -> Ident -> Bool # (/=) :: Ident -> Ident -> Bool #
Data Ident # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Ident -> c Ident # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Ident # toConstr :: Ident -> Constr # dataTypeOf :: Ident -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Ident) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Ident) # gmapT :: (forall b. Data b => b -> b) -> Ident -> Ident # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Ident -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Ident -> r # gmapQ :: (forall d. Data d => d -> u) -> Ident -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Ident -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Ident -> m Ident # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Ident -> m Ident # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Ident -> m Ident #
Ord Ident # |
Methods compare :: Ident -> Ident -> Ordering # (<) :: Ident -> Ident -> Bool # (<=) :: Ident -> Ident -> Bool # (>) :: Ident -> Ident -> Bool # (>=) :: Ident -> Ident -> Bool # max :: Ident -> Ident -> Ident # min :: Ident -> Ident -> Ident #
Show Ident # |
Methods showsPrec :: Int -> Ident -> ShowS # show :: Ident -> String # showList :: [Ident] -> ShowS #
Pos Ident # |
Methods posOf :: Ident -> Position #
CNode Ident # |
Methods nodeInfo :: Ident -> NodeInfo #

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 # |
Methods (==) :: SUERef -> SUERef -> Bool # (/=) :: SUERef -> SUERef -> Bool #
Data SUERef # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SUERef -> c SUERef # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SUERef # toConstr :: SUERef -> Constr # dataTypeOf :: SUERef -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c SUERef) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SUERef) # gmapT :: (forall b. Data b => b -> b) -> SUERef -> SUERef # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SUERef -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SUERef -> r # gmapQ :: (forall d. Data d => d -> u) -> SUERef -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SUERef -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SUERef -> m SUERef # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SUERef -> m SUERef # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SUERef -> m SUERef #
Ord SUERef # |
Methods compare :: SUERef -> SUERef -> Ordering # (<) :: SUERef -> SUERef -> Bool # (<=) :: SUERef -> SUERef -> Bool # (>) :: SUERef -> SUERef -> Bool # (>=) :: SUERef -> SUERef -> Bool # max :: SUERef -> SUERef -> SUERef # min :: SUERef -> SUERef -> SUERef #
Show SUERef # |
Methods showsPrec :: Int -> SUERef -> ShowS # show :: SUERef -> String # showList :: [SUERef] -> ShowS #

isAnonymousRef :: SUERef -> Bool #

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

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.

builtinIdent :: String -> Ident #

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

internalIdent :: String -> Ident #

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

internalIdentAt :: Position -> String -> Ident #

return an internal identifier with position info

isInternalIdent :: Ident -> Bool #

return `True` if the given identifier is internal

identToString :: Ident -> String #

string of an identifier

sueRefToString :: SUERef -> String #

string of a SUE ref (empty if anonymous)

dumpIdent :: Ident -> String #

dump the identifier string and its positions for debugging purposes