changeset 1794:4671afac15af

Change 'spawn' implementation to allow blocking within <active code>
author Adam Chlipala <adam@chlipala.net>
date Wed, 25 Jul 2012 08:20:15 -0400 (2012-07-25)
parents 446e73902b09
children d28adceef22a
files lib/js/urweb.js tests/activeBlock.ur
diffstat 2 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lib/js/urweb.js	Tue Jul 24 19:49:50 2012 -0400
+++ b/lib/js/urweb.js	Wed Jul 25 08:20:15 2012 -0400
@@ -1297,7 +1297,7 @@
 
 function rc(prefix, uri, parse, k, needsSig) {
     if (!maySuspend)
-        er("May not 'rpc' in 'code' for <active>");
+        er("May not 'rpc' in main thread of 'code' for <active>");
 
     uri = cat(prefix, uri);
     uri = flattenLocal(uri);
@@ -1478,7 +1478,7 @@
 
 function rv(chn, parse, k) {
     if (!maySuspend)
-        er("May not 'recv' in 'code' for <active>");
+        er("May not 'recv' in main thread of 'code' for <active>");
 
     if (chn == null)
         return;
@@ -1508,13 +1508,13 @@
 
 function sl(ms, k) {
     if (!maySuspend)
-        er("May not 'sleep' in 'code' for <active>");
+        er("May not 'sleep' in main thread of 'code' for <active>");
 
     window.setTimeout(function() { k(null); }, ms);
 }
 
 function sp(e) {
-    execF(e, null);
+    window.setTimeout(function() { execF(e); }, 0);
 }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/activeBlock.ur	Wed Jul 25 08:20:15 2012 -0400
@@ -0,0 +1,10 @@
+fun main () : transaction page = return <xml><body>
+  <active code={s <- source ""; return <xml>
+    <dyn signal={s <- signal s; return (txt s)}/>
+    <button onclick={fn _ => set s "Hi!"}/>
+  </xml>}/>
+
+  <active code={sleep 1; return <xml>Hi!</xml>}/>
+
+  <active code={spawn (sleep 1; alert "Hi!"); return <xml>Success</xml>}/>
+</body></xml>