2-----------------------------------------------------------------------------
4-- Module : Language.Javascript.JSaddle.Native
5-- Copyright : (c) Hamish Mackenzie
8-- Maintainer : Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
12-----------------------------------------------------------------------------
14module Language.Javascript.JSaddle.Native (
15#if !defined(ghcjs_HOST_OS)
27#if !defined(ghcjs_HOST_OS)
28import Control.Monad.Trans.Reader (ask)
29import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase
30 (JSObjectRef, OpaqueJSString, JSStringRef, OpaqueJSContext,
31 OpaqueJSValue, JSValueRef)
32import Foreign.ForeignPtr
33 (newForeignPtr_, touchForeignPtr, FinalizerPtr, newForeignPtr,
34 FinalizerEnvPtr, newForeignPtrEnv, ForeignPtr)
35import Control.Monad.IO.Class (MonadIO, MonadIO(..))
36import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef
38import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
40import Language.Javascript.JSaddle.Types
41 (JSM, JSString, Object(..), JSVal)
42import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
43import Language.Javascript.JSaddle.Classes (ToJSVal(..), ToJSVal)
44import Foreign.Ptr (nullPtr)
46makeNewJSVal :: JSValueRef -> JSM (ForeignPtr OpaqueJSValue)
50 jsvalueprotect ctx val
51 newForeignPtrEnv jsValueUnprotect ctx val
53foreign import ccall unsafe "&JSValueUnprotect"
54 jsValueUnprotect :: FinalizerEnvPtr OpaqueJSContext OpaqueJSValue
56makeNewJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString)
57makeNewJSString s | s == nullPtr =
58 liftIO $ newForeignPtr_ s
61 s' <- jsstringretain s
62 newForeignPtr jsStringRelease s'
64wrapJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString)
65wrapJSString s | s == nullPtr =
66 liftIO $ newForeignPtr_ s
67wrapJSString s = liftIO $ newForeignPtr jsStringRelease s
69foreign import ccall unsafe "&JSStringRelease"
70 jsStringRelease :: FinalizerPtr OpaqueJSString
72withJSVal :: MonadIO m => JSVal -> (JSValueRef -> m a) -> m a
74 do result <- f (unsafeForeignPtrToPtr v)
75 liftIO $ touchForeignPtr v
78withJSVals :: MonadIO m => [JSVal] -> ([JSValueRef] -> m a) -> m a
80 do result <- f (map unsafeForeignPtrToPtr v)
81 liftIO $ mapM_ touchForeignPtr v
84withObject :: MonadIO m => Object -> (JSObjectRef -> m a) -> m a
85withObject (Object o) f = do
86 result <- f (unsafeForeignPtrToPtr o)
87 liftIO $ touchForeignPtr o
90withJSString :: MonadIO m => JSString -> (JSStringRef -> m a) -> m a
92 do result <- f (unsafeForeignPtrToPtr v)
93 liftIO $ touchForeignPtr v
96withToJSVal :: ToJSVal val => val -> (JSValueRef -> JSM a) -> JSM a
100{-# INLINE withToJSVal #-}
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list