 | language-c-0.3.1.1: Analysis and generation of C code | Contents | Index |
|
Language.C.Analysis.SemRep | Portability | ghc | Stability | alpha | Maintainer | benedikt.huber@gmail.com |
|
|
|
|
|
Description |
This module contains definitions for representing C translation units.
In contrast to Language.C.Syntax.AST, the representation tries to express the semantics of
of a translation unit.
|
|
Synopsis |
|
|
|
|
Sums of tags and identifiers
|
|
data TagDef |
Composite type definitions (tags)
| Constructors | | Instances | |
|
|
typeOfTagDef :: TagDef -> TypeName |
return the type corresponding to a tag definition
|
|
class Declaration n where |
All datatypes aggregating a declaration are instances of Declaration
| | Methods | getVarDecl :: n -> VarDecl | get the name, type and declaration attributes of a declaration or definition
|
| | Instances | |
|
|
declIdent :: Declaration n => n -> Ident |
get the variable identifier of a declaration (only safe if the
the declaration is known to have a name)
|
|
declName :: Declaration n => n -> VarName |
get the variable name of a Declaration
|
|
declType :: Declaration n => n -> Type |
get the type of a Declaration
|
|
declAttrs :: Declaration n => n -> DeclAttrs |
get the declaration attributes of a Declaration
|
|
data IdentDecl |
identifiers, typedefs and enumeration constants (namespace sum)
| Constructors | Declaration Decl | object or function declaration
| ObjectDef ObjDef | object definition
| FunctionDef FunDef | function definition
| EnumeratorDef Enumerator | definition of an enumerator
|
| Instances | |
|
|
objKindDescr :: IdentDecl -> String |
textual description of the kind of an object
|
|
splitIdentDecls :: Bool -> Map Ident IdentDecl -> (Map Ident Decl, (Map Ident Enumerator, Map Ident ObjDef, Map Ident FunDef)) |
splitIdentDecls includeAllDecls splits a map of object, function and enumerator declarations and definitions into one map
holding declarations, and three maps for object definitions, enumerator definitions and function definitions.
If includeAllDecls is True all declarations are present in the first map, otherwise only those where no corresponding definition
is available.
|
|
Global definitions
|
|
data GlobalDecls |
global declaration/definition table returned by the analysis
| Constructors | | Instances | |
|
|
emptyGlobalDecls :: GlobalDecls |
empty global declaration table
|
|
filterGlobalDecls :: (DeclEvent -> Bool) -> GlobalDecls -> GlobalDecls |
filter global declarations
|
|
mergeGlobalDecls :: GlobalDecls -> GlobalDecls -> GlobalDecls |
merge global declarations
|
|
Events for visitors
|
|
data DeclEvent |
Declaration events
Those events are reported to callbacks, which are executed during the traversal.
| Constructors | TagEvent TagDef | file-scope struct/union/enum event
| DeclEvent IdentDecl | file-scope declaration or definition
| TypeDefEvent TypeDef | a type definition
| AsmEvent AsmBlock | assembler block
|
| Instances | |
|
|
Declarations and definitions
|
|
data Decl |
Declarations, which aren't definitions
| Constructors | | Instances | |
|
|
data ObjDef |
Object Definitions
An object definition is a declaration together with an initializer.
If the initializer is missing, it is a tentative definition, i.e. a
definition which might be overriden later on.
| Constructors | | Instances | |
|
|
isTentative :: ObjDef -> Bool |
Returns True if the given object definition is tentative.
|
|
data FunDef |
Function definitions
A function definition is a declaration together with a statement (the function body).
| Constructors | | Instances | |
|
|
data ParamDecl |
Parameter declaration
| Constructors | | Instances | |
|
|
data MemberDecl |
Struct/Union member declaration
| Constructors | | Instances | |
|
|
data TypeDef |
typedef definitions.
The identifier is a new name for the given type.
| Constructors | | Instances | |
|
|
identOfTypeDef :: TypeDef -> Ident |
return the idenitifier of a typedef
|
|
data VarDecl |
Generic variable declarations
| Constructors | | Instances | |
|
|
Declaration attributes
|
|
data DeclAttrs |
Declaration attributes of the form DeclAttrs isInlineFunction storage linkage attrs
They specify the storage and linkage of a declared object.
| Constructors | | Instances | |
|
|
isExtDecl :: Declaration n => n -> Bool |
|
data Storage |
Storage duration and linkage of a variable
| Constructors | NoStorage | no storage
| Auto Register | automatic storage (optional: register)
| Static Linkage ThreadLocal | static storage, with linkage and thread local specifier (gnu c)
| FunLinkage Linkage | function, either internal or external linkage
|
| Instances | |
|
|
declStorage :: Declaration d => d -> Storage |
get the Storage of a declaration
|
|
type ThreadLocal = Bool |
|
type Register = Bool |
|
data Linkage |
Linkage: Either internal to the translation unit or external
| Constructors | InternalLinkage | | ExternalLinkage | |
| Instances | |
|
|
Types
|
|
data Type |
types of C objects
| Constructors | | Instances | |
|
|
data FunType |
Function types are of the form FunType return-type params isVariadic attrs.
If the parameter types aren't yet known, the function has type FunTypeIncomplete type attrs.
| Constructors | | Instances | |
|
|
isFunctionType :: Type -> Bool |
return True if the given type is a function type
Result is undefined in the presence of TypeOfExpr or undefined typeDefs
|
|
derefTypeDef :: Type -> Type |
resolve typedefs, if possible
|
|
referencedType :: Type -> Maybe Type |
|
hasTypeOfExpr :: Type -> Bool |
|
data ArraySize |
An array type may either have unknown size or a specified array size, the latter either variable or constant.
Furthermore, when used as a function parameters, the size may be qualified as static.
In a function prototype, the size may be `Unspecified variable size' ([*]).
| Constructors | UnknownArraySize Bool | UnknownArraySize is-starred | ArraySize Bool Expr | FixedSizeArray is-static size-expr |
| Instances | |
|
|
data TypeDefRef |
typdef references
If the actual type is known, it is attached for convenience
| Constructors | | Instances | |
|
|
data TypeName |
normalized type representation
| Constructors | | Instances | |
|
|
data BuiltinType |
Builtin type (va_list)
| Constructors | | Instances | |
|
|
data IntType |
integral types (C99 6.7.2.2)
| Constructors | TyBool | | TyChar | | TySChar | | TyUChar | | TyShort | | TyUShort | | TyInt | | TyUInt | | TyLong | | TyULong | | TyLLong | | TyULLong | |
| Instances | |
|
|
data FloatType |
floating point type (C99 6.7.2.2)
| Constructors | | Instances | |
|
|
class HasSUERef a where |
accessor class : struct/union/enum names
| | Methods | | | Instances | |
|
|
class HasCompTyKind a where |
accessor class : composite type tags (struct or union)
| | Methods | | | Instances | |
|
|
data CompTypeRef |
composite type declarations
| Constructors | | Instances | |
|
|
data CompType |
Composite type (struct or union).
| Constructors | | Instances | |
|
|
typeOfCompDef :: CompType -> TypeName |
return the type of a composite type definition
|
|
data CompTyKind |
a tag to determine wheter we refer to a struct or union, see CompType.
| Constructors | | Instances | |
|
|
data EnumTypeRef |
Constructors | | Instances | |
|
|
data EnumType |
Representation of C enumeration types
| Constructors | | Instances | |
|
|
typeOfEnumDef :: EnumType -> TypeName |
return the type of an enum definition
|
|
data Enumerator |
An Enumerator consists of an identifier, a constant expressions and the link to its type
| Constructors | | Instances | |
|
|
data TypeQuals |
Type qualifiers: constant, volatile and restrict
| Constructors | | Instances | |
|
|
noTypeQuals :: TypeQuals |
no type qualifiers
|
|
mergeTypeQuals :: TypeQuals -> TypeQuals -> TypeQuals |
merge (&&) two type qualifier sets
|
|
Variable names
|
|
data VarName |
VarName name assembler-name is a name of an declared object
| Constructors | | Instances | |
|
|
identOfVarName :: VarName -> Ident |
|
type AsmName = CStrLit |
Assembler name (alias for CStrLit)
|
|
Attributes (STUB, not yet analyzed)
|
|
data Attr |
__attribute__ annotations
Those are of the form Attr attribute-name attribute-parameters,
and serve as generic properties of some syntax tree elements.
Some examples:
- labels can be attributed with unused to indicate that their not used
- struct definitions can be attributed with packed to tell the compiler to use the most compact representation
- declarations can be attributed with deprecated
- function declarations can be attributes with noreturn to tell the compiler that the function will never return,
- or with const to indicate that it is a pure function
TODO: ultimatively, we want to parse attributes and represent them in a typed way
| Constructors | | Instances | |
|
|
type Attributes = [Attr] |
|
Statements and Expressions (STUB, aliases to Syntax)
|
|
type Stmt = CStat |
Stmt is an alias for CStat (Syntax)
|
|
type Expr = CExpr |
Expr is currently an alias for CExpr (Syntax)
|
|
type Initializer = CInit |
Initializer is currently an alias for CInit.
We're planning a normalized representation, but this depends on the implementation of
constant expression evaluation
|
|
type AsmBlock = CStrLit |
Top level assembler block (alias for CStrLit)
|
|
Produced by Haddock version 2.7.2 |