inline-c 0.5.4.0 → 0.5.4.1
raw patch · 9 files changed
+41/−19 lines, 9 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- changelog.md +2/−0
- examples/gsl-ode.c +1/−1
- inline-c.cabal +1/−1
- src/Language/C/Inline.hs +0/−2
- src/Language/C/Inline/Context.hs +1/−1
- src/Language/C/Inline/HaskellIdentifier.hs +6/−2
- src/Language/C/Inline/Internal.hs +22/−8
- src/Language/C/Types.hs +2/−2
- src/Language/C/Types/Parse.hs +6/−2
changelog.md view
@@ -1,3 +1,5 @@+- 0.5.4.1: Do not generate C code when haddock is type checking. See+ issue #24. - 0.5.4.0: Allow Haskell identifiers in anti-quotes. See issue #23. - 0.5.3.4: Fix `bsCtx` docs. - 0.5.3.3:
examples/gsl-ode.c view
@@ -10,7 +10,7 @@ } -int inline_c_1_47df0b9eb63f3a30404e3c62c19a67e120afdfc6(int (* funIO_inline_c_0)(double t, const double y[], double dydt[], void * params), int dim_c_inline_c_1, double x0_inline_c_2, double xend_inline_c_3, double * fMut_inline_c_4) {+int inline_c_1_a6e274e32d1c2e90339edd389a8b86d3fe8dae07(int (* funIO_inline_c_0)(double t, const double y[], double dydt[], void * params), int dim_c_inline_c_1, double x0_inline_c_2, double xend_inline_c_3, double * fMut_inline_c_4) { gsl_odeiv2_system sys = { funIO_inline_c_0,
inline-c.cabal view
@@ -1,5 +1,5 @@ name: inline-c-version: 0.5.4.0+version: 0.5.4.1 synopsis: Write Haskell source files including C code inline. No FFI required. description: See <https://github.com/fpco/inline-c/blob/master/README.md>. license: MIT
src/Language/C/Inline.hs view
@@ -8,8 +8,6 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} -- This is used for IsString C.Id- -- | Enable painless embedding of C code in Haskell code. If you're interested -- in how to use the library, skip to the "Inline C" section. To build, read the -- first two sections.
src/Language/C/Inline/Context.hs view
@@ -50,7 +50,6 @@ import Data.Int (Int8, Int16, Int32, Int64) import qualified Data.Map as Map import Data.Monoid ((<>))-import Data.Traversable (traverse) import Data.Typeable (Typeable) import qualified Data.Vector.Storable as V import qualified Data.Vector.Storable.Mutable as VM@@ -64,6 +63,7 @@ #if __GLASGOW_HASKELL__ < 710 import Data.Monoid (Monoid(..))+import Data.Traversable (traverse) #endif import Language.C.Inline.FunPtr
src/Language/C/Inline/HaskellIdentifier.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-}@@ -12,8 +13,7 @@ , mangleHaskellIdentifier ) where -import Control.Applicative ((<*), (<$>))-import Control.Applicative ((<|>), (<*>))+import Control.Applicative ((<|>)) import Control.Monad (when, msum, void) import Data.Char (ord) import qualified Data.HashSet as HashSet@@ -31,6 +31,10 @@ import qualified Text.PrettyPrint.ANSI.Leijen as PP import qualified Language.C.Types.Parse as C++#if __GLASGOW_HASKELL__ < 710+import Control.Applicative ((<*), (<$>), (<*>))+#endif -- | A possibly qualified Haskell identifier. newtype HaskellIdentifier = HaskellIdentifier {unHaskellIdentifier :: String}
src/Language/C/Inline/Internal.hs view
@@ -75,6 +75,7 @@ import qualified Text.Parser.Token as Parser import Text.PrettyPrint.ANSI.Leijen ((<+>)) import qualified Text.PrettyPrint.ANSI.Leijen as PP+import System.Environment (getProgName) import Language.C.Inline.Context import Language.C.Inline.FunPtr@@ -112,7 +113,7 @@ -- 'baseCtx' will be used. -> TH.Q Context initialiseModuleState mbContext = do- cFile <- cSourceLoc context+ mbcFile <- cSourceLoc context thisModule <- getModuleId TH.runIO $ modifyMVar moduleStatesVar $ \moduleStates -> do case Map.lookup thisModule moduleStates of@@ -121,7 +122,7 @@ -- If the file exists and this is the first time we write -- something from this module (in other words, if we are -- recompiling the module), kill the file first.- removeIfExists cFile+ forM_ mbcFile $ \cFile -> removeIfExists cFile let moduleState = ModuleState { msContext = context , msGeneratedNames = 0@@ -172,11 +173,22 @@ ------------------------------------------------------------------------ -- Emitting -cSourceLoc :: Context -> TH.Q FilePath+-- | Return the path in which to emit C code. Or 'Nothing' if emitting should be+-- inhibited, say because we're only type checking the module, not emitting code+-- (e.g. with @-fno-code@ or in @haddock@)+cSourceLoc :: Context -> TH.Q (Maybe FilePath) cSourceLoc ctx = do- thisFile <- TH.loc_filename <$> TH.location- let ext = fromMaybe "c" $ ctxFileExtension ctx- return $ dropExtension thisFile `addExtension` ext+ thisFile <- TH.loc_filename <$> TH.location+ let ext = fromMaybe "c" $ ctxFileExtension ctx+ emitCode <- TH.runIO $ do+ prog <- getProgName+ -- Hard-code a common case for not generating code. haddock just+ -- type-checks, so we do not need to generate the C file again.+ -- See issue #24.+ return $ prog /= "haddock"+ return $ if emitCode+ then Just $ dropExtension thisFile `addExtension` ext+ else Nothing removeIfExists :: FilePath -> IO () removeIfExists fileName = removeFile fileName `catch` handleExists@@ -187,8 +199,10 @@ emitVerbatim :: String -> TH.DecsQ emitVerbatim s = do ctx <- getContext- cFile <- cSourceLoc ctx- TH.runIO $ appendFile cFile $ "\n" ++ s ++ "\n"+ mbCFile <- cSourceLoc ctx+ case mbCFile of+ Nothing -> return ()+ Just cFile -> TH.runIO $ appendFile cFile $ "\n" ++ s ++ "\n" return [] ------------------------------------------------------------------------
src/Language/C/Types.hs view
@@ -63,18 +63,18 @@ import Control.Arrow (second) import Control.Monad (when, unless, forM_) import Control.Monad.State (execState, modify)-import Data.Foldable (Foldable) import Data.List (partition) import Data.Maybe (fromMaybe) import Data.Monoid ((<>))-import Data.Traversable (Traversable) import Data.Typeable (Typeable) import Text.PrettyPrint.ANSI.Leijen ((</>), (<+>)) import qualified Text.PrettyPrint.ANSI.Leijen as PP #if __GLASGOW_HASKELL__ < 710+import Data.Foldable (Foldable) import Data.Functor ((<$>)) import Data.Monoid (Monoid(..))+import Data.Traversable (Traversable) #endif import qualified Language.C.Types.Parse as P
src/Language/C/Types/Parse.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFoldable #-}@@ -89,14 +90,12 @@ import Control.Applicative import Control.Monad (msum, void, MonadPlus, unless, when) import Control.Monad.Reader (MonadReader, runReaderT, ReaderT, asks, ask)-import Data.Foldable (Foldable) import Data.Functor.Identity (Identity) import qualified Data.HashSet as HashSet import Data.Hashable (Hashable) import Data.Maybe (mapMaybe) import Data.Monoid ((<>)) import Data.String (IsString(..))-import Data.Traversable (Traversable) import Data.Typeable (Typeable) import qualified Test.QuickCheck as QC import qualified Text.Parsec as Parsec@@ -107,6 +106,11 @@ import qualified Text.Parser.Token.Highlight as Highlight import Text.PrettyPrint.ANSI.Leijen (Pretty(..), (<+>), Doc, hsep) import qualified Text.PrettyPrint.ANSI.Leijen as PP++#if __GLASGOW_HASKELL__ < 710+import Data.Foldable (Foldable)+import Data.Traversable (Traversable)+#endif ------------------------------------------------------------------------ -- Config