packages feed

luka 2012.7.7 → 2012.7.7.1

raw patch · 5 files changed

+38/−172 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.ObjectiveC.Luka.API: msg_cchar :: String -> [Arg] -> ID -> IO CChar
- Language.ObjectiveC.Luka.API: msg_cdouble :: String -> [Arg] -> ID -> IO CDouble
- Language.ObjectiveC.Luka.API: msg_cfloat :: String -> [Arg] -> ID -> IO CFloat
- Language.ObjectiveC.Luka.API: msg_cint :: String -> [Arg] -> ID -> IO CInt
- Language.ObjectiveC.Luka.API: msg_clong :: String -> [Arg] -> ID -> IO CLong
- Language.ObjectiveC.Luka.API: msg_cstring :: String -> [Arg] -> ID -> IO CString
- Language.ObjectiveC.Luka.API: msg_cuint :: String -> [Arg] -> ID -> IO CUInt
- Language.ObjectiveC.Luka.API: msg_culong :: String -> [Arg] -> ID -> IO CULong
- Language.ObjectiveC.Luka.API: msg_obj :: String -> [Arg] -> ID -> IO ID
- Language.ObjectiveC.Luka.API: msg_ptr :: String -> [Arg] -> ID -> IO (Ptr ())
- Language.ObjectiveC.Luka.API: msg_uchar :: String -> [Arg] -> ID -> IO CUChar
- Language.ObjectiveC.Luka.RunTime: data IVarData
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cchar :: ID -> SEL -> [Arg] -> IO CChar
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cdouble :: ID -> SEL -> [Arg] -> IO CDouble
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cfloat :: ID -> SEL -> [Arg] -> IO CFloat
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cint :: ID -> SEL -> [Arg] -> IO CInt
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_clong :: ID -> SEL -> [Arg] -> IO CLong
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cstring :: ID -> SEL -> [Arg] -> IO CString
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cuchar :: ID -> SEL -> [Arg] -> IO CUChar
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_cuint :: ID -> SEL -> [Arg] -> IO CUInt
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_culong :: ID -> SEL -> [Arg] -> IO CULong
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_obj :: ID -> SEL -> [Arg] -> IO ID
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_ptr :: ID -> SEL -> [Arg] -> IO (Ptr ())
- Language.ObjectiveC.Luka.RunTime: objc_msgSend_void :: ID -> SEL -> [Arg] -> IO ()
- Language.ObjectiveC.Luka.RunTime: retIVarPtr :: RetType IVar
- Language.ObjectiveC.Luka.RunTime: retIdPtr :: RetType ID
- Language.ObjectiveC.Luka.RunTime: retSelPtr :: RetType SEL
- Language.ObjectiveC.Luka.RunTime: type IVar = Ptr IVarData
+ Language.ObjectiveC.Luka.RunTime: data IvarData
+ Language.ObjectiveC.Luka.RunTime: objc_msgSend :: ID -> SEL -> [Arg] -> RetType a -> IO a
+ Language.ObjectiveC.Luka.RunTime: retId :: RetType ID
+ Language.ObjectiveC.Luka.RunTime: retIvar :: RetType Ivar
+ Language.ObjectiveC.Luka.RunTime: retSel :: RetType SEL
+ Language.ObjectiveC.Luka.RunTime: type Ivar = Ptr IvarData
- Language.ObjectiveC.Luka.API: msg :: String -> [Arg] -> ID -> IO ()
+ Language.ObjectiveC.Luka.API: msg :: String -> [Arg] -> RetType a -> ID -> IO a
- Language.ObjectiveC.Luka.RunTime: object_getInstanceVariable :: ID -> String -> IO IVar
+ Language.ObjectiveC.Luka.RunTime: object_getInstanceVariable :: ID -> String -> IO Ivar
- Language.ObjectiveC.Luka.RunTime: object_getIvar :: ID -> IVar -> IO ID
+ Language.ObjectiveC.Luka.RunTime: object_getIvar :: ID -> Ivar -> IO ID

Files

luka.cabal view
@@ -1,5 +1,5 @@ Name:                 luka-Version:              2012.7.7+Version:              2012.7.7.1 Build-type:           Simple Synopsis:             Simple ObjectiveC runtime binding Description:          Simple ObjectiveC runtime binding
readme.md view
@@ -1,3 +1,6 @@+Luka+====+ Simple ObjectiveC runtime binding  Tutorial@@ -16,6 +19,11 @@          nemesis run     ++Notes+====++* when used with `ghci`, `-frameworkCocoa` flag is required  License: ========
src/Init.hs view
@@ -2,21 +2,12 @@   module Init where -import Foreign hiding (void)-import Foreign.C.Types-import Foreign.C.String--import Prelude ()-import Air.Env-import Control.Monad ((>=>))- import Language.ObjectiveC.Luka.RunTime import Language.ObjectiveC.Luka-import Foreign.LibFFI   + main = do-  with_pool - do+  with_pool $ do     ns_puts "Hello World!" []-  -- c_NSApplicationMain 0 nullPtr
src/Language/ObjectiveC/Luka/API.hs view
@@ -22,56 +22,19 @@         from_ns_string :: ID -> IO String-from_ns_string = msg_cstring "UTF8String" [] >=> peekCString--+from_ns_string = msg "UTF8String" [] retCString >=> peekCString  with_pool :: IO a -> IO () with_pool _io = do-  pool <- class_named "NSAutoreleasePool" >>= msg_obj "alloc" [] >>= msg_obj "init" []+  pool <- class_named "NSAutoreleasePool" >>= msg "alloc" [] retId >>= msg "init" [] retId      _io   -  pool .msg "release" []+  pool .msg "release" [] retVoid  -msg         :: String -> [Arg] -> ID -> IO ()-msg         methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_void    obj sel args--msg_ptr     :: String -> [Arg] -> ID -> IO (Ptr ())                                         -msg_ptr     methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_ptr     obj sel args-                                                                                       -msg_obj     :: String -> [Arg] -> ID -> IO ID                                           -msg_obj     methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_obj     obj sel args-                                                                                        -msg_cint    :: String -> [Arg] -> ID -> IO CInt                                         -msg_cint    methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cint    obj sel args-                                                                                        -msg_cuint   :: String -> [Arg] -> ID -> IO CUInt                                        -msg_cuint   methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cuint   obj sel args-                                                                                        -msg_clong   :: String -> [Arg] -> ID -> IO CLong                                        -msg_clong   methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_clong   obj sel args-                                                                                        -msg_culong  :: String -> [Arg] -> ID -> IO CULong                                       -msg_culong  methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_culong  obj sel args-                                                                                        -msg_cfloat  :: String -> [Arg] -> ID -> IO CFloat                                       -msg_cfloat  methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cfloat  obj sel args-                                                                                        -msg_cdouble :: String -> [Arg] -> ID -> IO CDouble                                      -msg_cdouble methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cdouble obj sel args-                                                                                        -msg_cchar   :: String -> [Arg] -> ID -> IO CChar                                        -msg_cchar   methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cchar   obj sel args-                                                                                        -msg_uchar   :: String -> [Arg] -> ID -> IO CUChar                                       -msg_uchar   methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cuchar  obj sel args--msg_cstring :: String -> [Arg] -> ID -> IO CString                                       -msg_cstring methodName args obj = sel_named methodName >>= \sel -> objc_msgSend_cstring obj sel args-                                                                                            -+msg :: String -> [Arg] -> RetType a -> ID -> IO a+msg methodName args ret_type obj = sel_named methodName >>= \sel -> objc_msgSend obj sel args ret_type    sel_named :: String -> IO SEL sel_named = sel_getUid@@ -79,7 +42,7 @@  ns_string :: String -> IO ID ns_string x = do-  class_named "NSString" >>= msg_obj "stringWithUTF8String:" [argString x]+  class_named "NSString" >>= msg "stringWithUTF8String:" [argString x] retId   class_named :: String -> IO ID@@ -98,4 +61,3 @@   method <- class_getInstanceMethod class_pointer cmd      method_setImplementation method method_implementation-  
src/Language/ObjectiveC/Luka/RunTime.hs view
@@ -41,8 +41,8 @@ data SELData type SEL = Ptr SELData -data IVarData-type IVar = Ptr IVarData+data IvarData+type Ivar = Ptr IvarData  objc_False :: CChar objc_False = 0x0@@ -55,49 +55,49 @@   -retIdPtr :: RetType ID-retIdPtr = fmap castPtr $ retPtr retVoid+retId :: RetType ID+retId = fmap castPtr $ retPtr retVoid -retSelPtr :: RetType SEL-retSelPtr = fmap castPtr $ retPtr retVoid+retSel :: RetType SEL+retSel = fmap castPtr $ retPtr retVoid -retIVarPtr :: RetType IVar-retIVarPtr = fmap castPtr $ retPtr retVoid+retIvar :: RetType Ivar+retIvar = 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_getInstanceVariable :: ID -> String -> IO Ivar+object_getInstanceVariable objectPtr instanceName = callFFI funPtr_object_getInstanceVariable retIvar [argPtr objectPtr, argString instanceName] -object_getIvar :: ID -> IVar -> IO ID-object_getIvar objectPtr ivarPtr = callFFI funPtr_object_getIvar retIdPtr [argPtr objectPtr, argPtr ivarPtr]+object_getIvar :: ID -> Ivar -> IO ID+object_getIvar objectPtr ivarPtr = callFFI funPtr_object_getIvar retId [argPtr objectPtr, argPtr ivarPtr]   objc_getClass :: String -> IO ID-objc_getClass className = callFFI funPtr_objc_getClass retIdPtr [argString className]+objc_getClass className = callFFI funPtr_objc_getClass retId [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_registerName methodName = callFFI funPtr_sel_registerName retSel [argString methodName]  sel_getUid :: String -> IO SEL-sel_getUid methodName = callFFI funPtr_sel_getUid retSelPtr [argString methodName]+sel_getUid methodName = callFFI funPtr_sel_getUid retSel [argString methodName]   class_createInstance :: ID -> IO ID-class_createInstance classPtr = callFFI funPtr_class_createInstance retIdPtr [argPtr classPtr, argCSize 0]+class_createInstance classPtr = callFFI funPtr_class_createInstance retId [argPtr classPtr, argCSize 0]  object_dispose :: ID -> IO ID-object_dispose objectPtr = callFFI funPtr_object_dispose retIdPtr [argPtr objectPtr]+object_dispose objectPtr = callFFI funPtr_object_dispose retId [argPtr objectPtr]   objc_allocateClassPair :: ID -> String -> IO ID-objc_allocateClassPair super name = callFFI funPtr_objc_allocateClassPair retIdPtr [argPtr super, argString name, argCSize 0]+objc_allocateClassPair super name = callFFI funPtr_objc_allocateClassPair retId [argPtr super, argString name, argCSize 0]  objc_registerClassPair :: ID -> IO () objc_registerClassPair classPtr = callFFI funPtr_objc_registerClassPair retVoid [argPtr classPtr]@@ -110,102 +110,7 @@   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)---{--retCInt     :: RetType CInt-retCInt     = mkStorableRetType ffi_type_sint-retCUInt    :: RetType CUInt-retCUInt    = mkStorableRetType ffi_type_uint-retCLong    :: RetType CLong-retCLong    = mkStorableRetType ffi_type_slong-retCULong   :: RetType CULong-retCULong   = mkStorableRetType ffi_type_ulong--retInt      :: RetType Int-retInt      = mkStorableRetType ffi_type_hs_int-retInt8     :: RetType Int8-retInt8     = mkStorableRetType ffi_type_sint8-retInt16    :: RetType Int16-retInt16    = mkStorableRetType ffi_type_sint16-retInt32    :: RetType Int32-retInt32    = mkStorableRetType ffi_type_sint32-retInt64    :: RetType Int64-retInt64    = mkStorableRetType ffi_type_sint64--retWord     :: RetType Word-retWord     = mkStorableRetType ffi_type_hs_word-retWord8    :: RetType Word8-retWord8    = mkStorableRetType ffi_type_uint8-retWord16   :: RetType Word16-retWord16   = mkStorableRetType ffi_type_uint16-retWord32   :: RetType Word32-retWord32   = mkStorableRetType ffi_type_uint32-retWord64   :: RetType Word64-retWord64   = mkStorableRetType ffi_type_uint64--retCFloat   :: RetType CFloat-retCFloat   = mkStorableRetType ffi_type_float-retCDouble  :: RetType CDouble-retCDouble  = mkStorableRetType ffi_type_double--retCSize    :: RetType CSize-retCSize    = mkStorableRetType ffi_type_size-retCTime    :: RetType CTime-retCTime    = mkStorableRetType ffi_type_time--retCChar    :: RetType CChar-retCChar    = mkStorableRetType ffi_type_schar-retCUChar   :: RetType CUChar-retCUChar   = mkStorableRetType ffi_type_uchar--retCWchar   :: RetType CWchar-retCWchar   = mkStorableRetType ffi_type_schar--retFunPtr   :: RetType a -> RetType (FunPtr a)-retFunPtr _ = mkStorableRetType ffi_type_pointer--retPtr      :: RetType a -> RetType (Ptr a)-retPtr _    = mkStorableRetType ffi_type_pointer+class_getInstanceMethod classPtr selectorPtr = callFFI funPtr_class_getInstanceMethod retId [argPtr classPtr, argPtr selectorPtr] -retCString          :: RetType CString-retCString          = retPtr retCChar--}+objc_msgSend :: ID -> SEL -> [Arg] -> RetType a -> IO a+objc_msgSend objectPtr selPtr args retType = callFFI funPtr_objc_msgSend retType (argPtr objectPtr : argPtr selPtr : args)