From ab3d450a54ad9407548a36f01cb3775a6533c3d7 Mon Sep 17 00:00:00 2001 From: knu Date: Thu, 22 May 2008 03:31:43 +0000 Subject: Merge from ruby_1_8. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@16521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index e52bc2c6e8..b0dd27e636 100644 --- a/eval.c +++ b/eval.c @@ -8408,16 +8408,25 @@ proc_clone(self) * MISSING: documentation */ +#define PROC_TSHIFT (FL_USHIFT+1) +#define PROC_TMASK (FL_USER1|FL_USER2|FL_USER3) +#define PROC_TMAX (PROC_TMASK >> PROC_TSHIFT) + +static int proc_get_safe_level(VALUE); + static VALUE proc_dup(self) VALUE self; { struct BLOCK *orig, *data; VALUE bind; + int safe = proc_get_safe_level(self); Data_Get_Struct(self, struct BLOCK, orig); bind = Data_Make_Struct(rb_obj_class(self),struct BLOCK,blk_mark,blk_free,data); blk_dup(data, orig); + if (safe > PROC_TMAX) safe = PROC_TMAX; + FL_SET(bind, (safe << PROC_TSHIFT) & PROC_TMASK); return bind; } @@ -8521,10 +8530,6 @@ bind_eval(argc, argv, bindval) return rb_f_eval(argc+1, args, Qnil /* self will be searched in eval */); } -#define PROC_TSHIFT (FL_USHIFT+1) -#define PROC_TMASK (FL_USER1|FL_USER2|FL_USER3) -#define PROC_TMAX (PROC_TMASK >> PROC_TSHIFT) - #define SAFE_LEVEL_MAX PROC_TMASK static void -- cgit v1.2.3