packages feed

inline-c 0.5.4.3 → 0.5.5.0

raw patch · 5 files changed

+79/−21 lines, 5 filesdep ~ChartPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: Chart

API changes (from Hackage documentation)

+ Language.C.Inline.Interruptible: block :: QuasiQuoter
+ Language.C.Inline.Interruptible: exp :: QuasiQuoter
+ Language.C.Inline.Interruptible: pure :: QuasiQuoter

Files

README.md view
@@ -323,7 +323,7 @@   -- These flags will be passed to the C compiler   cc-options:          -Wall -O2   -- Libraries to link the code with.-  extra-libraries:     -lm+  extra-libraries:     m   ... ``` 
inline-c.cabal view
@@ -1,5 +1,5 @@ name:                inline-c-version:             0.5.4.3+version:             0.5.5.0 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@@ -27,6 +27,7 @@                      , Language.C.Inline.HaskellIdentifier                      , Language.C.Inline.Internal                      , Language.C.Inline.Unsafe+                     , Language.C.Inline.Interruptible                      , Language.C.Types                      , Language.C.Types.Parse   other-modules:       Language.C.Inline.FunPtr@@ -90,7 +91,7 @@     build-depends:     base >=4 && <5                      , inline-c                      , vector-                     , Chart+                     , Chart >= 1.3                      , Chart-cairo   else     buildable: False
+ src/Language/C/Inline/Interruptible.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE CPP #-}++-- | @interruptible@ variants of the "Language.C.Inline" quasi-quoters, to call+-- interruptible C code. See <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi.html#ffi-interruptible>+-- for more information.+--+-- This module is intended to be imported qualified:+--+-- @+-- import qualified "Language.C.Inline.Interruptible" as CI+-- @++module Language.C.Inline.Interruptible+  ( exp+  , pure+  , block+  ) where++#if __GLASGOW_HASKELL__ < 710+import           Prelude hiding (exp)+#else+import           Prelude hiding (exp, pure)+#endif++import qualified Language.Haskell.TH.Quote as TH+import qualified Language.Haskell.TH.Syntax as TH++import           Language.C.Inline.Context+import           Language.C.Inline.Internal++-- | C expressions.+exp :: TH.QuasiQuoter+exp = genericQuote IO $ inlineExp TH.Interruptible++-- | Variant of 'exp', for use with expressions known to have no side effects.+--+-- BEWARE: use this function with caution, only when you know what you are+-- doing. If an expression does in fact have side-effects, then indiscriminate+-- use of 'pure' may endanger referential transparency, and in principle even+-- type safety.+pure :: TH.QuasiQuoter+pure = genericQuote Pure $ inlineExp TH.Interruptible++-- | C code blocks (i.e. statements).+block :: TH.QuasiQuoter+block = genericQuote IO $ inlineItems TH.Interruptible
test/tests.c view
@@ -40,67 +40,72 @@ }  -void inline_c_Main_5_bbad659b194c6226bc20ec8262bc1c599dddeb28() {+int inline_c_Main_5_f58397f6204cd35d25406cea930cdd76127e7a8d(int x_inline_c_0, int y_inline_c_1) {+return ( 7 + x_inline_c_0 + y_inline_c_1 );+}+++void inline_c_Main_6_bbad659b194c6226bc20ec8262bc1c599dddeb28() {  printf("Hello\n") ; }  -ptrdiff_t inline_c_Main_6_4475cd73db749194709e394483ff3e5205688ff8(ptrdiff_t x_inline_c_0) {+ptrdiff_t inline_c_Main_7_4475cd73db749194709e394483ff3e5205688ff8(ptrdiff_t x_inline_c_0) {  char a[2]; return &a[1] - &a[0] + x_inline_c_0;  }  -size_t inline_c_Main_7_9782c357435fb488c3166bf10e839da13328001e() {+size_t inline_c_Main_8_9782c357435fb488c3166bf10e839da13328001e() { return ( sizeof (char) ); }  -uintmax_t inline_c_Main_8_c0df91f70bbf1f85671339d1bdc524414e112cc2() {+uintmax_t inline_c_Main_9_c0df91f70bbf1f85671339d1bdc524414e112cc2() { return ( UINTMAX_MAX ); }  -int16_t inline_c_Main_9_9e29ba00e56a81c765067e09a3136fa5232d49a0(int16_t x_inline_c_0) {+int16_t inline_c_Main_10_9e29ba00e56a81c765067e09a3136fa5232d49a0(int16_t x_inline_c_0) { return ( 1 + x_inline_c_0 ); }  -uint32_t inline_c_Main_10_08a42fa8f755a36db897898b73bb7aab5b1b58e1(uint32_t y_inline_c_0) {+uint32_t inline_c_Main_11_08a42fa8f755a36db897898b73bb7aab5b1b58e1(uint32_t y_inline_c_0) { return ( y_inline_c_0 * 7 ); }  -int inline_c_Main_11_4ffe4d055df0966eedc85f08247aa8880402694a(int (* ackermannPtr_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) {+int inline_c_Main_12_4ffe4d055df0966eedc85f08247aa8880402694a(int (* ackermannPtr_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) { return ( ackermannPtr_inline_c_0(x_inline_c_1, y_inline_c_2) ); }  -int (* inline_c_Main_12_7e6957a671db751a0a5b5e9721b3c45002fab68f())(int , int ) {+int (* inline_c_Main_13_7e6957a671db751a0a5b5e9721b3c45002fab68f())(int , int ) { return ( &francescos_add ); }  -int inline_c_Main_13_55555bbb777d25d03fef0a6d6ce9193474a74a35(int (* ackermann__inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) {+int inline_c_Main_14_55555bbb777d25d03fef0a6d6ce9193474a74a35(int (* ackermann__inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) { return ( ackermann__inline_c_0(x_inline_c_1, y_inline_c_2) ); }  -int inline_c_Main_14_4ffe4d055df0966eedc85f08247aa8880402694a(int (* ackermannPtr_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) {+int inline_c_Main_15_4ffe4d055df0966eedc85f08247aa8880402694a(int (* ackermannPtr_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) { return ( ackermannPtr_inline_c_0(x_inline_c_1, y_inline_c_2) ); }  -int inline_c_Main_15_b7d965842e65c49fcc08b03f70454988290e61e4(int (* ackermann_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) {+int inline_c_Main_16_b7d965842e65c49fcc08b03f70454988290e61e4(int (* ackermann_inline_c_0)(int , int ), int x_inline_c_1, int y_inline_c_2) { return ( ackermann_inline_c_0(x_inline_c_1, y_inline_c_2) ); }  -double inline_c_Main_16_5dce1654ef6186acdb189a6ce36f0a66660eb346(double (* fun_inline_c_0)(double )) {+double inline_c_Main_17_5dce1654ef6186acdb189a6ce36f0a66660eb346(double (* fun_inline_c_0)(double )) { return ( fun_inline_c_0(3.0) ); }  -int inline_c_Main_17_8d0f093895f51773152915c33b75c7aafd8f4f45(int n_inline_c_0, int * ptr_inline_c_1) {+int inline_c_Main_18_8d0f093895f51773152915c33b75c7aafd8f4f45(int n_inline_c_0, int * ptr_inline_c_1) {          int i;         int x = 0;@@ -112,7 +117,7 @@ }  -int inline_c_Main_18_62ce8aade5e693f134c6a5c9add3523edab1a63e(long vec_inline_c_0, int * vec_inline_c_1) {+int inline_c_Main_19_62ce8aade5e693f134c6a5c9add3523edab1a63e(long vec_inline_c_0, int * vec_inline_c_1) {          int i;         int x = 0;@@ -124,7 +129,7 @@ }  -int inline_c_Main_19_75f1401fb8545756b6d329a5352a252bf52db946(long bs_inline_c_0, char * bs_inline_c_1) {+int inline_c_Main_20_75f1401fb8545756b6d329a5352a252bf52db946(long bs_inline_c_0, char * bs_inline_c_1) {            int i, bits = 0;           for (i = 0; i < bs_inline_c_0; i++) {@@ -136,17 +141,17 @@ }  -int inline_c_Main_20_6fa3d382d3ab7f6d57eec7fbfe64e87fbc2a0ca9(int x_27_inline_c_0) {+int inline_c_Main_21_6fa3d382d3ab7f6d57eec7fbfe64e87fbc2a0ca9(int x_27_inline_c_0) { return ( x_27_inline_c_0 ); }  -int inline_c_Main_21_dbf060cb8fa2b86c6c6838ef9b645ac20f38ba79(int _e4_inline_c_0) {+int inline_c_Main_22_dbf060cb8fa2b86c6c6838ef9b645ac20f38ba79(int _e4_inline_c_0) { return ( _e4_inline_c_0 ); }  -int inline_c_Main_22_2421969c444755bea2c6f2060e0921ce7f3d16d7(int PreludemaxBound_2e_inline_c_0) {+int inline_c_Main_23_2421969c444755bea2c6f2060e0921ce7f3d16d7(int PreludemaxBound_2e_inline_c_0) { return ( PreludemaxBound_2e_inline_c_0 ); } 
test/tests.hs view
@@ -13,6 +13,7 @@  import qualified Language.C.Inline as C import qualified Language.C.Inline.Unsafe as CU+import qualified Language.C.Inline.Interruptible as CI import qualified Language.C.Inline.Internal as C import qualified Language.C.Inline.ContextSpec import qualified Language.C.Inline.ParseSpec@@ -82,6 +83,11 @@       let x = 2       let y = 10       z <- [CU.exp| int{ 7 + $(int x) + $(int y) } |]+      z `Hspec.shouldBe` x + y + 7+    Hspec.it "interruptible exp" $ do+      let x = 2+      let y = 10+      z <- [CI.exp| int{ 7 + $(int x) + $(int y) } |]       z `Hspec.shouldBe` x + y + 7     Hspec.it "void exp" $ do       [C.exp| void { printf("Hello\n") } |]