Language.C.Analysis.AstAnalysis

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

Copyright | (c) 2008 Benedikt Huber
License | BSD-style
Maintainer | benedikt.huber@gmail.com
Stability | alpha
Portability | ghc
Safe Haskell | None
Language | Haskell98

Language.C.Analysis.AstAnalysis

Contents

- Top-level analysis
- Building blocks for additional analyses
- Type checking

Description

Analyse the parse tree

Traverses the AST, analyses declarations and invokes handlers.

Synopsis

- analyseAST :: MonadTrav m => CTranslUnit -> m GlobalDecls
- analyseExt :: MonadTrav m => CExtDecl -> m ()
- analyseFunDef :: MonadTrav m => CFunDef -> m ()
- analyseDecl :: MonadTrav m => Bool -> CDecl -> m ()
- analyseFunctionBody :: MonadTrav m => NodeInfo -> VarDecl -> CStat -> m Stmt
- defineParams :: MonadTrav m => NodeInfo -> VarDecl -> m ()
- tExpr :: MonadTrav m => [StmtCtx] -> ExprSide -> CExpr -> m Type
- data ExprSide
  - = LValue
  - | RValue
- tStmt :: MonadTrav m => [StmtCtx] -> CStat -> m Type
- data StmtCtx
  - = FunCtx VarDecl
  - | LoopCtx
  - | SwitchCtx
- tDesignator :: MonadTrav m => Type -> [CDesignator] -> m Type
- defaultMD :: MachineDesc

# Top-level analysis

analyseAST :: MonadTrav m => CTranslUnit -> m GlobalDecls #

Analyse the given AST

`analyseAST ast` results in global declaration dictionaries. If you want to perform specific actions on declarations or definitions, you may provide callbacks in the `MonadTrav` `m`.

Returns the set of global declarations and definitions which where successfully translated. It is the users responsibility to check whether any hard errors occurred (`runTrav` does this for you).

analyseExt :: MonadTrav m => CExtDecl -> m () #

Analyse an top-level declaration

analyseFunDef :: MonadTrav m => CFunDef -> m () #

Analyse a function definition

analyseDecl :: MonadTrav m => Bool -> CDecl -> m () #

Analyse a declaration other than a function definition

Note: static assertions are not analysed

# Building blocks for additional analyses

analyseFunctionBody :: MonadTrav m => NodeInfo -> VarDecl -> CStat -> m Stmt #

defineParams :: MonadTrav m => NodeInfo -> VarDecl -> m () #

# Type checking

tExpr :: MonadTrav m => [StmtCtx] -> ExprSide -> CExpr -> m Type #

data ExprSide #

Constructors

LValue |
RValue |

Instances

Eq ExprSide # |
Methods (==) :: ExprSide -> ExprSide -> Bool # (/=) :: ExprSide -> ExprSide -> Bool #
Show ExprSide # |
Methods showsPrec :: Int -> ExprSide -> ShowS # show :: ExprSide -> String # showList :: [ExprSide] -> ShowS #

tStmt :: MonadTrav m => [StmtCtx] -> CStat -> m Type #

Typecheck a statement, given a statement context. The type of a statement is usually `void`, but expression statements and blocks can sometimes have other types.

data StmtCtx #

Constructors

FunCtx VarDecl |
LoopCtx |
SwitchCtx |

tDesignator :: MonadTrav m => Type -> [CDesignator] -> m Type #

defaultMD :: MachineDesc #