module Language.Javascript.JSaddle.Foreign (
jsTrue
, jsFalse
, jsNull
, toJSBool
, jsUndefined
, isTruthyIO
, isNullIO
, isUndefinedIO
) where
#ifdef ghcjs_HOST_OS
import Language.Javascript.JSaddle.Types (JSM, JSVal)
import GHCJS.Foreign (toJSBool, isTruthy, jsNull, jsUndefined, jsTrue, jsFalse, isNull, isUndefined)
#else
import Language.Javascript.JSaddle.Types (JSM, JSVal(..))
import Language.Javascript.JSaddle.Native.Internal
(withJSVal)
import Language.Javascript.JSaddle.Run
(Command(..), Result(..), sendCommand)
#endif
#ifndef ghcjs_HOST_OS
jsTrue :: JSVal
jsTrue = JSVal 3
jsFalse :: JSVal
jsFalse = JSVal 2
jsNull :: JSVal
jsNull = JSVal 0
toJSBool :: Bool -> JSVal
toJSBool b = JSVal $ if b then 3 else 2
jsUndefined :: JSVal
jsUndefined = JSVal 1
#endif
isTruthyIO :: JSVal -> JSM Bool
#ifdef ghcjs_HOST_OS
isTruthyIO = return . isTruthy
#else
isTruthyIO (JSVal 0) = return False
isTruthyIO (JSVal 1) = return False
isTruthyIO (JSVal 2) = return False
isTruthyIO (JSVal 3) = return True
isTruthyIO v = withJSVal v $ \rval -> do
ValueToBoolResult result <- sendCommand (ValueToBool rval)
return result
#endif
isNullIO :: JSVal -> JSM Bool
#ifdef ghcjs_HOST_OS
isNullIO = return . isNull
#else
isNullIO (JSVal 0) = return True
isNullIO v = withJSVal v $ \rval -> do
IsNullResult result <- sendCommand $ IsNull rval
return result
#endif
isUndefinedIO :: JSVal -> JSM Bool
#ifdef ghcjs_HOST_OS
isUndefinedIO = return . isUndefined
#else
isUndefinedIO (JSVal 1) = return True
isUndefinedIO v = withJSVal v $ \rval -> do
IsUndefinedResult result <- sendCommand $ IsUndefined rval
return result
#endif