// tests for nested scopes, labels, breaking labels and setting the result of block expressions //expect:inner //expect:outer { @outer { @middle { @inner print ("inner"); break @middle; }; print ("middle"); }; print ("outer"); }; //expect:inner //expect:middle //expect:outer { @outer { @middle { @inner print ("inner"); break @inner; }; print ("middle"); }; print ("outer"); }; // nothing to expect here { @outer { @middle { @inner { break @outer; }; print ("inner"); }; print ("middle"); }; print ("outer"); }; //expect:5.0 var f = proc() { @result var y = 1; var z = 3; var p = 1; :result = y + (z + p); { break @result; }; :result = 10; }; print (f()); //expect:15.0 f = proc(m, n) m + n ; print (f(f(5, 5), 5)); //expect:10.0 var g = proc() {@a :a = { @b :b = { @c :c = 10; }; }; } ; print (g()); //expect:9.0 var h = proc() {@a :a = { @b :b = { @c :a = 3; :b = 6; :c = :a + :b; }; }; } ; print (h());