[macruby-changes] [1212] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 27 13:20:01 PDT 2009


Revision: 1212
          http://trac.macosforge.org/projects/ruby/changeset/1212
Author:   lsansonetti at 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)
 {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090327/e8b1d03d/attachment-0001.html>


More information about the macruby-changes mailing list