packages feed

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 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