| Copyright | (c) Galois Inc 2016 |
|---|---|
| License | BSD3 |
| Maintainer | Simon Winwood <sjw@galois.com> |
| Stability | provisional |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Lang.Crucible.Utils.CoreRewrite
Description
Synopsis
- annotateCFGStmts :: TraverseExt ext => (forall cin cout. Some (BlockID blocks) -> Size cout -> Stmt ext cin cout -> Maybe (StmtSeq ext blocks UnitType cout)) -> (forall ctx'. Some (BlockID blocks) -> Size ctx' -> TermStmt blocks ret ctx' -> Maybe (StmtSeq ext blocks UnitType ctx')) -> CFG ext blocks ctx ret -> CFG ext blocks ctx ret
Documentation
Arguments
| :: TraverseExt ext | |
| => (forall cin cout. Some (BlockID blocks) -> Size cout -> Stmt ext cin cout -> Maybe (StmtSeq ext blocks UnitType cout)) | This is the annotation function. The resulting |
| -> (forall ctx'. Some (BlockID blocks) -> Size ctx' -> TermStmt blocks ret ctx' -> Maybe (StmtSeq ext blocks UnitType ctx')) | As above but for the final term stmt, where the annotation will be _before_ the term stmt. |
| -> CFG ext blocks ctx ret | |
| -> CFG ext blocks ctx ret |
This function walks through all the blocks in the CFG calling
fS on each Stmt and fT on each TermStmt. These functions
return a possible annotaition statement (which has access to the
result of the statement, if any) along with a context diff which
describes any new variables.