@@ -73,6 +73,7 @@ class Monad m => MonadJS x m | m -> x where
73 fromJSBool :: JSRef x -> m Bool
73 fromJSBool :: JSRef x -> m Bool
74 fromJSString :: JSRef x -> m String
74 fromJSString :: JSRef x -> m String
75 fromJSArray :: JSRef x -> m [JSRef x]
75 fromJSArray :: JSRef x -> m [JSRef x]
76+ fromJSUint8Array :: JSRef x -> m ByteString
76 fromJSNumber :: JSRef x -> m Double
77 fromJSNumber :: JSRef x -> m Double
77 withJSBool :: Bool -> (JSRef x -> m r) -> m r
78 withJSBool :: Bool -> (JSRef x -> m r) -> m r
78 withJSString :: String -> (JSRef x -> m r) -> m r
79 withJSString :: String -> (JSRef x -> m r) -> m r
@@ -102,6 +103,7 @@ instance MonadJS JSCtx_IO IO where
102 fromJSBool (JSRef_IO r) = return $ JS.fromJSBool $ JS.castRef r
103 fromJSBool (JSRef_IO r) = return $ JS.fromJSBool $ JS.castRef r
103 fromJSString (JSRef_IO r) = return $ JS.fromJSString $ JS.castRef r
104 fromJSString (JSRef_IO r) = return $ JS.fromJSString $ JS.castRef r
104 fromJSArray (JSRef_IO r) = liftM coerce $ JS.fromArray $ JS.castRef r
105 fromJSArray (JSRef_IO r) = liftM coerce $ JS.fromArray $ JS.castRef r
106+ fromJSUint8Array (JSRef_IO r) = JS.bufferByteString 0 0 $ JS.castRef r
105 fromJSNumber (JSRef_IO r) = do
107 fromJSNumber (JSRef_IO r) = do
106 Just n <- JS.fromJSRef $ JS.castRef r
108 Just n <- JS.fromJSRef $ JS.castRef r
@@ -123,7 +125,7 @@ instance MonadJS JSCtx_IO IO where
123 return $ JS.castRef result
125 return $ JS.castRef result
124 liftM (JSFun . JSRef_IO) $ funWithArguments cb
126 liftM (JSFun . JSRef_IO) $ funWithArguments cb
125 freeJSFun (JSFun (JSRef_IO r)) = JS.release $ JS.castRef r
127 freeJSFun (JSFun (JSRef_IO r)) = JS.release $ JS.castRef r
126− setJSProp s (JSRef_IO o) (JSRef_IO v) = JS.setProp s o v
128+ setJSProp s (JSRef_IO v) (JSRef_IO o) = JS.setProp s v o
127 getJSProp s (JSRef_IO o) = do
129 getJSProp s (JSRef_IO o) = do
128 r <- JS.getProp s o
130 r <- JS.getProp s o
129 return $ JSRef_IO r
131 return $ JSRef_IO r
@@ -225,6 +227,10 @@ instance MonadJS (JSCtx_JavaScriptCore x) (WithWebView x IO) where
225 let len = round lenDouble
227 let len = round lenDouble
226 liftIO $ forM [0..len-1] $ \i -> do
228 liftIO $ forM [0..len-1] $ \i -> do
227 liftM JSRef_JavaScriptCore $ jsobjectgetpropertyatindex jsContext a i nullPtr --TODO: Exceptions
229 liftM JSRef_JavaScriptCore $ jsobjectgetpropertyatindex jsContext a i nullPtr --TODO: Exceptions
230+ fromJSUint8Array a = do
231+ vals <- fromJSArray a
232+ doubles <- mapM fromJSNumber vals
233+ return $ BS.pack $ map round doubles
228 fromJSNumber (JSRef_JavaScriptCore val) = do
234 fromJSNumber (JSRef_JavaScriptCore val) = do
229 jsContext <- askJSContext
235 jsContext <- askJSContext
230 liftIO $ jsvaluetonumber jsContext val nullPtr --TODO: Exceptions
236 liftIO $ jsvaluetonumber jsContext val nullPtr --TODO: Exceptions
@@ -243,7 +249,7 @@ instance MonadJS (JSCtx_JavaScriptCore x) (WithWebView x IO) where
243 freeJSFun (JSFun (JSRef_JavaScriptCore f)) = do
249 freeJSFun (JSFun (JSRef_JavaScriptCore f)) = do
244 jsContext <- askJSContext
250 jsContext <- askJSContext
245 liftIO $ jsvalueunprotect jsContext f
251 liftIO $ jsvalueunprotect jsContext f
246− setJSProp propName (JSRef_JavaScriptCore objRef) (JSRef_JavaScriptCore valRef) = do
252+ setJSProp propName (JSRef_JavaScriptCore valRef) (JSRef_JavaScriptCore objRef) = do
247 withJSStringRaw propName $ \propNameRaw -> do
253 withJSStringRaw propName $ \propNameRaw -> do
248 jsContext <- askJSContext
254 jsContext <- askJSContext
249 liftIO $ jsobjectsetproperty jsContext objRef propNameRaw valRef 0 nullPtr --TODO: property attribute, exceptions
255 liftIO $ jsobjectsetproperty jsContext objRef propNameRaw valRef 0 nullPtr --TODO: property attribute, exceptions
@@ -343,12 +349,6 @@ instance ToJS x Node where
343 withJS = withJSNode
349 withJS = withJSNode
346−fromJSUint8Array :: MonadJS x m => JSUint8Array x -> m ByteString
347−fromJSUint8Array (JSUint8Array a) = do
348− vals <- fromJSArray a
349− doubles <- mapM fromJSNumber vals
350− return $ BS.pack $ map round doubles
352importJS :: Safety -> String -> String -> Q Type -> Q [Dec]
352importJS :: Safety -> String -> String -> Q Type -> Q [Dec]
353importJS safety body name qt = do
353importJS safety body name qt = do