diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | eval.c | 8 | ||||
-rw-r--r-- | ext/tk/lib/tk.rb | 13 |
3 files changed, 21 insertions, 5 deletions
@@ -1,3 +1,8 @@ +Fri Jul 14 12:49:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp> + + * eval.c (rb_eval): should preserve errinfo even if return, break, + etc. is called in rescue clause. + Fri Jul 7 03:30:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp> * numeric.c (fix_aref): convert index by NUM2INT, not FIX2INT. @@ -2099,13 +2099,13 @@ rb_eval(self, node) result = rb_eval(self, resq->nd_body); } POP_TAG(); - if (state == 0) { - ruby_errinfo = e_info; - } - else if (state == TAG_RETRY) { + if (state == TAG_RETRY) { state = 0; goto retry_entry; } + if (state != TAG_RAISE) { + ruby_errinfo = e_info; + } break; } resq = resq->nd_head; /* next rescue */ diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index 73ea9c9bf5..239a50532b 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -219,6 +219,17 @@ module TkComm end private :_get_eval_string + def ruby2tcl(v) + if v.kind_of?(Hash) + v = hash_kv(v) + v.flatten! + v.collect{|e|ruby2tcl(e)} + else + _get_eval_string(v) + end + end + private :ruby2tcl + Tk_IDs = [0, 0] # [0]-cmdid, [1]-winid def _curr_cmd_id id = format("c%.4d", Tk_IDs[0]) @@ -541,7 +552,7 @@ module TkCore def tk_call(*args) print args.join(" "), "\n" if $DEBUG - args.filter{|x|_get_eval_string(x)} + args.filter {|x|ruby2tcl(x)} args.compact! args.flatten! begin |