summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-05-08 17:44:51 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-05-08 17:44:51 +0000
commit28f5e12c24edda376c863090c09406185373167b (patch)
treed37adb13ec69829960f21d187cbd689d780338eb /vm_eval.c
parent94419c16dc6e34875f923bdf1e72c0c926cd5126 (diff)
* configure.in: check function attirbute const and pure,
and define CONSTFUNC and PUREFUNC if available. Note that I don't add those options as default because it still shows many false-positive (it seems not to consider longjmp). * vm_eval.c (stack_check): get rb_thread_t* as an argument to avoid duplicate call of GET_THREAD(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/vm_eval.c b/vm_eval.c
index 93dbfb72ca..f1ecd78a90 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -303,10 +303,8 @@ rb_current_receiver(void)
}
static inline void
-stack_check(void)
+stack_check(rb_thread_t *th)
{
- rb_thread_t *th = GET_THREAD();
-
if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) && ruby_stack_check()) {
rb_thread_raised_set(th, RAISED_STACKOVERFLOW);
rb_exc_raise(sysstack_error);
@@ -342,7 +340,7 @@ rb_call0(VALUE recv, ID mid, int argc, const VALUE *argv,
if (call_status != MISSING_NONE) {
return method_missing(recv, mid, argc, argv, call_status);
}
- stack_check();
+ stack_check(th);
return vm_call0(th, recv, mid, argc, argv, me);
}
@@ -460,7 +458,7 @@ rb_check_funcall_default(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE
return check_funcall_missing(th, klass, recv, mid, argc, argv,
respond, def);
}
- stack_check();
+ stack_check(th);
return vm_call0(th, recv, mid, argc, argv, me);
}
@@ -485,7 +483,7 @@ rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
(*hook)(ret != Qundef, recv, mid, argc, argv, arg);
return ret;
}
- stack_check();
+ stack_check(th);
(*hook)(TRUE, recv, mid, argc, argv, arg);
return vm_call0(th, recv, mid, argc, argv, me);
}
@@ -718,7 +716,7 @@ raise_method_missing(rb_thread_t *th, int argc, const VALUE *argv, VALUE obj,
rb_obj_class(argv[0]));
}
- stack_check();
+ stack_check(th);
if (last_call_status & MISSING_PRIVATE) {
format = rb_fstring_cstr("private method `%s' called for %s%s%s");