diff --git a/ChangeLog b/ChangeLog index 62f4dfdd8c..d7f44d8f41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jun 13 07:06:54 2009 Nobuyoshi Nakada + + * vm_eval.c (rb_f_catch): updated rdoc about generalized argument, + and the case without arguments. [ruby-core:23827] + Sat Jun 13 06:50:31 2009 Nobuyoshi Nakada * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): TimeoutError is diff --git a/vm_eval.c b/vm_eval.c index 1c66bea8ac..c71fb5c332 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1137,11 +1137,11 @@ rb_mod_module_exec(int argc, VALUE *argv, VALUE mod) /* * call-seq: - * throw(symbol [, obj]) + * throw(tag [, obj]) * * Transfers control to the end of the active +catch+ block - * waiting for _symbol_. Raises +ArgumentError+ if there - * is no +catch+ block for the symbol. The optional second + * waiting for _tag_. Raises +ArgumentError+ if there + * is no +catch+ block for the _tag_. The optional second * parameter supplies a return value for the +catch+ block, * which otherwise defaults to +nil+. For examples, see * Kernel::catch. @@ -1188,12 +1188,12 @@ rb_throw(const char *tag, VALUE val) /* * call-seq: - * catch(symbol) {| | block } > obj + * catch([arg]) {|tag| block } => obj * * +catch+ executes its block. If a +throw+ is * executed, Ruby searches up its stack for a +catch+ block * with a tag corresponding to the +throw+'s - * _symbol_. If found, that block is terminated, and + * _tag_. If found, that block is terminated, and * +catch+ returns the value given to +throw+. If * +throw+ is not called, the block terminates normally, and * the value of +catch+ is the value of the last expression @@ -1215,6 +1215,12 @@ rb_throw(const char *tag, VALUE val) * 2 * 1 * 0 + * + * when _arg_ is given, +catch+ yields it as is, or when no + * _arg_ is given, +catch+ assigns a new unique object to + * +throw+. this is usefull for nested +catch+. _arg_ can + * be an arbitrary object, not only Symbol. + * */ static VALUE