gi-javascriptcore-4.0.17: GI/JavaScriptCore/Objects/Class.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
/No description available in the introspection data./
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.JavaScriptCore.Objects.Class
(
-- * Exported types
Class(..) ,
IsClass ,
toClass ,
noClass ,
-- * Methods
-- ** addConstructor #method:addConstructor#
#if ENABLE_OVERLOADING
ClassAddConstructorMethodInfo ,
#endif
classAddConstructor ,
-- ** addConstructorVariadic #method:addConstructorVariadic#
#if ENABLE_OVERLOADING
ClassAddConstructorVariadicMethodInfo ,
#endif
classAddConstructorVariadic ,
-- ** addMethod #method:addMethod#
#if ENABLE_OVERLOADING
ClassAddMethodMethodInfo ,
#endif
classAddMethod ,
-- ** addMethodVariadic #method:addMethodVariadic#
#if ENABLE_OVERLOADING
ClassAddMethodVariadicMethodInfo ,
#endif
classAddMethodVariadic ,
-- ** addProperty #method:addProperty#
#if ENABLE_OVERLOADING
ClassAddPropertyMethodInfo ,
#endif
classAddProperty ,
-- ** getName #method:getName#
#if ENABLE_OVERLOADING
ClassGetNameMethodInfo ,
#endif
classGetName ,
-- ** getParent #method:getParent#
#if ENABLE_OVERLOADING
ClassGetParentMethodInfo ,
#endif
classGetParent ,
-- * Properties
-- ** context #attr:context#
{- | The 'GI.JavaScriptCore.Objects.Context.Context' in which the class was registered.
-}
#if ENABLE_OVERLOADING
ClassContextPropertyInfo ,
#endif
#if ENABLE_OVERLOADING
classContext ,
#endif
constructClassContext ,
getClassContext ,
-- ** name #attr:name#
{- | The name of the class.
-}
#if ENABLE_OVERLOADING
ClassNamePropertyInfo ,
#endif
#if ENABLE_OVERLOADING
className ,
#endif
constructClassName ,
getClassName ,
-- ** parent #attr:parent#
{- | The parent class or 'Nothing' in case of final classes.
-}
#if ENABLE_OVERLOADING
ClassParentPropertyInfo ,
#endif
#if ENABLE_OVERLOADING
classParent ,
#endif
constructClassParent ,
getClassParent ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GI.GLib.Callbacks as GLib.Callbacks
import qualified GI.GObject.Callbacks as GObject.Callbacks
import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.JavaScriptCore.Objects.Context as JavaScriptCore.Context
import {-# SOURCE #-} qualified GI.JavaScriptCore.Objects.Value as JavaScriptCore.Value
-- | Memory-managed wrapper type.
newtype Class = Class (ManagedPtr Class)
foreign import ccall "jsc_class_get_type"
c_jsc_class_get_type :: IO GType
instance GObject Class where
gobjectType = c_jsc_class_get_type
-- | Type class for types which can be safely cast to `Class`, for instance with `toClass`.
class (GObject o, O.IsDescendantOf Class o) => IsClass o
instance (GObject o, O.IsDescendantOf Class o) => IsClass o
instance O.HasParentTypes Class
type instance O.ParentTypes Class = '[GObject.Object.Object]
-- | Cast to `Class`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toClass :: (MonadIO m, IsClass o) => o -> m Class
toClass = liftIO . unsafeCastTo Class
-- | A convenience alias for `Nothing` :: `Maybe` `Class`.
noClass :: Maybe Class
noClass = Nothing
#if ENABLE_OVERLOADING
type family ResolveClassMethod (t :: Symbol) (o :: *) :: * where
ResolveClassMethod "addConstructor" o = ClassAddConstructorMethodInfo
ResolveClassMethod "addConstructorVariadic" o = ClassAddConstructorVariadicMethodInfo
ResolveClassMethod "addMethod" o = ClassAddMethodMethodInfo
ResolveClassMethod "addMethodVariadic" o = ClassAddMethodVariadicMethodInfo
ResolveClassMethod "addProperty" o = ClassAddPropertyMethodInfo
ResolveClassMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveClassMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveClassMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveClassMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveClassMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveClassMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveClassMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveClassMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveClassMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveClassMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveClassMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveClassMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveClassMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveClassMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveClassMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveClassMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveClassMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveClassMethod "getName" o = ClassGetNameMethodInfo
ResolveClassMethod "getParent" o = ClassGetParentMethodInfo
ResolveClassMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveClassMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveClassMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveClassMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveClassMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveClassMethod t Class, O.MethodInfo info Class p) => OL.IsLabel t (Class -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif
-- VVV Prop "context"
-- Type: TInterface (Name {namespace = "JavaScriptCore", name = "Context"})
-- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
-- Nullable: (Nothing,Nothing)
{- |
Get the value of the “@context@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' class #context
@
-}
getClassContext :: (MonadIO m, IsClass o) => o -> m (Maybe JavaScriptCore.Context.Context)
getClassContext obj = liftIO $ B.Properties.getObjectPropertyObject obj "context" JavaScriptCore.Context.Context
{- |
Construct a `GValueConstruct` with valid value for the “@context@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructClassContext :: (IsClass o, JavaScriptCore.Context.IsContext a) => a -> IO (GValueConstruct o)
constructClassContext val = B.Properties.constructObjectPropertyObject "context" (Just val)
#if ENABLE_OVERLOADING
data ClassContextPropertyInfo
instance AttrInfo ClassContextPropertyInfo where
type AttrAllowedOps ClassContextPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint ClassContextPropertyInfo = JavaScriptCore.Context.IsContext
type AttrBaseTypeConstraint ClassContextPropertyInfo = IsClass
type AttrGetType ClassContextPropertyInfo = (Maybe JavaScriptCore.Context.Context)
type AttrLabel ClassContextPropertyInfo = "context"
type AttrOrigin ClassContextPropertyInfo = Class
attrGet _ = getClassContext
attrSet _ = undefined
attrConstruct _ = constructClassContext
attrClear _ = undefined
#endif
-- VVV Prop "name"
-- Type: TBasicType TUTF8
-- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
-- Nullable: (Just False,Nothing)
{- |
Get the value of the “@name@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' class #name
@
-}
getClassName :: (MonadIO m, IsClass o) => o -> m T.Text
getClassName obj = liftIO $ checkUnexpectedNothing "getClassName" $ B.Properties.getObjectPropertyString obj "name"
{- |
Construct a `GValueConstruct` with valid value for the “@name@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructClassName :: (IsClass o) => T.Text -> IO (GValueConstruct o)
constructClassName val = B.Properties.constructObjectPropertyString "name" (Just val)
#if ENABLE_OVERLOADING
data ClassNamePropertyInfo
instance AttrInfo ClassNamePropertyInfo where
type AttrAllowedOps ClassNamePropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint ClassNamePropertyInfo = (~) T.Text
type AttrBaseTypeConstraint ClassNamePropertyInfo = IsClass
type AttrGetType ClassNamePropertyInfo = T.Text
type AttrLabel ClassNamePropertyInfo = "name"
type AttrOrigin ClassNamePropertyInfo = Class
attrGet _ = getClassName
attrSet _ = undefined
attrConstruct _ = constructClassName
attrClear _ = undefined
#endif
-- VVV Prop "parent"
-- Type: TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
-- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
-- Nullable: (Just False,Nothing)
{- |
Get the value of the “@parent@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' class #parent
@
-}
getClassParent :: (MonadIO m, IsClass o) => o -> m Class
getClassParent obj = liftIO $ checkUnexpectedNothing "getClassParent" $ B.Properties.getObjectPropertyObject obj "parent" Class
{- |
Construct a `GValueConstruct` with valid value for the “@parent@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructClassParent :: (IsClass o, IsClass a) => a -> IO (GValueConstruct o)
constructClassParent val = B.Properties.constructObjectPropertyObject "parent" (Just val)
#if ENABLE_OVERLOADING
data ClassParentPropertyInfo
instance AttrInfo ClassParentPropertyInfo where
type AttrAllowedOps ClassParentPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint ClassParentPropertyInfo = IsClass
type AttrBaseTypeConstraint ClassParentPropertyInfo = IsClass
type AttrGetType ClassParentPropertyInfo = Class
type AttrLabel ClassParentPropertyInfo = "parent"
type AttrOrigin ClassParentPropertyInfo = Class
attrGet _ = getClassParent
attrSet _ = undefined
attrConstruct _ = constructClassParent
attrClear _ = undefined
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList Class
type instance O.AttributeList Class = ClassAttributeList
type ClassAttributeList = ('[ '("context", ClassContextPropertyInfo), '("name", ClassNamePropertyInfo), '("parent", ClassParentPropertyInfo)] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
classContext :: AttrLabelProxy "context"
classContext = AttrLabelProxy
className :: AttrLabelProxy "name"
className = AttrLabelProxy
classParent :: AttrLabelProxy "parent"
classParent = AttrLabelProxy
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList Class = ClassSignalList
type ClassSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method Class::add_constructor_variadic
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the constructor name or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to create an instance of @jsc_class", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 4, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "destroy notifier for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "return_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GType of the constructor return value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "JavaScriptCore", name = "Value"}))
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_add_constructor_variadic" jsc_class_add_constructor_variadic ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
CString -> -- name : TBasicType TUTF8
FunPtr GObject.Callbacks.C_Callback -> -- callback : TInterface (Name {namespace = "GObject", name = "Callback"})
Ptr () -> -- user_data : TBasicType TPtr
FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
CGType -> -- return_type : TBasicType TGType
IO (Ptr JavaScriptCore.Value.Value)
{- |
Add a constructor to /@jscClass@/. If /@name@/ is 'Nothing', the class name will be used. When \<function>new\<\/function>
is used with the constructor or @/jsc_value_constructor_call()/@ is called, /@callback@/ is invoked receiving
a 'GI.GLib.Structs.PtrArray.PtrArray' of 'GI.JavaScriptCore.Objects.Value.Value'\<!-- -->s as arguments and /@userData@/ as the last parameter. When the constructor object
is cleared in the 'GI.JavaScriptCore.Objects.Class.Class' context, /@destroyNotify@/ is called with /@userData@/ as parameter.
This function creates the constructor, which needs to be added to an object as a property to be able to use it. Use
'GI.JavaScriptCore.Objects.Context.contextSetValue' to make the constructor available in the global object.
Note that the value returned by /@callback@/ is adopted by /@jscClass@/, and the 'GI.GLib.Callbacks.DestroyNotify' passed to
'GI.JavaScriptCore.Objects.Context.contextRegisterClass' is responsible for disposing of it.
-}
classAddConstructorVariadic ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a 'GI.JavaScriptCore.Objects.Class.Class' -}
-> Maybe (T.Text)
{- ^ /@name@/: the constructor name or 'Nothing' -}
-> GObject.Callbacks.Callback
{- ^ /@callback@/: a 'GI.GObject.Callbacks.Callback' to be called to create an instance of /@jscClass@/ -}
-> GType
{- ^ /@returnType@/: the 'GType' of the constructor return value -}
-> m JavaScriptCore.Value.Value
{- ^ __Returns:__ a 'GI.JavaScriptCore.Objects.Value.Value' representing the class constructor. -}
classAddConstructorVariadic jscClass name callback returnType = liftIO $ do
jscClass' <- unsafeManagedPtrCastPtr jscClass
maybeName <- case name of
Nothing -> return nullPtr
Just jName -> do
jName' <- textToCString jName
return jName'
callback' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback Nothing callback)
let returnType' = gtypeToCGType returnType
let userData = castFunPtrToPtr callback'
let destroyNotify = safeFreeFunPtrPtr
result <- jsc_class_add_constructor_variadic jscClass' maybeName callback' userData destroyNotify returnType'
checkUnexpectedReturnNULL "classAddConstructorVariadic" result
result' <- (wrapObject JavaScriptCore.Value.Value) result
touchManagedPtr jscClass
freeMem maybeName
return result'
#if ENABLE_OVERLOADING
data ClassAddConstructorVariadicMethodInfo
instance (signature ~ (Maybe (T.Text) -> GObject.Callbacks.Callback -> GType -> m JavaScriptCore.Value.Value), MonadIO m, IsClass a) => O.MethodInfo ClassAddConstructorVariadicMethodInfo a signature where
overloadedMethod _ = classAddConstructorVariadic
#endif
-- method Class::add_constructor
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the constructor name or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to create an instance of @jsc_class", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 4, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "destroy notifier for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "return_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GType of the constructor return value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_parameters", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of parameters", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parameter_types", argType = TCArray False (-1) 6 (TBasicType TGType), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a list of #GType<!-- -->s, one for each parameter, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "n_parameters", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of parameters", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : Just (TInterface (Name {namespace = "JavaScriptCore", name = "Value"}))
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_add_constructorv" jsc_class_add_constructorv ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
CString -> -- name : TBasicType TUTF8
FunPtr GObject.Callbacks.C_Callback -> -- callback : TInterface (Name {namespace = "GObject", name = "Callback"})
Ptr () -> -- user_data : TBasicType TPtr
FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
CGType -> -- return_type : TBasicType TGType
Word32 -> -- n_parameters : TBasicType TUInt
Ptr CGType -> -- parameter_types : TCArray False (-1) 6 (TBasicType TGType)
IO (Ptr JavaScriptCore.Value.Value)
{- |
Add a constructor to /@jscClass@/. If /@name@/ is 'Nothing', the class name will be used. When \<function>new\<\/function>
is used with the constructor or @/jsc_value_constructor_call()/@ is called, /@callback@/ is invoked receiving the
parameters and /@userData@/ as the last parameter. When the constructor object is cleared in the 'GI.JavaScriptCore.Objects.Class.Class' context,
/@destroyNotify@/ is called with /@userData@/ as parameter.
This function creates the constructor, which needs to be added to an object as a property to be able to use it. Use
'GI.JavaScriptCore.Objects.Context.contextSetValue' to make the constructor available in the global object.
Note that the value returned by /@callback@/ is adopted by /@jscClass@/, and the 'GI.GLib.Callbacks.DestroyNotify' passed to
'GI.JavaScriptCore.Objects.Context.contextRegisterClass' is responsible for disposing of it.
-}
classAddConstructor ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a 'GI.JavaScriptCore.Objects.Class.Class' -}
-> Maybe (T.Text)
{- ^ /@name@/: the constructor name or 'Nothing' -}
-> GObject.Callbacks.Callback
{- ^ /@callback@/: a 'GI.GObject.Callbacks.Callback' to be called to create an instance of /@jscClass@/ -}
-> GType
{- ^ /@returnType@/: the 'GType' of the constructor return value -}
-> Maybe ([GType])
{- ^ /@parameterTypes@/: a list of 'GType'\<!-- -->s, one for each parameter, or 'Nothing' -}
-> m JavaScriptCore.Value.Value
{- ^ __Returns:__ a 'GI.JavaScriptCore.Objects.Value.Value' representing the class constructor. -}
classAddConstructor jscClass name callback returnType parameterTypes = liftIO $ do
let nParameters = case parameterTypes of
Nothing -> 0
Just jParameterTypes -> fromIntegral $ length jParameterTypes
jscClass' <- unsafeManagedPtrCastPtr jscClass
maybeName <- case name of
Nothing -> return nullPtr
Just jName -> do
jName' <- textToCString jName
return jName'
callback' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback Nothing callback)
let returnType' = gtypeToCGType returnType
maybeParameterTypes <- case parameterTypes of
Nothing -> return nullPtr
Just jParameterTypes -> do
jParameterTypes' <- (packMapStorableArray gtypeToCGType) jParameterTypes
return jParameterTypes'
let userData = castFunPtrToPtr callback'
let destroyNotify = safeFreeFunPtrPtr
result <- jsc_class_add_constructorv jscClass' maybeName callback' userData destroyNotify returnType' nParameters maybeParameterTypes
checkUnexpectedReturnNULL "classAddConstructor" result
result' <- (wrapObject JavaScriptCore.Value.Value) result
touchManagedPtr jscClass
freeMem maybeName
freeMem maybeParameterTypes
return result'
#if ENABLE_OVERLOADING
data ClassAddConstructorMethodInfo
instance (signature ~ (Maybe (T.Text) -> GObject.Callbacks.Callback -> GType -> Maybe ([GType]) -> m JavaScriptCore.Value.Value), MonadIO m, IsClass a) => O.MethodInfo ClassAddConstructorMethodInfo a signature where
overloadedMethod _ = classAddConstructor
#endif
-- method Class::add_method_variadic
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the method name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to invoke method @name of @jsc_class", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 4, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "destroy notifier for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "return_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GType of the method return value, or %G_TYPE_NONE if the method is void.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_add_method_variadic" jsc_class_add_method_variadic ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
CString -> -- name : TBasicType TUTF8
FunPtr GObject.Callbacks.C_Callback -> -- callback : TInterface (Name {namespace = "GObject", name = "Callback"})
Ptr () -> -- user_data : TBasicType TPtr
FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
CGType -> -- return_type : TBasicType TGType
IO ()
{- |
Add method with /@name@/ to /@jscClass@/. When the method is called by JavaScript or @/jsc_value_object_invoke_method()/@,
/@callback@/ is called receiving the class instance as first parameter, followed by a 'GI.GLib.Structs.PtrArray.PtrArray' of 'GI.JavaScriptCore.Objects.Value.Value'\<!-- -->s
with the method arguments and then /@userData@/ as last parameter. When the method is cleared in the 'GI.JavaScriptCore.Objects.Class.Class' context,
/@destroyNotify@/ is called with /@userData@/ as parameter.
Note that the value returned by /@callback@/ must be transfer full. In case of non-refcounted boxed types, you should use
@/G_TYPE_POINTER/@ instead of the actual boxed 'GType' to ensure that the instance owned by 'GI.JavaScriptCore.Objects.Class.Class' is used.
If you really want to return a new copy of the boxed type, use @/JSC_TYPE_VALUE/@ and return a 'GI.JavaScriptCore.Objects.Value.Value' created
with 'GI.JavaScriptCore.Objects.Value.valueNewObject' that receives the copy as the instance parameter.
-}
classAddMethodVariadic ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a 'GI.JavaScriptCore.Objects.Class.Class' -}
-> T.Text
{- ^ /@name@/: the method name -}
-> GObject.Callbacks.Callback
{- ^ /@callback@/: a 'GI.GObject.Callbacks.Callback' to be called to invoke method /@name@/ of /@jscClass@/ -}
-> GType
{- ^ /@returnType@/: the 'GType' of the method return value, or @/G_TYPE_NONE/@ if the method is void. -}
-> m ()
classAddMethodVariadic jscClass name callback returnType = liftIO $ do
jscClass' <- unsafeManagedPtrCastPtr jscClass
name' <- textToCString name
callback' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback Nothing callback)
let returnType' = gtypeToCGType returnType
let userData = castFunPtrToPtr callback'
let destroyNotify = safeFreeFunPtrPtr
jsc_class_add_method_variadic jscClass' name' callback' userData destroyNotify returnType'
touchManagedPtr jscClass
freeMem name'
return ()
#if ENABLE_OVERLOADING
data ClassAddMethodVariadicMethodInfo
instance (signature ~ (T.Text -> GObject.Callbacks.Callback -> GType -> m ()), MonadIO m, IsClass a) => O.MethodInfo ClassAddMethodVariadicMethodInfo a signature where
overloadedMethod _ = classAddMethodVariadic
#endif
-- method Class::add_method
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the method name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to invoke method @name of @jsc_class", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 3, argDestroy = 4, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "destroy notifier for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "return_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GType of the method return value, or %G_TYPE_NONE if the method is void.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_parameters", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of parameter types to follow or 0 if the method doesn't receive parameters.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parameter_types", argType = TCArray False (-1) 6 (TBasicType TGType), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a list of #GType<!-- -->s, one for each parameter, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "n_parameters", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of parameter types to follow or 0 if the method doesn't receive parameters.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_add_methodv" jsc_class_add_methodv ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
CString -> -- name : TBasicType TUTF8
FunPtr GObject.Callbacks.C_Callback -> -- callback : TInterface (Name {namespace = "GObject", name = "Callback"})
Ptr () -> -- user_data : TBasicType TPtr
FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
CGType -> -- return_type : TBasicType TGType
Word32 -> -- n_parameters : TBasicType TUInt
Ptr CGType -> -- parameter_types : TCArray False (-1) 6 (TBasicType TGType)
IO ()
{- |
Add method with /@name@/ to /@jscClass@/. When the method is called by JavaScript or @/jsc_value_object_invoke_method()/@,
/@callback@/ is called receiving the class instance as first parameter, followed by the method parameters and then
/@userData@/ as last parameter. When the method is cleared in the 'GI.JavaScriptCore.Objects.Class.Class' context, /@destroyNotify@/ is called with
/@userData@/ as parameter.
Note that the value returned by /@callback@/ must be transfer full. In case of non-refcounted boxed types, you should use
@/G_TYPE_POINTER/@ instead of the actual boxed 'GType' to ensure that the instance owned by 'GI.JavaScriptCore.Objects.Class.Class' is used.
If you really want to return a new copy of the boxed type, use @/JSC_TYPE_VALUE/@ and return a 'GI.JavaScriptCore.Objects.Value.Value' created
with 'GI.JavaScriptCore.Objects.Value.valueNewObject' that receives the copy as the instance parameter.
-}
classAddMethod ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a 'GI.JavaScriptCore.Objects.Class.Class' -}
-> T.Text
{- ^ /@name@/: the method name -}
-> GObject.Callbacks.Callback
{- ^ /@callback@/: a 'GI.GObject.Callbacks.Callback' to be called to invoke method /@name@/ of /@jscClass@/ -}
-> GType
{- ^ /@returnType@/: the 'GType' of the method return value, or @/G_TYPE_NONE/@ if the method is void. -}
-> Maybe ([GType])
{- ^ /@parameterTypes@/: a list of 'GType'\<!-- -->s, one for each parameter, or 'Nothing' -}
-> m ()
classAddMethod jscClass name callback returnType parameterTypes = liftIO $ do
let nParameters = case parameterTypes of
Nothing -> 0
Just jParameterTypes -> fromIntegral $ length jParameterTypes
jscClass' <- unsafeManagedPtrCastPtr jscClass
name' <- textToCString name
callback' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback Nothing callback)
let returnType' = gtypeToCGType returnType
maybeParameterTypes <- case parameterTypes of
Nothing -> return nullPtr
Just jParameterTypes -> do
jParameterTypes' <- (packMapStorableArray gtypeToCGType) jParameterTypes
return jParameterTypes'
let userData = castFunPtrToPtr callback'
let destroyNotify = safeFreeFunPtrPtr
jsc_class_add_methodv jscClass' name' callback' userData destroyNotify returnType' nParameters maybeParameterTypes
touchManagedPtr jscClass
freeMem name'
freeMem maybeParameterTypes
return ()
#if ENABLE_OVERLOADING
data ClassAddMethodMethodInfo
instance (signature ~ (T.Text -> GObject.Callbacks.Callback -> GType -> Maybe ([GType]) -> m ()), MonadIO m, IsClass a) => O.MethodInfo ClassAddMethodMethodInfo a signature where
overloadedMethod _ = classAddMethod
#endif
-- method Class::add_property
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the property name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "property_type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GType of the property value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "getter", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to get the property value", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "setter", argType = TInterface (Name {namespace = "GObject", name = "Callback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCallback to be called to set the property value", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 5, argDestroy = 6, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @getter and @setter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "destroy notifier for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_add_property" jsc_class_add_property ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
CString -> -- name : TBasicType TUTF8
CGType -> -- property_type : TBasicType TGType
FunPtr GObject.Callbacks.C_Callback -> -- getter : TInterface (Name {namespace = "GObject", name = "Callback"})
FunPtr GObject.Callbacks.C_Callback -> -- setter : TInterface (Name {namespace = "GObject", name = "Callback"})
Ptr () -> -- user_data : TBasicType TPtr
FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
IO ()
{- |
Add a property with /@name@/ to /@jscClass@/. When the property value needs to be getted, /@getter@/ is called
receiving the the class instance as first parameter and /@userData@/ as last parameter. When the property
value needs to be set, /@setter@/ is called receiving the the class instance as first parameter, followed
by the value to be set and then /@userData@/ as the last parameter. When the property is cleared in the
'GI.JavaScriptCore.Objects.Class.Class' context, /@destroyNotify@/ is called with /@userData@/ as parameter.
Note that the value returned by /@getter@/ must be transfer full. In case of non-refcounted boxed types, you should use
@/G_TYPE_POINTER/@ instead of the actual boxed 'GType' to ensure that the instance owned by 'GI.JavaScriptCore.Objects.Class.Class' is used.
If you really want to return a new copy of the boxed type, use @/JSC_TYPE_VALUE/@ and return a 'GI.JavaScriptCore.Objects.Value.Value' created
with 'GI.JavaScriptCore.Objects.Value.valueNewObject' that receives the copy as the instance parameter.
-}
classAddProperty ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a 'GI.JavaScriptCore.Objects.Class.Class' -}
-> T.Text
{- ^ /@name@/: the property name -}
-> GType
{- ^ /@propertyType@/: the 'GType' of the property value -}
-> Maybe (GObject.Callbacks.Callback)
{- ^ /@getter@/: a 'GI.GObject.Callbacks.Callback' to be called to get the property value -}
-> Maybe (GObject.Callbacks.Callback)
{- ^ /@setter@/: a 'GI.GObject.Callbacks.Callback' to be called to set the property value -}
-> m ()
classAddProperty jscClass name propertyType getter setter = liftIO $ do
jscClass' <- unsafeManagedPtrCastPtr jscClass
name' <- textToCString name
let propertyType' = gtypeToCGType propertyType
maybeGetter <- case getter of
Nothing -> return (castPtrToFunPtr nullPtr)
Just jGetter -> do
ptrgetter <- callocMem :: IO (Ptr (FunPtr GObject.Callbacks.C_Callback))
jGetter' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback (Just ptrgetter) jGetter)
poke ptrgetter jGetter'
return jGetter'
maybeSetter <- case setter of
Nothing -> return (castPtrToFunPtr nullPtr)
Just jSetter -> do
jSetter' <- GObject.Callbacks.mk_Callback (GObject.Callbacks.wrap_Callback Nothing jSetter)
return jSetter'
let userData = castFunPtrToPtr maybeSetter
let destroyNotify = safeFreeFunPtrPtr
jsc_class_add_property jscClass' name' propertyType' maybeGetter maybeSetter userData destroyNotify
touchManagedPtr jscClass
freeMem name'
return ()
#if ENABLE_OVERLOADING
data ClassAddPropertyMethodInfo
instance (signature ~ (T.Text -> GType -> Maybe (GObject.Callbacks.Callback) -> Maybe (GObject.Callbacks.Callback) -> m ()), MonadIO m, IsClass a) => O.MethodInfo ClassAddPropertyMethodInfo a signature where
overloadedMethod _ = classAddProperty
#endif
-- method Class::get_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a @JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_get_name" jsc_class_get_name ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
IO CString
{- |
Get the class name of /@jscClass@/
-}
classGetName ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a /@jSCClass@/ -}
-> m T.Text
{- ^ __Returns:__ the name of /@jscClass@/ -}
classGetName jscClass = liftIO $ do
jscClass' <- unsafeManagedPtrCastPtr jscClass
result <- jsc_class_get_name jscClass'
checkUnexpectedReturnNULL "classGetName" result
result' <- cstringToText result
touchManagedPtr jscClass
return result'
#if ENABLE_OVERLOADING
data ClassGetNameMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsClass a) => O.MethodInfo ClassGetNameMethodInfo a signature where
overloadedMethod _ = classGetName
#endif
-- method Class::get_parent
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "jsc_class", argType = TInterface (Name {namespace = "JavaScriptCore", name = "Class"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a @JSCClass", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "JavaScriptCore", name = "Class"}))
-- throws : False
-- Skip return : False
foreign import ccall "jsc_class_get_parent" jsc_class_get_parent ::
Ptr Class -> -- jsc_class : TInterface (Name {namespace = "JavaScriptCore", name = "Class"})
IO (Ptr Class)
{- |
Get the parent class of /@jscClass@/
-}
classGetParent ::
(B.CallStack.HasCallStack, MonadIO m, IsClass a) =>
a
{- ^ /@jscClass@/: a /@jSCClass@/ -}
-> m Class
{- ^ __Returns:__ the parent class of /@jscClass@/ -}
classGetParent jscClass = liftIO $ do
jscClass' <- unsafeManagedPtrCastPtr jscClass
result <- jsc_class_get_parent jscClass'
checkUnexpectedReturnNULL "classGetParent" result
result' <- (newObject Class) result
touchManagedPtr jscClass
return result'
#if ENABLE_OVERLOADING
data ClassGetParentMethodInfo
instance (signature ~ (m Class), MonadIO m, IsClass a) => O.MethodInfo ClassGetParentMethodInfo a signature where
overloadedMethod _ = classGetParent
#endif