diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-10-09 09:46:42 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-10-09 09:46:42 +0000 |
commit | 9383505c4070e33bc2589b4d023890cb6ccdc109 (patch) | |
tree | 14d3ae1cec1826d50388676bf92182e012453fba /eval.c | |
parent | 681b54c0bd1a63cbcb09b0729334bacc4803c809 (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.c | 40 |
1 files changed, 31 insertions, 9 deletions
@@ -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); |