-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | An interface to CIL. -- -- CIL (http:cil.sourceforge.net/) is a C frontend that reduces C -- to a manageable subset, useful for source code analyzers, -- instrumenters, and compilers. @package cil @version 0.1.0 -- | Parsing the C Intermediate Language (CIL). CIL provides a manageable -- means to analyze and compile C code. -- -- The common method to reduce C to CIL is to use the cilly driver: -- --
--   cilly --merge --keepmerged { c-files-and-options }
--   
-- -- http://cil.sourceforge.net/ module Language.CIL -- | Identifiers. type Name = String -- | Types. data Type Void :: Type Array :: Int -> Type -> Type Ptr :: Type -> Type -- | A volatile qualified type. Volatile :: Type -> Type Typedef :: Type -> Type Struct :: [(Name, Type)] -> Type Union :: [(Name, Type)] -> Type Enum :: [(Name, Int)] -> Type BitField :: Type -> [(Name, Int)] -> Type -- | Reference to a struct type. StructRef :: Name -> Type -- | Reference to a union type. UnionRef :: Name -> Type -- | Reference to an enum type. EnumRef :: Name -> Type -- | Reference to a previously defined typedef. TypedefRef :: Name -> Type Function :: Type -> [Type] -> Type Int8 :: Type Int16 :: Type Int32 :: Type Word8 :: Type Word16 :: Type Word32 :: Type Float :: Type Double :: Type -- | Statements. data Stmt Null :: Stmt Compound :: [Name] -> [Stmt] -> Position -> Stmt TypeDecl :: Name -> Type -> Position -> Stmt VariableDef :: Name -> Type -> (Maybe Init) -> Position -> Stmt FunctionDef :: Name -> Type -> [(Name, Type)] -> Stmt -> Position -> Stmt Assign :: Expr -> Expr -> Position -> Stmt StmtApply :: Apply -> Position -> Stmt While :: Expr -> Stmt -> Position -> Stmt If :: Expr -> Stmt -> Stmt -> Position -> Stmt Return :: (Maybe Expr) -> Position -> Stmt Goto :: Name -> Position -> Stmt Break :: Position -> Stmt Switch :: Expr -> Stmt -> Position -> Stmt Case :: Expr -> Stmt -> Position -> Stmt Default :: Stmt -> Position -> Stmt -- | Expressions. data Expr ConstInt :: Int -> Position -> Expr ConstFloat :: Double -> Position -> Expr ConstChar :: Char -> Position -> Expr ConstString :: String -> Position -> Expr -- | Variable reference. Var :: Name -> Position -> Expr -- | a * b Mul :: Expr -> Expr -> Position -> Expr -- | a / b Div :: Expr -> Expr -> Position -> Expr -- | a % b Rmd :: Expr -> Expr -> Position -> Expr -- | a + b Add :: Expr -> Expr -> Position -> Expr -- | a - b Sub :: Expr -> Expr -> Position -> Expr -- | a << b Shl :: Expr -> Expr -> Position -> Expr -- | a >> b Shr :: Expr -> Expr -> Position -> Expr -- | a < b Lt :: Expr -> Expr -> Position -> Expr -- | a > b Gt :: Expr -> Expr -> Position -> Expr -- | a <= b Le :: Expr -> Expr -> Position -> Expr -- | a >= b Ge :: Expr -> Expr -> Position -> Expr -- | a == b Eq :: Expr -> Expr -> Position -> Expr -- | a != b Neq :: Expr -> Expr -> Position -> Expr -- | a & b And :: Expr -> Expr -> Position -> Expr -- | a ^ b Xor :: Expr -> Expr -> Position -> Expr -- | a | b Or :: Expr -> Expr -> Position -> Expr -- | &a Adr :: Expr -> Position -> Expr -- | *a Ind :: Expr -> Position -> Expr -- | -a Minus :: Expr -> Position -> Expr -- | ~a Comp :: Expr -> Position -> Expr -- | !a Neg :: Expr -> Position -> Expr -- | (...) a Cast :: Type -> Expr -> Position -> Expr -- | a[b] Index :: Expr -> Expr -> Position -> Expr -- | a(x, y, z) ExprApply :: Apply -> Position -> Expr -- | a.name Mem :: Expr -> Name -> Position -> Expr -- | a->name MemInd :: Expr -> Name -> Position -> Expr -- | sizeof(type) SizeT :: Type -> Position -> Expr -- | sizeof(expr) SizeE :: Expr -> Position -> Expr -- | Initialization expressions. data Init Init :: Expr -> Init InitList :: [Init] -> Init -- | Function application. data Apply Apply :: Expr -> [Expr] -> Apply -- | Parses a merged CIL program, given a file name and contents. parseCIL :: String -> ByteString -> Stmt -- | Format the file position of something with ties to the orignial -- source, like a Stmt or Expr. position :: (Pos a) => a -> String instance Show Apply instance Eq Apply instance Show Init instance Eq Init instance Show Expr instance Eq Expr instance Show Stmt instance Eq Stmt instance Show Type instance Eq Type instance Pos Expr instance Pos Stmt