Mercurial > urweb
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) |