eval(readFile("Compiled_NJS_Continuation_Lib")); //prompt(tag, alert_handler, next) -> tag is passed to next() //compose_continuation(k, val) //invoke_continuation(k, val) //call_with_current_continuation(tag, next) str = ' main = function(){ f1(); print("returning from main"); } f1 = function(){ print("before f2"); prompt("f1", function(){}, f2); print("after f2"); } f2 = function(){ print("before f3"); prompt("f2", function(){}, f3); print("after f3"); } f3 = function(){ print("before f4"); print(call_with_current_continuation("f2", f4)); print("after f4"); } f4 = function(k){ print("before invoke continuation"); compose_continuation(k, "continuation argument"); print("after invoke continuation"); } enable_delimited_continuations(main); ' a = NSJSParser.matchAll(continuation_lib + str, "topLevel") b = NSJSTranslator.match(a, "trans") example2 = ' main = function(){ try{ prompt( "tag1", function(e){ print("alert handler called"); }, function(){ throw 0; } ); } catch(e) { print("exception handler called"); } } enable_delimited_continuations(main); ' example3 = ' main = function(){ prompt( "tag1", function(e){ print("alert handler called"); }, function(){ try{ abort("tag1",0); } catch(e){ print("exception handler called"); } } ); } enable_delimited_continuations(main); '