On 12-10-21 09:50 PM, Benjamin Striegel wrote: > If it's not too much trouble, a complete example (using any one of the > proposed syntaxes) would be enlightening. I'm still having a hard time > imagining how OutOfKittens is defined, and how do_some_stuff et al > signal it in the first place, and how the input/output of OutOfKittens > can be utilized within the signalling function.
Sure. Let's use a real case such as "trying to open a file that might be missing in the middle of a call to read_whole_file_str". This involves a few assumed changes to the way io is structured, but nothing deep: // Boilerplate for declaring TLS key fn missing_file_key(_x: @Handler<Path,Reader>) { } const missing_file : Condition<Path,Reader> = Condition { key: missing_file_key }; mod io { // Revised to not use Result anymore pub fn file_reader(path: &Path) -> Reader { let f = do os::as_c_charp(path.to_str()) |p| { do os::as_c_charp("r") |m| { libc::fopen(p, m) } }; if f as uint == 0u { // No such file; ask for help via .raise missing_file.raise(path) } else { FILE_reader(f, true)) } } } fn main() { do missing_file.trap(|_p| BytesReader { bytes: ~[], pos: 0u } as Reader ).in { // This will trap in io::file_reader and // substitute the empty bytes_reader above let s = io::read_whole_file_str(Path("/nonexistent")); } } Clear enough? -Graydon _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev