From 10c4bb29b237ccdbf99cfe8ef44c81de5a4a9018 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 2 Oct 2003 08:25:00 +0000 Subject: * time.c (time_load): restore instance variables (if any) before loading from marshaled data. * time.c (time_mdump): new marshal dumper. _dump is still available for compatibility. * time.c (time_mload): new marshal loader. * marshal.c (w_object): preserve instance variables for objects with marshal_dump. * marshal.c (r_object0): restore instance variables before calling marshal_load. * error.c (rb_warn_m): always return nil. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 7726edb9e8..e14215f7a7 100644 --- a/eval.c +++ b/eval.c @@ -10187,7 +10187,19 @@ rb_catch(tag, func, data) VALUE (*func)(); VALUE data; { - return rb_iterate((VALUE(*)_((VALUE)))catch_i, ID2SYM(rb_intern(tag)), func, data); + int state; + VALUE val = Qnil; /* OK */ + + PUSH_TAG(PROT_NONE); + PUSH_SCOPE(); + if ((state = EXEC_TAG()) == 0) { + val = rb_iterate((VALUE(*)_((VALUE)))catch_i, ID2SYM(rb_intern(tag)), func, data); + } + POP_SCOPE(); + POP_TAG(); + if (state) JUMP_TAG(state); + + return val; } static VALUE -- cgit v1.2.3