module Language.ObjectiveC.Luka.RunTime where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import Foreign.LibFFI
foreign import ccall safe "&object_getInstanceVariable" funPtr_object_getInstanceVariable :: FunPtr ()
foreign import ccall safe "&object_getIvar" funPtr_object_getIvar :: FunPtr ()
foreign import ccall safe "&objc_getClass" funPtr_objc_getClass :: FunPtr ()
foreign import ccall safe "&method_setImplementation" funPtr_method_setImplementation :: FunPtr ()
foreign import ccall safe "&objc_msgSend" funPtr_objc_msgSend :: FunPtr ()
foreign import ccall safe "&sel_registerName" funPtr_sel_registerName :: FunPtr ()
foreign import ccall safe "&sel_getUid" funPtr_sel_getUid :: FunPtr ()
foreign import ccall safe "&class_createInstance" funPtr_class_createInstance :: FunPtr ()
foreign import ccall safe "&object_dispose" funPtr_object_dispose :: FunPtr ()
foreign import ccall safe "&objc_allocateClassPair" funPtr_objc_allocateClassPair :: FunPtr ()
foreign import ccall safe "&objc_registerClassPair" funPtr_objc_registerClassPair :: FunPtr ()
foreign import ccall safe "&class_addMethod" funPtr_class_addMethod :: FunPtr ()
foreign import ccall safe "&class_getInstanceMethod" funPtr_class_getInstanceMethod :: FunPtr ()
foreign import ccall safe "&NSLog" funPtr_NSLog :: FunPtr ()
foreign import ccall safe "NSApplicationMain" c_NSApplicationMain :: CInt -> Ptr (Ptr CChar) -> IO CInt
foreign import ccall safe "method_getTypeEncoding" method_getTypeEncoding :: Ptr a -> IO CString
data IDData
type ID = Ptr IDData
data SELData
type SEL = Ptr SELData
data IVarData
type IVar = Ptr IVarData
objc_False :: CChar
objc_False = 0x0
objc_True :: CChar
objc_True = 0x1
c2b :: CChar -> Bool
c2b = (== 0x1)
retIdPtr :: RetType ID
retIdPtr = fmap castPtr $ retPtr retVoid
retSelPtr :: RetType SEL
retSelPtr = fmap castPtr $ retPtr retVoid
retIVarPtr :: RetType IVar
retIVarPtr = fmap castPtr $ retPtr retVoid
retVoidPtr :: RetType (Ptr ())
retVoidPtr = fmap castPtr $ retPtr retVoid
object_getInstanceVariable :: ID -> String -> IO IVar
object_getInstanceVariable objectPtr instanceName = callFFI funPtr_object_getInstanceVariable retIVarPtr [argPtr objectPtr, argString instanceName]
object_getIvar :: ID -> IVar -> IO ID
object_getIvar objectPtr ivarPtr = callFFI funPtr_object_getIvar retIdPtr [argPtr objectPtr, argPtr ivarPtr]
objc_getClass :: String -> IO ID
objc_getClass className = callFFI funPtr_objc_getClass retIdPtr [argString className]
method_setImplementation :: Ptr a -> FunPtr b -> IO (FunPtr ())
method_setImplementation methodPtr funPtr = callFFI funPtr_method_setImplementation (retFunPtr retVoid) [argPtr methodPtr, argFunPtr funPtr]
sel_registerName :: String -> IO SEL
sel_registerName methodName = callFFI funPtr_sel_registerName retSelPtr [argString methodName]
sel_getUid :: String -> IO SEL
sel_getUid methodName = callFFI funPtr_sel_getUid retSelPtr [argString methodName]
class_createInstance :: ID -> IO ID
class_createInstance classPtr = callFFI funPtr_class_createInstance retIdPtr [argPtr classPtr, argCSize 0]
object_dispose :: ID -> IO ID
object_dispose objectPtr = callFFI funPtr_object_dispose retIdPtr [argPtr objectPtr]
objc_allocateClassPair :: ID -> String -> IO ID
objc_allocateClassPair super name = callFFI funPtr_objc_allocateClassPair retIdPtr [argPtr super, argString name, argCSize 0]
objc_registerClassPair :: ID -> IO ()
objc_registerClassPair classPtr = callFFI funPtr_objc_registerClassPair retVoid [argPtr classPtr]
class_addMethod :: ID -> SEL -> FunPtr a -> String -> IO Bool
class_addMethod classPtr methodPtr methodImplPtr types = callFFI funPtr_class_addMethod (fmap c2b retCChar) [argPtr classPtr, argPtr methodPtr, argFunPtr methodImplPtr, argString types]
ns_log :: [Arg] -> IO ()
ns_log = callFFI funPtr_NSLog retVoid
class_getInstanceMethod :: Ptr a -> Ptr b -> IO ID
class_getInstanceMethod classPtr selectorPtr = callFFI funPtr_class_getInstanceMethod retIdPtr [argPtr classPtr, argPtr selectorPtr]
objc_msgSend_void :: ID -> SEL -> [Arg] -> IO ()
objc_msgSend_void objectPtr selPtr args = callFFI funPtr_objc_msgSend retVoid (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_ptr :: ID -> SEL -> [Arg] -> IO (Ptr ())
objc_msgSend_ptr objectPtr selPtr args = callFFI funPtr_objc_msgSend retVoidPtr (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_obj :: ID -> SEL -> [Arg] -> IO ID
objc_msgSend_obj objectPtr selPtr args = callFFI funPtr_objc_msgSend retIdPtr (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cint :: ID -> SEL -> [Arg] -> IO CInt
objc_msgSend_cint objectPtr selPtr args = callFFI funPtr_objc_msgSend retCInt (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cuint :: ID -> SEL -> [Arg] -> IO CUInt
objc_msgSend_cuint objectPtr selPtr args = callFFI funPtr_objc_msgSend retCUInt (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_clong :: ID -> SEL -> [Arg] -> IO CLong
objc_msgSend_clong objectPtr selPtr args = callFFI funPtr_objc_msgSend retCLong (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_culong :: ID -> SEL -> [Arg] -> IO CULong
objc_msgSend_culong objectPtr selPtr args = callFFI funPtr_objc_msgSend retCULong (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cfloat :: ID -> SEL -> [Arg] -> IO CFloat
objc_msgSend_cfloat objectPtr selPtr args = callFFI funPtr_objc_msgSend retCFloat (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cdouble :: ID -> SEL -> [Arg] -> IO CDouble
objc_msgSend_cdouble objectPtr selPtr args = callFFI funPtr_objc_msgSend retCDouble (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cchar :: ID -> SEL -> [Arg] -> IO CChar
objc_msgSend_cchar objectPtr selPtr args = callFFI funPtr_objc_msgSend retCChar (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cuchar :: ID -> SEL -> [Arg] -> IO CUChar
objc_msgSend_cuchar objectPtr selPtr args = callFFI funPtr_objc_msgSend retCUChar (argPtr objectPtr : argPtr selPtr : args)
objc_msgSend_cstring :: ID -> SEL -> [Arg] -> IO CString
objc_msgSend_cstring objectPtr selPtr args = callFFI funPtr_objc_msgSend retCString (argPtr objectPtr : argPtr selPtr : args)