jsaddle 0.1.1.3 → 0.1.1.4
raw patch · 6 files changed
+52/−47 lines, 6 filesdep +ghcjs-basedep ~jsaddle
Dependencies added: ghcjs-base
Dependency ranges changed: jsaddle
Files
- jsaddle.cabal +14/−8
- src/Language/Javascript/JSaddle.hs +10/−20
- src/Language/Javascript/JSaddle/Evaluate.hs +1/−1
- src/Language/Javascript/JSaddle/Exception.hs +1/−1
- src/Language/Javascript/JSaddle/Monad.hs +1/−1
- src/Language/Javascript/JSaddle/Object.hs +25/−16
jsaddle.cabal view
@@ -1,5 +1,5 @@ name: jsaddle-version: 0.1.1.3+version: 0.1.1.4 cabal-version: >=1.10 license: MIT license-file: LICENSE@@ -17,6 +17,10 @@ type: git location: https://github.com/ghcjs/jsaddle +flag ghcjs+ description: Tell cabal we are using ghcjs (work around until hackage supports impl(ghcjs))+ default: True+ flag gtk3 Description: Use GTK3 rather than GTK2 Default: True@@ -35,11 +39,12 @@ library -- if impl(ghcjs) && flag(jsffi)--- cpp-options: -DUSE_JAVASCRIPTFFI--- build-depends: ghcjs-base+ if flag(ghcjs) && flag(jsffi)+ cpp-options: -DUSE_JAVASCRIPTFFI+ build-depends: ghcjs-base -- if !impl(ghcjs) || flag(webkit)- if impl(ghc)+ if !flag(ghcjs) || flag(webkit) cpp-options: -DUSE_WEBKIT if flag(gtk3) build-depends: webkitgtk3 >=0.12.5 && <0.13,@@ -73,11 +78,12 @@ buildable: False -- if impl(ghcjs) && flag(jsffi)--- cpp-options: -DUSE_JAVASCRIPTFFI--- build-depends: ghcjs-base+ if flag(ghcjs) && flag(jsffi)+ cpp-options: -DUSE_JAVASCRIPTFFI+ build-depends: ghcjs-base -- if !impl(ghcjs) || flag(webkit)- if impl(ghc)+ if !flag(ghcjs) || flag(webkit) cpp-options: -DUSE_WEBKIT build-depends: glib >=0.12.3.1 && <0.13 if flag(gtk3)@@ -94,7 +100,7 @@ build-depends: template-haskell -any, base <5, lens >=3.8.5 && <4.1, text >=0.11.2.3 && <1.2, transformers >=0.3.0.0 && <0.4,- hslogger -any, jsaddle ==0.1.1.3+ hslogger -any, jsaddle ==0.1.1.4 type: exitcode-stdio-1.0 main-is: TestJSaddle.hs default-language: Haskell2010
src/Language/Javascript/JSaddle.hs view
@@ -55,27 +55,17 @@ -- will be replaced with JavaScript function calls. -- * Modules- module Language.Javascript.JSaddle.Monad- , module Language.Javascript.JSaddle.Exception- , module Language.Javascript.JSaddle.Value- , module Language.Javascript.JSaddle.Arguments- , module Language.Javascript.JSaddle.Properties- , module Language.Javascript.JSaddle.Object- , module Language.Javascript.JSaddle.Evaluate-#ifdef MIN_VERSION_jmacro- , module Language.Javascript.JSaddle.JMacro-#endif- , module Language.Javascript.JSaddle.String+ module JSaddle ) where -import Language.Javascript.JSaddle.Monad-import Language.Javascript.JSaddle.Exception-import Language.Javascript.JSaddle.Value-import Language.Javascript.JSaddle.Arguments-import Language.Javascript.JSaddle.Properties-import Language.Javascript.JSaddle.Object-import Language.Javascript.JSaddle.Evaluate+import Language.Javascript.JSaddle.Monad as JSaddle+import Language.Javascript.JSaddle.Exception as JSaddle+import Language.Javascript.JSaddle.Value as JSaddle+import Language.Javascript.JSaddle.Arguments as JSaddle+import Language.Javascript.JSaddle.Properties as JSaddle+import Language.Javascript.JSaddle.Object as JSaddle+import Language.Javascript.JSaddle.Evaluate as JSaddle #ifdef MIN_VERSION_jmacro-import Language.Javascript.JSaddle.JMacro+import Language.Javascript.JSaddle.JMacro as JSaddle #endif-import Language.Javascript.JSaddle.String+import Language.Javascript.JSaddle.String as JSaddle
src/Language/Javascript/JSaddle/Evaluate.hs view
@@ -53,7 +53,7 @@ -> JSM JSValueRef #if defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI) evaluateScript script this url line = liftIO $ js_eval (makeStringRef script)-foreign import javascript unsafe "$r = eval(s);"+foreign import javascript unsafe "$r = eval($1);" js_eval :: JSStringRef -> IO JSValueRef #elif defined(USE_WEBKIT) evaluateScript script this url line = do
src/Language/Javascript/JSaddle/Exception.hs view
@@ -30,6 +30,6 @@ -- | Catch JavaScript exceptions and rethrow Haskell ones rethrow :: (JSValueRefRef -> JSM a) -> JSM a-rethrow f = f `catchval` \e -> do+rethrow f = f `catchval` \e -> liftIO . E.throwIO $ JSException e
src/Language/Javascript/JSaddle/Monad.hs view
@@ -70,7 +70,7 @@ catchval :: (JSValueRefRef -> JSM a) -> (JSValueRef -> JSM a) -> JSM a catchval f catcher = do #if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)- pexc <- liftIO $ newArray+ pexc <- liftIO newArray result <- f pexc exc <- liftIO $ indexArray 0 pexc if isUndefined exc || isNull exc
src/Language/Javascript/JSaddle/Object.hs view
@@ -81,7 +81,7 @@ import Foreign.C.Types (CSize(..), CULong(..), CUInt(..)) #if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT) import GHCJS.Types (nullRef, castRef, JSArray, JSFun)-import GHCJS.Foreign (newObj, toArray, fromArray, syncCallback2)+import GHCJS.Foreign (newObj, toArray, fromArray, syncCallback2, ForeignRetention(..)) import Control.Monad (liftM) import Control.Applicative ((<$>)) #else@@ -264,6 +264,9 @@ -- | Use this to create a new JavaScript object --+-- If you pass more than 7 arguments to a constructor for a built in+-- JavaScript type (like Date) then this function will fail.+-- -- >>> testJSaddle $ new "Date" (2013, 1, 1) -- Fri Feb 01 2013 00:00:00 GMT+1300 (NZDT) new :: (MakeObjectRef constructor, MakeArgRefs args)@@ -333,7 +336,7 @@ -- call the Haskell one when it is called #if defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI) function name f = liftIO $ do- callback <- syncCallback2 False True $ \this args -> do+ callback <- syncCallback2 NeverRetain True $ \this args -> do rargs <- fromArray args runReaderT (f this this rargs) () -- TODO pass function object through makeFunctionWithCallback (makeStringRef name) callback@@ -362,17 +365,17 @@ -- a name. instance MakeValueRef JSCallAsFunction where #if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)- makeValueRef = function (nullRef::JSStringRef)+ makeValueRef = function (nullRef:: JSStringRef) #else- makeValueRef = function (nullPtr::JSStringRef)+ makeValueRef = function (nullPtr:: JSStringRef) #endif instance MakeArgRefs JSCallAsFunction where makeArgRefs f = do #if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)- rarg <- function (nullRef::JSStringRef) f+ rarg <- function (nullRef:: JSStringRef) f #else- rarg <- function (nullPtr::JSStringRef) f+ rarg <- function (nullPtr:: JSStringRef) f #endif return [rarg] @@ -473,6 +476,9 @@ #endif -- | Call a JavaScript object as a constructor. Consider using 'new'.+--+-- If you pass more than 7 arguments to a constructor for a built in+-- JavaScript type (like Date) then this function will fail. objCallAsConstructor :: MakeArgRefs args => JSObjectRef -> args@@ -485,22 +491,25 @@ foreign import javascript unsafe "\ try {\ switch($2.length) {\- case 0 : $r = new $1();\- case 1 : $r = new $1($2[0]);\- case 2 : $r = new $1($2[0],$2[1]);\- case 3 : $r = new $1($2[0],$2[1],$2[2]);\- case 4 : $r = new $1($2[0],$2[1],$2[2],$2[3]);\- case 5 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4]);\- case 6 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4],$2[5]);\- case 6 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4],$2[5],$2[6]);\+ case 0 : $r = new $1(); break;\+ case 1 : $r = new $1($2[0]); break;\+ case 2 : $r = new $1($2[0],$2[1]); break;\+ case 3 : $r = new $1($2[0],$2[1],$2[2]); break;\+ case 4 : $r = new $1($2[0],$2[1],$2[2],$2[3]); break;\+ case 5 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4]); break;\+ case 6 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4],$2[5]); break;\+ case 7 : $r = new $1($2[0],$2[1],$2[2],$2[3],$2[4],$2[5],$2[6]); break;\ default:\ var ret;\ var temp = function() {\ ret = $1.apply(this, $2);\ };\- temp.prototype = f.prototype;\+ temp.prototype = $1.prototype;\ var i = new temp();\- $r = ret instanceof Object ? ret : i;\+ if(ret instanceof Object)\+ return ret;\+ i.constructor = $1;\+ return i;\ }\ }\ catch(e) {\