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

Copyright(c) 2008 Benedikt Huber
LicenseBSD-style
Maintainerbenedikt.huber@gmail.com
Stabilityexperimental
Portabilityghc
Safe HaskellNone
LanguageHaskell98

Language.C.Data

Contents

Description

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

Synopsis

Input stream

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).

isAnonymousRef :: SUERef -> Bool

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

data Ident

C identifiers

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 

Fields

nameId :: Int
 

newNameSupply :: [Name]

return an infinite stream of Names starting with nameId 0

Source code positions

data Position

uniform representation of source file positions

class Pos a where

class of type which aggregate a source code location

Methods

posOf :: a -> Position

initPos :: FilePath -> Position

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

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

undefNode :: NodeInfo

create a node with neither name nor positional information

mkNodeInfoOnlyPos :: Position -> NodeInfo

| Given only a source position, create a new node attribute

mkNodeInfo :: Position -> Name -> NodeInfo

Given a source position and a unique name, create a new attribute identifier

internalNode :: NodeInfo

Deprecated: use undefNode instead

Extensible errors