packages feed

haskell-gi-base 0.26.6 → 0.26.7

raw patch · 5 files changed

+105/−4 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.GI.Base.Attributes: instance (a GHC.Types.~ x) => GHC.OverloadedLabels.IsLabel x (Data.GI.Base.Attributes.AttrLabelProxy a)
- Data.GI.Base.Attributes: instance GHC.Enum.Bounded Data.GI.Base.Attributes.AttrOpTag
- Data.GI.Base.Attributes: instance GHC.Enum.Enum Data.GI.Base.Attributes.AttrOpTag
- Data.GI.Base.Attributes: instance GHC.Show.Show Data.GI.Base.Attributes.AttrOpTag
- Data.GI.Base.BasicTypes: instance GHC.Exception.Type.Exception Data.GI.Base.BasicTypes.UnexpectedNullPointerReturn
- Data.GI.Base.BasicTypes: instance GHC.Show.Show Data.GI.Base.BasicTypes.GType
- Data.GI.Base.BasicTypes: instance GHC.Show.Show Data.GI.Base.BasicTypes.UnexpectedNullPointerReturn
- Data.GI.Base.GError: instance GHC.Exception.Type.Exception Data.GI.Base.GError.GError
- Data.GI.Base.GError: instance GHC.Show.Show Data.GI.Base.GError.GError
- Data.GI.Base.GParamSpec: instance GHC.Enum.Enum Data.GI.Base.GParamSpec.GParamFlag
- Data.GI.Base.GParamSpec: instance GHC.Show.Show Data.GI.Base.GParamSpec.GParamFlag
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Maybe.Maybe Data.GI.Base.BasicTypes.GParamSpec)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Maybe.Maybe Data.Text.Internal.Text)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Maybe.Maybe GHC.Base.String)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Ptr.Ptr a)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Stable.StablePtr a)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Foreign.C.Types.CInt
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Foreign.C.Types.CLong
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Foreign.C.Types.CUInt
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Foreign.C.Types.CULong
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Int.Int32
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Int.Int64
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Word.Word32
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Word.Word64
- Data.GI.Base.GVariant: instance (GHC.Show.Show key, GHC.Show.Show value) => GHC.Show.Show (Data.GI.Base.GVariant.GVariantDictEntry key value)
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word8
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant a => Data.GI.Base.GVariant.IsGVariant (GHC.Maybe.Maybe a)
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word8
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance GHC.Show.Show a => GHC.Show.Show (Data.GI.Base.GVariant.GVariantSinglet a)
- Data.GI.Base.Overloading: instance GHC.Show.Show Data.GI.Base.Overloading.ResolvedSymbolInfo
- Data.GI.Base.Signals: instance (info GHC.Types.~ Data.GI.Base.Overloading.ResolveSignal slot object) => GHC.OverloadedLabels.IsLabel slot (Data.GI.Base.Signals.SignalProxy object info)
+ Data.GI.Base.Attributes: instance (a GHC.Types.~ x) => GHC.Internal.OverloadedLabels.IsLabel x (Data.GI.Base.Attributes.AttrLabelProxy a)
+ Data.GI.Base.Attributes: instance GHC.Internal.Enum.Bounded Data.GI.Base.Attributes.AttrOpTag
+ Data.GI.Base.Attributes: instance GHC.Internal.Enum.Enum Data.GI.Base.Attributes.AttrOpTag
+ Data.GI.Base.Attributes: instance GHC.Internal.Show.Show Data.GI.Base.Attributes.AttrOpTag
+ Data.GI.Base.BasicTypes: instance GHC.Internal.Exception.Type.Exception Data.GI.Base.BasicTypes.UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: instance GHC.Internal.Show.Show Data.GI.Base.BasicTypes.GType
+ Data.GI.Base.BasicTypes: instance GHC.Internal.Show.Show Data.GI.Base.BasicTypes.UnexpectedNullPointerReturn
+ Data.GI.Base.GError: instance GHC.Internal.Exception.Type.Exception Data.GI.Base.GError.GError
+ Data.GI.Base.GError: instance GHC.Internal.Show.Show Data.GI.Base.GError.GError
+ Data.GI.Base.GParamSpec: instance GHC.Internal.Enum.Enum Data.GI.Base.GParamSpec.GParamFlag
+ Data.GI.Base.GParamSpec: instance GHC.Internal.Show.Show Data.GI.Base.GParamSpec.GParamFlag
+ Data.GI.Base.GType: gtypeHValue :: GType
+ Data.GI.Base.GValue: HValue :: a -> HValue a
+ Data.GI.Base.GValue: NoHValue :: HValue a
+ Data.GI.Base.GValue: data HValue a
+ Data.GI.Base.GValue: get_hvalue :: Typeable a => Ptr GValue -> IO (HValue a)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Internal.Maybe.Maybe Data.GI.Base.BasicTypes.GParamSpec)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Internal.Maybe.Maybe Data.Text.Internal.Text)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Internal.Ptr.Ptr a)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Internal.Stable.StablePtr a)
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Foreign.C.Types.CInt
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Foreign.C.Types.CLong
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Foreign.C.Types.CUInt
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Foreign.C.Types.CULong
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Int.Int32
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Int.Int64
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Word.Word32
+ Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Internal.Word.Word64
+ Data.GI.Base.GValue: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.GI.Base.GValue.HValue a)
+ Data.GI.Base.GValue: instance GHC.Internal.Data.Typeable.Internal.Typeable a => Data.GI.Base.GValue.IsGValue (Data.GI.Base.GValue.HValue a)
+ Data.GI.Base.GValue: instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.GI.Base.GValue.HValue a)
+ Data.GI.Base.GValue: set_hvalue :: Typeable a => Ptr GValue -> HValue a -> IO ()
+ Data.GI.Base.GVariant: instance (GHC.Internal.Show.Show key, GHC.Internal.Show.Show value) => GHC.Internal.Show.Show (Data.GI.Base.GVariant.GVariantDictEntry key value)
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Int.Int16
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Int.Int32
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Int.Int64
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Word.Word16
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Word.Word32
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Word.Word64
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Internal.Word.Word8
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant a => Data.GI.Base.GVariant.IsGVariant (GHC.Internal.Maybe.Maybe a)
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Int.Int16
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Int.Int32
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Int.Int64
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Word.Word16
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Word.Word32
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Word.Word64
+ Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Internal.Word.Word8
+ Data.GI.Base.GVariant: instance GHC.Internal.Show.Show Data.GI.Base.GVariant.GVariantHandle
+ Data.GI.Base.GVariant: instance GHC.Internal.Show.Show Data.GI.Base.GVariant.GVariantObjectPath
+ Data.GI.Base.GVariant: instance GHC.Internal.Show.Show Data.GI.Base.GVariant.GVariantSignature
+ Data.GI.Base.GVariant: instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.GI.Base.GVariant.GVariantSinglet a)
+ Data.GI.Base.Overloading: instance GHC.Internal.Show.Show Data.GI.Base.Overloading.ResolvedSymbolInfo
+ Data.GI.Base.ShortPrelude: class a ~# b => (a :: k) ~ (b :: k)
+ Data.GI.Base.Signals: instance (info GHC.Types.~ Data.GI.Base.Overloading.ResolveSignal slot object) => GHC.Internal.OverloadedLabels.IsLabel slot (Data.GI.Base.Signals.SignalProxy object info)
- Data.GI.Base.ShortPrelude: infix 4 /=
+ Data.GI.Base.ShortPrelude: infix 4 ~

Files

ChangeLog.md view
@@ -1,3 +1,7 @@+### 0.24.7+++ Add a mechanism for marshalling generic Haskell values into `GValue`s.+ ### 0.24.4  + Add a workaround for old hsc2hs versions, so drop the constraint on hsc2hs.
Data/GI/Base/GType.hsc view
@@ -24,6 +24,7 @@     , gtypeParam      , gtypeStablePtr+    , gtypeHValue     ) where  import Data.GI.Base.BasicTypes (GType(..), CGType)@@ -136,6 +137,12 @@ -- | The `GType` for boxed `StablePtr`s. gtypeStablePtr :: GType gtypeStablePtr = GType haskell_gi_StablePtr_get_type++foreign import ccall haskell_gi_HaskellValue_get_type :: CGType++-- | The `GType` for a generic Haskell value.+gtypeHValue :: GType+gtypeHValue = GType haskell_gi_HaskellValue_get_type  foreign import ccall "g_error_get_type" g_error_get_type :: CGType 
Data/GI/Base/GValue.hs view
@@ -29,6 +29,9 @@     , unpackGValueArrayWithLength     , mapGValueArrayWithLength +    -- * Packing Haskell values into GValues+    , HValue(..)+     -- * Setters and getters     , set_object     , get_object@@ -45,6 +48,8 @@     , take_stablePtr     , set_param     , get_param+    , set_hvalue+    , get_hvalue     ) where  import Control.Monad.IO.Class (MonadIO, liftIO)@@ -58,8 +63,12 @@                         CLong(..), CULong(..)) import Foreign.C.String (CString) import Foreign.Ptr (Ptr, nullPtr, plusPtr, FunPtr)-import Foreign.StablePtr (StablePtr, castStablePtrToPtr, castPtrToStablePtr)+import Foreign.StablePtr (StablePtr, castStablePtrToPtr, castPtrToStablePtr,+                          newStablePtr, deRefStablePtr)+import Type.Reflection (typeRep, TypeRep)+import System.IO (hPutStrLn, stderr) +import Data.Dynamic (toDyn, fromDynamic, Typeable) import Data.GI.Base.BasicTypes import Data.GI.Base.BasicConversions (cstringToText, textToCString) import Data.GI.Base.GType@@ -258,6 +267,11 @@   gvalueSet_ = set_param   gvalueGet_ = get_param +instance Typeable a => IsGValue (HValue a) where+  gvalueGType_ = return gtypeHValue+  gvalueSet_ = set_hvalue+  gvalueGet_ = get_hvalue+ foreign import ccall "g_value_set_string" _set_string ::     Ptr GValue -> CString -> IO () foreign import ccall "g_value_get_string" _get_string ::@@ -404,11 +418,12 @@ set_stablePtr :: Ptr GValue -> StablePtr a -> IO () set_stablePtr gv ptr = set_boxed gv (castStablePtrToPtr ptr) -foreign import ccall g_value_take_boxed :: Ptr GValue -> StablePtr a -> IO ()+foreign import ccall g_value_take_boxed :: Ptr GValue -> Ptr a -> IO ()  -- | Like `set_stablePtr`, but the `GValue` takes ownership of the `StablePtr` take_stablePtr :: Ptr GValue -> StablePtr a -> IO ()-take_stablePtr = g_value_take_boxed+take_stablePtr gvPtr stablePtr =+  g_value_take_boxed gvPtr (castStablePtrToPtr stablePtr)  -- | Get the value of a `GValue` containing a `StablePtr` get_stablePtr :: Ptr GValue -> IO (StablePtr a)@@ -482,3 +497,42 @@     else do     fPtr <- g_param_spec_ref ptr >>= newManagedPtr' ptr_to_g_param_spec_unref     return . Just $! GParamSpec fPtr++-- | A type isomorphic to `Maybe a`, used to indicate to+-- `fromGValue`/`toGValue` that we are packing a native Haskell value,+-- without attempting to marshall it to the corresponding C type.+data HValue a = HValue a -- ^ A packed value of type `a`+              | NoHValue -- ^ An empty `HValue`+  deriving (Show, Eq)++-- | Set the `GValue` to the given Haskell value.+set_hvalue :: Typeable a => Ptr GValue -> HValue a -> IO ()+set_hvalue gvPtr NoHValue = set_boxed gvPtr nullPtr+set_hvalue gvPtr (HValue v) = do+  sPtr <- newStablePtr (toDyn v)+  g_value_take_boxed gvPtr (castStablePtrToPtr sPtr)++-- | Get the value in the GValue, checking that the type is+-- `gtypeHValue`. Will return NULL and print a warning if the GValue+-- is of the wrong type.+foreign import ccall "haskell_gi_safe_get_boxed_haskell_value" safe_get_boxed_hvalue ::+    Ptr GValue -> IO (Ptr b)++-- | Read the Haskell value of the given type from the `GValue`. If+-- the `GValue` contains no value of the expected type, `NoHValue`+-- will be returned instead, and an error will be printed to stderr.+get_hvalue :: forall a. Typeable a => Ptr GValue -> IO (HValue a)+get_hvalue gvPtr = do+  hvaluePtr <- safe_get_boxed_hvalue gvPtr+  if hvaluePtr == nullPtr+    then return NoHValue+    else do+      dyn <- deRefStablePtr (castPtrToStablePtr hvaluePtr)+      case fromDynamic dyn of+        Nothing -> do+          hPutStrLn stderr ("HASKELL-GI: Unexpected type ‘" <> show dyn+                             <> "’ inside the GValue at ‘" <> show gvPtr+                             <> "’.\n\tExpected ‘" <> show (typeRep :: TypeRep a)+                             <> "’.")+          return NoHValue+        Just val -> return (HValue val)
csrc/hsgclosure.c view
@@ -383,6 +383,42 @@   return g_define_type_id; } +/* This is identical to haskell_gi_StablePtr_get_type, other than the+   type name. The reason for this is that we want two different types,+   to distinguish between GValues wrapping generic StablePtrs, and+   those wrapping specifically wrapping StablePtrs to Dynamic+   values. */+GType haskell_gi_HaskellValue_get_type (void)+{+  static gsize g_define_type_id = 0;++  if (g_once_init_enter (&g_define_type_id))+    {+      GType type_id =+        g_boxed_type_register_static (g_intern_static_string ("HaskellGIHaskellValue"),+                                      duplicateStablePtr,+                                      hs_free_stable_ptr);++      g_once_init_leave (&g_define_type_id, type_id);+    }++  return g_define_type_id;+}++/* A safer version of get_boxed, that checks that the GValue contains+   the right boxed type. */+gpointer haskell_gi_safe_get_boxed_haskell_value(const GValue *gv)+{+  if (G_VALUE_TYPE(gv) != haskell_gi_HaskellValue_get_type()) {+    fprintf(stderr, "Unexpected type inside the GValue: ‘%s’\n.",+            G_VALUE_TYPE_NAME(gv));++    return NULL;+  }++  return g_value_get_boxed(gv);+}+ /* Release the FunPtr allocated for a Haskell signal handler */ void haskell_gi_release_signal_closure (gpointer unused,
haskell-gi-base.cabal view
@@ -1,5 +1,5 @@ name:                haskell-gi-base-version:             0.26.6+version:             0.26.7 synopsis:            Foundation for libraries generated by haskell-gi description:         Foundation for libraries generated by haskell-gi homepage:            https://github.com/haskell-gi/haskell-gi