From dd3eed4f08dd5232b5634f7f444bb8db60e65f60 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 9 Oct 2003 08:43:39 +0000 Subject: * eval.c (proc_save_safe_level, proc_get_safe_level, proc_set_safe_level): save/restore safe level 1..4. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4730 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ eval.c | 39 +++++---------------------------------- 2 files changed, 10 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98a7182b31..59c08cc555 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Oct 9 17:43:36 2003 Nobuyoshi Nakada + + * eval.c (proc_save_safe_level, proc_get_safe_level, + proc_set_safe_level): save/restore safe level 1..4. + Thu Oct 9 15:45:27 2003 Yukihiro Matsumoto * pack.c (uv_to_utf8): change message to "out of range", since diff --git a/eval.c b/eval.c index edb488b595..fa0daaa732 100644 --- a/eval.c +++ b/eval.c @@ -6866,57 +6866,28 @@ rb_f_binding(self) return bind; } -#define PROC_T3 FL_USER1 -#define PROC_T4 FL_USER2 -#define PROC_TMAX (FL_USER1|FL_USER2) -#define PROC_TMASK (FL_USER1|FL_USER2) +#define PROC_TSHIFT (FL_USHIFT+1) +#define PROC_TMASK (FL_USER1|FL_USER2|FL_USER3) static void proc_save_safe_level(data) VALUE data; { - if (OBJ_TAINTED(data)) { - switch (ruby_safe_level) { - case 3: - FL_SET(data, PROC_T3); - break; - case 4: - FL_SET(data, PROC_T4); - break; - default: - if (ruby_safe_level > 4) { - FL_SET(data, PROC_TMAX); - } - break; - } - } + FL_SET(data, (ruby_safe_level << PROC_TSHIFT) & PROC_TMASK); } static int proc_get_safe_level(data) VALUE data; { - if (OBJ_TAINTED(data)) { - switch (RBASIC(data)->flags & PROC_TMASK) { - case PROC_T3: - return 3; - case PROC_T4: - return 4; - case PROC_TMAX: - return 5; - } - return 3; - } - return 0; + return (RBASIC(data)->flags & PROC_TMASK) >> PROC_TSHIFT; } static void proc_set_safe_level(data) VALUE data; { - if (OBJ_TAINTED(data)) { - ruby_safe_level = proc_get_safe_level(data); - } + ruby_safe_level = proc_get_safe_level(data); } static VALUE -- cgit v1.2.3