summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-07-14 04:34:43 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-07-14 04:34:43 +0000
commit6d19b9b4191c86968e547bd121d2472f72150cc2 (patch)
tree60d40807e100f8b5772be49bbe42d85882c3009b
parent2e28daaaa31aaebf68ced3cedc1eecb5b5697a0e (diff)
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--eval.c8
-rw-r--r--ext/tk/lib/tk.rb13
3 files changed, 21 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index f715e4db57..3b53a40d97 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/eval.c b/eval.c
index 25f2b1c574..53cd2dd21b 100644
--- a/eval.c
+++ b/eval.c
@@ -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