Revision: 1212 http://trac.macosforge.org/projects/ruby/changeset/1212 Author: lsansonetti@apple.com Date: 2009-03-27 13:20:00 -0700 (Fri, 27 Mar 2009) Log Message: ----------- implemented last process status primitives Modified Paths: -------------- MacRuby/branches/experimental/include/ruby/ruby.h MacRuby/branches/experimental/process.c MacRuby/branches/experimental/roxor.cpp Modified: MacRuby/branches/experimental/include/ruby/ruby.h =================================================================== --- MacRuby/branches/experimental/include/ruby/ruby.h 2009-03-27 20:11:09 UTC (rev 1211) +++ MacRuby/branches/experimental/include/ruby/ruby.h 2009-03-27 20:20:00 UTC (rev 1212) @@ -1031,6 +1031,7 @@ RUBY_EXTERN VALUE rb_cNilClass; RUBY_EXTERN VALUE rb_cNumeric; RUBY_EXTERN VALUE rb_cProc; +RUBY_EXTERN VALUE rb_cProcessStatus; RUBY_EXTERN VALUE rb_cRange; RUBY_EXTERN VALUE rb_cRational; RUBY_EXTERN VALUE rb_cComplex; Modified: MacRuby/branches/experimental/process.c =================================================================== --- MacRuby/branches/experimental/process.c 2009-03-27 20:11:09 UTC (rev 1211) +++ MacRuby/branches/experimental/process.c 2009-03-27 20:20:00 UTC (rev 1212) @@ -216,29 +216,12 @@ * _stat_, we're referring to this 16 bit value. */ -static VALUE rb_cProcessStatus; +VALUE rb_cProcessStatus; -VALUE -rb_last_status_get(void) -{ - // TODO - return Qnil; -} - -void -rb_last_status_set(int status, rb_pid_t pid) -{ -#if 0 // TODO - VALUE last_status = rb_obj_alloc(rb_cProcessStatus); - rb_iv_set(vm->last_status, "status", INT2FIX(status)); - rb_iv_set(vm->last_status, "pid", PIDT2NUM(pid)); -#endif -} - static void rb_last_status_clear(void) { - // TODO + rb_last_status_set(0, -1); } /* Modified: MacRuby/branches/experimental/roxor.cpp =================================================================== --- MacRuby/branches/experimental/roxor.cpp 2009-03-27 20:11:09 UTC (rev 1211) +++ MacRuby/branches/experimental/roxor.cpp 2009-03-27 20:20:00 UTC (rev 1212) @@ -407,6 +407,7 @@ VALUE load_path; VALUE backref; VALUE broken_with; + VALUE last_status; int safe_level; std::map<NODE *, rb_vm_block_t *> blocks; std::map<double, struct rb_float_cache *> float_cache; @@ -1949,6 +1950,7 @@ backref = Qnil; broken_with = Qundef; + last_status = Qnil; current_block = NULL; previous_block = NULL; @@ -6149,6 +6151,33 @@ } extern "C" +VALUE +rb_last_status_get(void) +{ + return GET_VM()->last_status; +} + +extern "C" +void +rb_last_status_set(int status, rb_pid_t pid) +{ + if (GET_VM()->last_status != Qnil) { + rb_objc_release((void *)GET_VM()->last_status); + } + VALUE last_status; + if (pid == -1) { + last_status = Qnil; + } + else { + last_status = rb_obj_alloc(rb_cProcessStatus); + rb_iv_set(last_status, "status", INT2FIX(status)); + rb_iv_set(last_status, "pid", PIDT2NUM(pid)); + rb_objc_retain((void *)last_status); + } + GET_VM()->last_status = last_status; +} + +extern "C" const char * rb_sourcefile(void) {
participants (1)
-
source_changes@macosforge.org