{-# LANGUAGE OverloadedStrings, PatternGuards, StandaloneDeriving #-}
module IRTS.JavaScript.PrimOp
( PrimF
, PrimDec
, JsPrimTy(..)
, primDB
, jsPrimCoerce
) where
import qualified Data.Map.Strict as Map
import Idris.Core.TT
import IRTS.JavaScript.AST
import IRTS.Lang
data JsPrimTy = PTBool | PTAny deriving (JsPrimTy -> JsPrimTy -> Bool
(JsPrimTy -> JsPrimTy -> Bool)
-> (JsPrimTy -> JsPrimTy -> Bool) -> Eq JsPrimTy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JsPrimTy -> JsPrimTy -> Bool
$c/= :: JsPrimTy -> JsPrimTy -> Bool
== :: JsPrimTy -> JsPrimTy -> Bool
$c== :: JsPrimTy -> JsPrimTy -> Bool
Eq, Eq JsPrimTy
Eq JsPrimTy =>
(JsPrimTy -> JsPrimTy -> Ordering)
-> (JsPrimTy -> JsPrimTy -> Bool)
-> (JsPrimTy -> JsPrimTy -> Bool)
-> (JsPrimTy -> JsPrimTy -> Bool)
-> (JsPrimTy -> JsPrimTy -> Bool)
-> (JsPrimTy -> JsPrimTy -> JsPrimTy)
-> (JsPrimTy -> JsPrimTy -> JsPrimTy)
-> Ord JsPrimTy
JsPrimTy -> JsPrimTy -> Bool
JsPrimTy -> JsPrimTy -> Ordering
JsPrimTy -> JsPrimTy -> JsPrimTy
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: JsPrimTy -> JsPrimTy -> JsPrimTy
$cmin :: JsPrimTy -> JsPrimTy -> JsPrimTy
max :: JsPrimTy -> JsPrimTy -> JsPrimTy
$cmax :: JsPrimTy -> JsPrimTy -> JsPrimTy
>= :: JsPrimTy -> JsPrimTy -> Bool
$c>= :: JsPrimTy -> JsPrimTy -> Bool
> :: JsPrimTy -> JsPrimTy -> Bool
$c> :: JsPrimTy -> JsPrimTy -> Bool
<= :: JsPrimTy -> JsPrimTy -> Bool
$c<= :: JsPrimTy -> JsPrimTy -> Bool
< :: JsPrimTy -> JsPrimTy -> Bool
$c< :: JsPrimTy -> JsPrimTy -> Bool
compare :: JsPrimTy -> JsPrimTy -> Ordering
$ccompare :: JsPrimTy -> JsPrimTy -> Ordering
$cp1Ord :: Eq JsPrimTy
Ord)
type PrimF = [JsExpr] -> JsExpr
type PrimDec = (Bool, JsPrimTy, PrimF)
primDB :: Map.Map PrimFn PrimDec
primDB :: Map PrimFn PrimDec
primDB =
[(PrimFn, PrimDec)] -> Map PrimFn PrimDec
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [
PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus ArithTy
ATFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "+"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt IntTy
ITChar)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "String.fromCharCode(%0.charCodeAt(0) + %1.charCodeAt(0))"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "+"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 + %1 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 + %1 & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0+%1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "add"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LPlus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$
\[l :: JsExpr
l, r :: JsExpr
r] -> Text -> PrimF
JsForeign "%0.add(%1).and(new $JSRTS.jsbn.BigInteger(%2))" [JsExpr
l,JsExpr
r, String -> JsExpr
JsStr (String -> JsExpr) -> String -> JsExpr
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 0xFFFFFFFFFFFFFFFF]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus ArithTy
ATFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "-"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt IntTy
ITChar)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "String.fromCharCode(%0.charCodeAt(0) - %1.charCodeAt(0))"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "-"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 - %1 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 - %1 & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0-%1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "subtract"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LMinus (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$
\[l :: JsExpr
l, r :: JsExpr
r] -> Text -> PrimF
JsForeign "%0.subtract(%1).and(new $JSRTS.jsbn.BigInteger(%2))" [JsExpr
l,JsExpr
r, String -> JsExpr
JsStr (String -> JsExpr) -> String -> JsExpr
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 0xFFFFFFFFFFFFFFFF]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes ArithTy
ATFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "*"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt IntTy
ITChar)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "String.fromCharCode(%0.charCodeAt(0) * %1.charCodeAt(0))"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "*"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 * %1 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 * %1 & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0*%1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "multiply"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LTimes (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$
\[l :: JsExpr
l, r :: JsExpr
r] -> Text -> PrimF
JsForeign "%0.multiply(%1).and(new $JSRTS.jsbn.BigInteger(%2))" [JsExpr
l,JsExpr
r, String -> JsExpr
JsStr (String -> JsExpr) -> String -> JsExpr
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 0xFFFFFFFFFFFFFFFF]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LUDiv (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 / %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LUDiv (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 / %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LUDiv (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) / (%1>>>0) |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LUDiv (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.divide(%1)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv ArithTy
ATFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "/"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 / %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 / %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 / %1 |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.divide(%1)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0/%1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSDiv (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "divide"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LURem (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 % %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LURem (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 % %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LURem (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) % (%1>>>0) |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LURem (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "remainder"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem ArithTy
ATFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "%"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "%"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 % %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 % %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 % %1 |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "remainder"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSRem (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "remainder"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "and"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LAnd IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "and"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 | %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 | %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 | %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 | %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "or"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LOr IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "or"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 ^ %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 ^ %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 ^ %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 ^ %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "xor"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LXOr IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "xor"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 << %1 |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 << %1 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 << %1 & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 << %1 | 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$
\[l :: JsExpr
l, r :: JsExpr
r] -> Text -> PrimF
JsForeign "%0.shiftLeft(%1).and(new $JSRTS.jsbn.BigInteger(%2))" [JsExpr
l,JsExpr
r, String -> JsExpr
JsStr (String -> JsExpr) -> String -> JsExpr
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 0xFFFFFFFFFFFFFFFF]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LSHL IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "shiftLeft"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLSHR IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >>> %1 |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLSHR (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >>> %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLSHR (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >>> %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLSHR (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >>> %1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLSHR (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.shiftRight(%1)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LASHR IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >> %1 |0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LASHR (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >> %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LASHR (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >> %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LASHR (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >> %1|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LASHR (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.shiftRight(%1)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LCompl (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "~%0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LCompl (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "~%0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LCompl (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "~%0|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LCompl (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "not"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq ArithTy
ATFloat) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt IntTy
ITChar)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "equals"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "==="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LEq (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
method "equals"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLt (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 < %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLt (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 < %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLt (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) < (%1>>>0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLt (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) < 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLe (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 <= %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLe (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 <= %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLe (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) <= (%1>>>0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LLe (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) <= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGt (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 > %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGt (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 > %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGt (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) > (%1>>>0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGt (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) > 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGe (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >= %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGe (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 >= %1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGe (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "(%0>>>0) >= (%1>>>0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LGe (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) >= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt ArithTy
ATFloat) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt IntTy
ITChar)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) < 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) < 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe ArithTy
ATFloat) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) <= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSLe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) <= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt ArithTy
ATFloat) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) > 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGt (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) > 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe ArithTy
ATFloat) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt IntTy
ITNative)) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt IntTy
ITBig)) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) >= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT8))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT16))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT32))) Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop ">="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (ArithTy -> PrimFn
LSGe (IntTy -> ArithTy
ATInt (NativeTy -> IntTy
ITFixed NativeTy
IT64))) Bool
True JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.compareTo(%1) >= 0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LSExt IntTy
ITNative IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(''+%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT8) IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT16) IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT32) IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt IntTy
ITNative IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(''+%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT8) IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(''+%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT16) IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(''+%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT32) IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(''+%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LZExt (NativeTy -> IntTy
ITFixed NativeTy
IT64) IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc IntTy
ITBig IntTy
ITNative) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue()|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc IntTy
ITBig (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc IntTy
ITBig (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc IntTy
ITBig (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFFFFFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc IntTy
ITBig (NativeTy -> IntTy
ITFixed NativeTy
IT64)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$
\[x :: JsExpr
x] -> Text -> PrimF
JsForeign "%0.and(new $JSRTS.jsbn.BigInteger(%1))" [JsExpr
x, String -> JsExpr
JsStr (String -> JsExpr) -> String -> JsExpr
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 0xFFFFFFFFFFFFFFFF]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT16) (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT32) (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT64) (NativeTy -> IntTy
ITFixed NativeTy
IT8)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT32) (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0 & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT64) (NativeTy -> IntTy
ITFixed NativeTy
IT16)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> IntTy -> PrimFn
LTrunc (NativeTy -> IntTy
ITFixed NativeTy
IT64) (NativeTy -> IntTy
ITFixed NativeTy
IT32)) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue() & 0xFFFFFFFF"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrConcat Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "+"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrLt Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "<"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrEq Bool
False JsPrimTy
PTBool (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
binop "=="
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrLen Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.length"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LIntFloat IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LIntFloat IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.intValue()"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LFloatInt IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LFloatInt IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(Math.trunc(%0)+ '')"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LIntStr IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "''+%0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LIntStr IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.toString()"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LStrInt IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "parseInt(%0)|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LStrInt IntTy
ITBig) Bool
True JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "new $JSRTS.jsbn.BigInteger(%0)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (PrimFn
LFloatStr) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "''+%0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (PrimFn
LStrFloat) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "parseFloat"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LChInt IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.charCodeAt(0)|0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item (IntTy -> PrimFn
LIntCh IntTy
ITNative) Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "String.fromCharCode"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFExp Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.exp"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFLog Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.log"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFSin Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.sin"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFCos Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.cos"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFTan Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.tan"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFASin Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.asin"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFACos Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.acos"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFATan Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.atan"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFATan2 Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.atan2"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFSqrt Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.sqrt"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFFloor Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.floor"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFCeil Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
jsAppN "Math.ceil"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LFNegate Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "-%0"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrHead Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[x :: JsExpr
x] -> JsExpr -> JsExpr -> JsExpr
JsArrayProj (Int -> JsExpr
JsInt 0) JsExpr
x
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrTail Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[x :: JsExpr
x] -> JsExpr -> Text -> PrimF
JsMethod JsExpr
x "slice" [Int -> JsExpr
JsInt 1]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrCons Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0+%1"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrIndex Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[x :: JsExpr
x, y :: JsExpr
y] -> JsExpr -> JsExpr -> JsExpr
JsArrayProj JsExpr
y JsExpr
x
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrRev Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "%0.split('').reverse().join('')"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LStrSubstr Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ Text -> PrimF
JsForeign "$JSRTS.prim_strSubstr(%0, %1, %2)"
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LSystemInfo Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ JsExpr -> PrimF
JsApp (JsExpr -> Text -> JsExpr
JsProp (Text -> JsExpr
JsVar "$JSRTS") "prim_systemInfo")
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LCrash Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[l :: JsExpr
l] -> JsExpr -> JsExpr
JsErrorExp JsExpr
l
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LReadStr Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[_] -> JsExpr -> PrimF
JsApp (JsExpr -> Text -> JsExpr
JsProp (Text -> JsExpr
JsVar "$JSRTS") "prim_readStr") []
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LWriteStr Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ \[_, str :: JsExpr
str] -> JsExpr -> PrimF
JsApp (JsExpr -> Text -> JsExpr
JsProp (Text -> JsExpr
JsVar "$JSRTS") "prim_writeStr") [JsExpr
str]
, PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item PrimFn
LNoOp Bool
False JsPrimTy
PTAny (PrimF -> (PrimFn, PrimDec)) -> PrimF -> (PrimFn, PrimDec)
forall a b. (a -> b) -> a -> b
$ PrimF
forall a. [a] -> a
head
]
where
item :: PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item :: PrimFn -> Bool -> JsPrimTy -> PrimF -> (PrimFn, PrimDec)
item fn :: PrimFn
fn ubi :: Bool
ubi pty :: JsPrimTy
pty c :: PrimF
c = (PrimFn
fn, (Bool
ubi, JsPrimTy
pty, PrimF
c))
binop :: Text -> PrimF
binop op :: Text
op [l :: JsExpr
l, r :: JsExpr
r] = Text -> JsExpr -> JsExpr -> JsExpr
JsBinOp Text
op JsExpr
l JsExpr
r
method :: Text -> PrimF
method op :: Text
op (l :: JsExpr
l:r :: [JsExpr]
r) = JsExpr -> Text -> PrimF
JsMethod JsExpr
l Text
op [JsExpr]
r
jsB2I :: JsExpr -> JsExpr
jsB2I :: JsExpr -> JsExpr
jsB2I x :: JsExpr
x = Text -> PrimF
JsForeign "%0 ? 1|0 : 0|0" [JsExpr
x]
jsPrimCoerce :: JsPrimTy -> JsPrimTy -> JsExpr -> JsExpr
jsPrimCoerce :: JsPrimTy -> JsPrimTy -> JsExpr -> JsExpr
jsPrimCoerce PTBool PTAny x :: JsExpr
x = JsExpr -> JsExpr
jsB2I JsExpr
x
jsPrimCoerce _ _ x :: JsExpr
x = JsExpr
x