summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-10-09 09:46:42 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-10-09 09:46:42 +0000
commit9383505c4070e33bc2589b4d023890cb6ccdc109 (patch)
tree14d3ae1cec1826d50388676bf92182e012453fba /eval.c
parent681b54c0bd1a63cbcb09b0729334bacc4803c809 (diff)
* eval.c (rb_eval): NODE_MATCH3 was confusing left and right. sigh.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1778 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/eval.c b/eval.c
index 1023bbbc65..5b31d6096f 100644
--- a/eval.c
+++ b/eval.c
@@ -2140,11 +2140,11 @@ rb_eval(self, n)
{
VALUE r = rb_eval(self,node->nd_recv);
VALUE l = rb_eval(self,node->nd_value);
- if (TYPE(r) == T_STRING) {
- result = rb_reg_match(l, r);
+ if (TYPE(l) == T_STRING) {
+ result = rb_reg_match(r, l);
}
else {
- result = rb_funcall(r, match, 1, l);
+ result = rb_funcall(l, match, 1, r);
}
}
break;
@@ -8026,8 +8026,8 @@ rb_thread_run(thread)
}
static VALUE
-rb_thread_kill(thread)
- VALUE thread;
+thread_kill(thread, result)
+ VALUE thread, result;
{
rb_thread_t th = rb_thread_check(thread);
@@ -8041,11 +8041,19 @@ rb_thread_kill(thread)
rb_thread_ready(th);
th->gid = 0;
th->status = THREAD_TO_KILL;
+ th->result = result;
if (!rb_thread_critical) rb_thread_schedule();
return thread;
}
static VALUE
+rb_thread_kill(th)
+ VALUE th;
+{
+ return thread_kill(th, Qfalse);
+}
+
+static VALUE
rb_thread_s_kill(obj, th)
VALUE obj, th;
{
@@ -8053,9 +8061,23 @@ rb_thread_s_kill(obj, th)
}
static VALUE
-rb_thread_exit()
+rb_thread_exit(argc, argv, th)
+ int argc;
+ VALUE *argv;
+ VALUE th;
+{
+ VALUE result = Qfalse;
+
+ rb_scan_args(argc, argv, "01", &result);
+ return rb_thread_kill(th, result);
+}
+
+static VALUE
+rb_thread_s_exit(argc, argv)
+ int argc;
+ VALUE *argv;
{
- return rb_thread_kill(curr_thread->thread);
+ return rb_thread_exit(argc, argv, curr_thread->thread);
}
static VALUE
@@ -8961,7 +8983,7 @@ Init_Thread()
rb_define_singleton_method(rb_cThread, "stop", rb_thread_stop, 0);
rb_define_singleton_method(rb_cThread, "kill", rb_thread_s_kill, 1);
- rb_define_singleton_method(rb_cThread, "exit", rb_thread_exit, 0);
+ rb_define_singleton_method(rb_cThread, "exit", rb_thread_s_exit, -1);
rb_define_singleton_method(rb_cThread, "pass", rb_thread_pass, 0);
rb_define_singleton_method(rb_cThread, "current", rb_thread_current, 0);
rb_define_singleton_method(rb_cThread, "main", rb_thread_main, 0);
@@ -8976,7 +8998,7 @@ Init_Thread()
rb_define_method(rb_cThread, "run", rb_thread_run, 0);
rb_define_method(rb_cThread, "wakeup", rb_thread_wakeup, 0);
rb_define_method(rb_cThread, "kill", rb_thread_kill, 0);
- rb_define_method(rb_cThread, "exit", rb_thread_kill, 0);
+ rb_define_method(rb_cThread, "exit", rb_thread_exit, -1);
rb_define_method(rb_cThread, "value", rb_thread_value, 0);
rb_define_method(rb_cThread, "status", rb_thread_status, 0);
rb_define_method(rb_cThread, "join", rb_thread_join, 0);