comparison src/effectize.sml @ 1433:66092ce45a76

Ignore JavaScript events in Effectize; allow extra spaces for 'jsFunc'; eat carriage returns at line ends in .urp files
author Adam Chlipala <adam@chlipala.net>
date Thu, 10 Mar 2011 20:22:03 -0500
parents 44a12a321150
children b6df00ed536c
comparison
equal deleted inserted replaced
1432:7d024767b024 1433:66092ce45a76
85 85
86 fun couldReadCookie evs = U.Exp.exists {kind = fn _ => false, 86 fun couldReadCookie evs = U.Exp.exists {kind = fn _ => false,
87 con = fn _ => false, 87 con = fn _ => false,
88 exp = exp evs} 88 exp = exp evs}
89 89
90 val dejs = U.Exp.map {kind = fn x => x,
91 con = fn c => c,
92 exp = fn ERecord xets => ERecord (List.filter (fn ((CName x, _), _ , _) => x = "Onload" orelse not (String.isPrefix "On" x)
93 | _ => true) xets)
94 | e => e}
95
90 fun doDecl (d, evs as (writers, readers, pushers)) = 96 fun doDecl (d, evs as (writers, readers, pushers)) =
91 case #1 d of 97 case #1 d of
92 DVal (x, n, t, e, s) => 98 DVal (x, n, t, e, s) =>
93 (d, (if couldWrite writers e then 99 let
94 IM.insert (writers, n, (#2 d, s)) 100 val e = dejs e
95 else 101 in
96 writers, 102 (d, (if couldWrite writers e then
97 if couldReadCookie readers e then 103 IM.insert (writers, n, (#2 d, s))
98 IM.insert (readers, n, (#2 d, s)) 104 else
99 else 105 writers,
100 readers, 106 if couldReadCookie readers e then
101 if couldWriteWithRpc writers readers pushers e then 107 IM.insert (readers, n, (#2 d, s))
102 IM.insert (pushers, n, (#2 d, s)) 108 else
103 else 109 readers,
104 pushers)) 110 if couldWriteWithRpc writers readers pushers e then
111 IM.insert (pushers, n, (#2 d, s))
112 else
113 pushers))
114 end
105 | DValRec vis => 115 | DValRec vis =>
106 let 116 let
107 fun oneRound evs = 117 fun oneRound evs =
108 foldl (fn ((_, n, _, e, s), (changed, (writers, readers, pushers))) => 118 foldl (fn ((_, n, _, e, s), (changed, (writers, readers, pushers))) =>
109 let 119 let
120 val e = dejs e
121
110 val (changed, writers) = 122 val (changed, writers) =
111 if couldWrite writers e andalso not (IM.inDomain (writers, n)) then 123 if couldWrite writers e andalso not (IM.inDomain (writers, n)) then
112 (true, IM.insert (writers, n, (#2 d, s))) 124 (true, IM.insert (writers, n, (#2 d, s)))
113 else 125 else
114 (changed, writers) 126 (changed, writers)