Copyright | Copyright (c) 2016 the Hakaru team |
---|---|
License | BSD3 |
Maintainer | zsulliva@indiana.edu |
Stability | experimental |
Portability | GHC-only This module provides a monad for C code generation as well |
Safe Haskell | None |
Language | Haskell2010 |
as some useful helper functions for manipulating it
Synopsis
- type CodeGen = State CG
- data CG = CG {
- freshNames :: [String]
- reservedNames :: Set String
- extDecls :: [CExtDecl]
- declarations :: [CDecl]
- statements :: [CStat]
- varEnv :: Env
- managedMem :: Bool
- sharedMem :: Bool
- simd :: Bool
- distributed :: Bool
- logProbs :: Bool
- runCodeGen :: CodeGen a -> ([CExtDecl], [CDecl], [CStat])
- runCodeGenBlock :: CodeGen a -> CodeGen CStat
- runCodeGenWith :: CodeGen a -> CG -> [CExtDecl]
- emptyCG :: CG
- declare :: Sing (a :: Hakaru) -> Ident -> CodeGen ()
- declare' :: CDecl -> CodeGen ()
- assign :: Ident -> CExpr -> CodeGen ()
- putStat :: CStat -> CodeGen ()
- putExprStat :: CExpr -> CodeGen ()
- extDeclare :: CExtDecl -> CodeGen ()
- extDeclareTypes :: Sing (a :: Hakaru) -> CodeGen ()
- funCG :: [CTypeSpec] -> Ident -> [CDecl] -> CodeGen () -> CodeGen ()
- whenPar :: CodeGen () -> CodeGen ()
- parDo :: CodeGen a -> CodeGen a
- seqDo :: CodeGen a -> CodeGen a
- reserveIdent :: String -> CodeGen Ident
- genIdent :: CodeGen Ident
- genIdent' :: String -> CodeGen Ident
- createIdent :: Variable (a :: Hakaru) -> CodeGen Ident
- createIdent' :: String -> Variable (a :: Hakaru) -> CodeGen Ident
- lookupIdent :: Variable (a :: Hakaru) -> CodeGen Ident
- ifCG :: CExpr -> CodeGen () -> CodeGen () -> CodeGen ()
- whileCG :: CExpr -> CodeGen () -> CodeGen ()
- doWhileCG :: CExpr -> CodeGen () -> CodeGen ()
- forCG :: CExpr -> CExpr -> CExpr -> CodeGen () -> CodeGen ()
- reductionCG :: Either CBinaryOp (Sing (a :: Hakaru), CExpr -> CodeGen (), CExpr -> CExpr -> CodeGen ()) -> CExpr -> CExpr -> CExpr -> CExpr -> CodeGen () -> CodeGen ()
- codeBlockCG :: CodeGen () -> CodeGen ()
- putMallocStat :: CExpr -> CExpr -> Sing (a :: Hakaru) -> CodeGen ()
Documentation
CG | |
|
declare :: Sing (a :: Hakaru) -> Ident -> CodeGen () Source #
types like SData and SMeasure are impure in that they will produce extra code in the CodeGenMonad while literal types SReal, SInt, SNat, and SProb do not
putExprStat :: CExpr -> CodeGen () Source #
extDeclare :: CExtDecl -> CodeGen () Source #
extDeclareTypes :: Sing (a :: Hakaru) -> CodeGen () Source #
for types that contain subtypes we need to recursively traverse them and build up a list of external type declarations. For example: Measure (Array Nat) will need to have structures for arrays declared before the top level type
reductionCG :: Either CBinaryOp (Sing (a :: Hakaru), CExpr -> CodeGen (), CExpr -> CExpr -> CodeGen ()) -> CExpr -> CExpr -> CExpr -> CExpr -> CodeGen () -> CodeGen () Source #
codeBlockCG :: CodeGen () -> CodeGen () Source #
Takes a cexpression for the location and size and a hakaru type, and generates a statement for allocating the memory