language-c99-simple 0.1.0.0 → 0.1.1
raw patch · 3 files changed
+34/−19 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Language.C99.Simple.Translate: castexpr :: () => p -> Expr -> CastExpr
+ Language.C99.Simple.Translate: castexpr :: TypeName -> Expr -> CastExpr
- Language.C99.Simple.Translate: getabstractdeclr :: Type -> State AbstractDeclr ()
+ Language.C99.Simple.Translate: getabstractdeclr :: Type -> State (Maybe AbstractDeclr) ()
- Language.C99.Simple.Translate: initexpr :: () => p -> [Init] -> PostfixExpr
+ Language.C99.Simple.Translate: initexpr :: TypeName -> [Init] -> PostfixExpr
- Language.C99.Simple.Translate: transtypename :: () => a
+ Language.C99.Simple.Translate: transtypename :: TypeName -> TypeName
Files
- ChangeLog.md +5/−0
- language-c99-simple.cabal +3/−3
- src/Language/C99/Simple/Translate.hs +26/−16
ChangeLog.md view
@@ -1,5 +1,10 @@ # Revision history for language-c99-simple +## 0.1.1 -- 2019-04-01++* Implemented `transtypename`, used in typecasts.+* Fixed version bounds on dependencies.+ ## 0.1.0.0 -- 2019-03-30 * First version. Initial version supporting features needed for copilot.
language-c99-simple.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: language-c99-simple-version: 0.1.0.0+version: 0.1.1 synopsis: C-like AST to simplify writing C99 programs. description: This package is a wrapper on top of 'language-c99'. It provides a simpler@@ -33,8 +33,8 @@ -- other-modules: -- other-extensions: build-depends: base >=4.9 && <5,- language-c99 == 0.1.*,- language-c99-util == 0.1.*,+ language-c99 >= 0.1 && < 0.2,+ language-c99-util >= 0.1 && < 0.2, mtl >= 2.2.0 && < 2.3 hs-source-dirs: src default-language: Haskell2010
src/Language/C99/Simple/Translate.hs view
@@ -278,39 +278,49 @@ e1' = wrap $ transexpr e1 e2' = wrap $ transexpr e2 -transtypename = undefined -- TODO-+transtypename :: TypeName -> C.TypeName+transtypename (TypeName ty) = C.TypeName specquals adeclr where+ specquals = getspecquals ty+ adeclr = execState (getabstractdeclr ty) Nothing -getabstractdeclr :: Type -> State C.AbstractDeclr ()+getabstractdeclr :: Type -> State (Maybe C.AbstractDeclr) () getabstractdeclr ty = case ty of- Type ty' -> do+ Type ty' -> do getabstractdeclr ty' adeclr <- get- put $ C.AbstractDeclrDirect Nothing (C.DirectAbstractDeclr adeclr)+ case adeclr of+ Nothing -> return ()+ Just adeclr' -> put $ Just $ C.AbstractDeclrDirect Nothing dadeclr where+ dadeclr = C.DirectAbstractDeclr adeclr' TypeSpec ts -> return () Ptr ty' -> do let (quals, ty'') = gettypequals ty'- getabstractdeclr ty''+ ptr = C.PtrBase quals adeclr <- get- let ptr = C.PtrBase quals- put $ C.AbstractDeclrDirect (Just ptr) (C.DirectAbstractDeclr adeclr)+ case adeclr of+ Nothing -> put $ Just $ C.AbstractDeclr ptr+ Just adeclr' -> put $ Just $ C.AbstractDeclrDirect (Just ptr) dadeclr where+ dadeclr = C.DirectAbstractDeclr adeclr'+ getabstractdeclr ty'' Array ty' len -> do+ let lenexpr = (wrap.transexpr) <$> len+ emptyarrdeclr = C.DirectAbstractDeclrArray1 Nothing Nothing lenexpr+ adeclr <- get+ let declr = case adeclr of+ Nothing -> C.AbstractDeclrDirect Nothing emptyarrdeclr+ Just adeclr -> case adeclr of+ C.AbstractDeclrDirect mptr adeclr' -> C.AbstractDeclrDirect mptr arrdeclr where+ arrdeclr = C.DirectAbstractDeclrArray1 (Just adeclr') Nothing lenexpr+ C.AbstractDeclr ptr -> C.AbstractDeclrDirect (Just ptr) emptyarrdeclr+ put $ Just declr getabstractdeclr ty'- declr <- get- case declr of- C.AbstractDeclrDirect ptr adeclr -> do- let len' = (wrap.transexpr) <$> len- arrdeclr = C.DirectAbstractDeclrArray1 (Just adeclr) Nothing len'- put $ C.AbstractDeclrDirect ptr arrdeclr- _ -> error "This should never happen, contact maintainer if it does." Const ty' -> getabstractdeclr ty' Restrict ty' -> getabstractdeclr ty' Volatile ty' -> getabstractdeclr ty'- transstmt :: Stmt -> C.Stmt transstmt stmt = case stmt of