on master help sign in
javascript: add hack to check for undefined
8613e7craichoo
javascript/JavaScript.idr+24−10
@@ -2,6 +2,23 @@ module JavaScript
2
2
3%access public
3%access public
4
4
5+-- TODO: Get rid of this hack, and find a better way.
6+private
7+isUndefined : Ptr -> IO Bool
8+isUndefined p = do
9+ res <- mkForeign (
10+ FFun "(function(arg) { return arg === undefined;})" [FPtr] FString) p
11+ if res == "false"
12+ then (return False)
13+ else (return True)
14+
15+--------------------------------------------------------------------------------
16+-- Events
17+--------------------------------------------------------------------------------
18+abstract
19+data Event : Type where
20+ MkEvent : Ptr -> Event
21+
5--------------------------------------------------------------------------------
22--------------------------------------------------------------------------------
6-- Elements
23-- Elements
7--------------------------------------------------------------------------------
24--------------------------------------------------------------------------------
@@ -21,23 +38,20 @@ setOnClick (MkElem e) f =
21 , FFunction (FAny Event) (FAny (IO Bool))
38 , FFunction (FAny Event) (FAny (IO Bool))
22 ] FUnit) e f
39 ] FUnit) e f
23--------------------------------------------------------------------------------
40--------------------------------------------------------------------------------
24−-- Events
25−--------------------------------------------------------------------------------
26−abstract
27−data Event : Type where
28− MkEvent : Ptr -> Event
29−
30−--------------------------------------------------------------------------------
31-- Nodelists
41-- Nodelists
32--------------------------------------------------------------------------------
42--------------------------------------------------------------------------------
33abstract
43abstract
34data NodeList : Type where
44data NodeList : Type where
35 MkNodeList : Ptr -> NodeList
45 MkNodeList : Ptr -> NodeList
36
46
37−elemAt : NodeList -> Nat -> IO Element
47+elemAt : NodeList -> Nat -> IO (Maybe Element)
38elemAt (MkNodeList p) i = do
48elemAt (MkNodeList p) i = do
39− i <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
49+ e <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
50+ d <- isUndefined e
51+ if d
40− return (MkElem i)
52+ then return $ Just (MkElem e)
53+ else return Nothing
54+
41--------------------------------------------------------------------------------
55--------------------------------------------------------------------------------
42-- Intervals
56-- Intervals
43--------------------------------------------------------------------------------
57--------------------------------------------------------------------------------