summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-09 08:43:39 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-09 08:43:39 +0000
commitdd3eed4f08dd5232b5634f7f444bb8db60e65f60 (patch)
tree6acb54435b9b14ebae44e48cf533549cad003022 /eval.c
parent0b2e94b2abcce9301d75ccd4c986f8c3324a50c7 (diff)
* 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
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c39
1 files changed, 5 insertions, 34 deletions
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