[macruby-changes] [386] MacRuby/branches/lrz_unstable

source_changes at macosforge.org source_changes at macosforge.org
Wed Jul 30 13:40:50 PDT 2008


Revision: 386
          http://trac.macosforge.org/projects/ruby/changeset/386
Author:   lsansonetti at apple.com
Date:     2008-07-30 13:40:50 -0700 (Wed, 30 Jul 2008)
Log Message:
-----------
wip

Modified Paths:
--------------
    MacRuby/branches/lrz_unstable/class.c
    MacRuby/branches/lrz_unstable/gc.c
    MacRuby/branches/lrz_unstable/include/ruby/ruby.h
    MacRuby/branches/lrz_unstable/variable.c

Modified: MacRuby/branches/lrz_unstable/class.c
===================================================================
--- MacRuby/branches/lrz_unstable/class.c	2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/class.c	2008-07-30 20:40:50 UTC (rev 386)
@@ -402,19 +402,11 @@
 VALUE
 rb_make_metaclass(VALUE obj, VALUE super)
 {
-    bool pure;
-
 #if WITH_OBJC
-    pure = NATIVE(obj);
+    if (TYPE(obj) == T_CLASS && RCLASS_SINGLETON(obj)) {
 #else
-    pure = false;
+    if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
 #endif
-
-#if WITH_OBJC
-    if (!pure && TYPE(obj) == T_CLASS && RCLASS_SINGLETON(obj)) {
-#else
-    if (!pure && BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
-#endif
 	RBASIC(obj)->klass = rb_cClass;
 	return rb_cClass;
     }

Modified: MacRuby/branches/lrz_unstable/gc.c
===================================================================
--- MacRuby/branches/lrz_unstable/gc.c	2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/gc.c	2008-07-30 20:40:50 UTC (rev 386)
@@ -2300,21 +2300,18 @@
 		    continue;
 	    }
 	}
-	if (!NATIVE((VALUE)r->address)) {
-	    switch (BUILTIN_TYPE(r->address)) {
-		case T_NONE: 
-		case T_ICLASS: 
-		case T_NODE:
+	switch (BUILTIN_TYPE(r->address)) {
+	    case T_NONE: 
+	    case T_ICLASS: 
+	    case T_NODE:
+		continue;
+	    case T_CLASS:
+		if (RCLASS_SINGLETON(r->address))
 		    continue;
-		case T_CLASS:
-		    if (RCLASS_SINGLETON(r->address))
-			continue;
-	    }
+	    case T_NATIVE:
+		if (rb_objc_is_placeholder((void *)r->address))
+		    continue;
 	}
-	else {
-	    if (rb_objc_is_placeholder((void *)r->address))
-		continue;
-	}
 	rb_yield((VALUE)r->address);
 	ctx->count++;
     }	

Modified: MacRuby/branches/lrz_unstable/include/ruby/ruby.h
===================================================================
--- MacRuby/branches/lrz_unstable/include/ruby/ruby.h	2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/include/ruby/ruby.h	2008-07-30 20:40:50 UTC (rev 386)
@@ -283,6 +283,9 @@
     RUBY_T_FALSE  = 0x13,
     RUBY_T_SYMBOL = 0x14,
     RUBY_T_FIXNUM = 0x15,
+#if WITH_OBJC
+    RUBY_T_NATIVE = 0x16,
+#endif
 
     RUBY_T_UNDEF  = 0x1b,
     RUBY_T_NODE   = 0x1c,
@@ -306,6 +309,9 @@
 #define T_BIGNUM RUBY_T_BIGNUM
 #define T_FILE   RUBY_T_FILE
 #define T_FIXNUM RUBY_T_FIXNUM
+#if WITH_OBJC
+# define T_NATIVE RUBY_T_NATIVE
+#endif
 #define T_TRUE   RUBY_T_TRUE
 #define T_FALSE  RUBY_T_FALSE
 #define T_DATA   RUBY_T_DATA
@@ -498,7 +504,7 @@
 #  define _RCLASS_INFO(m) (*(long *)((void *)m + (sizeof(void *) * 4)))
 #  define RCLASS_SINGLETON(m) (_RCLASS_INFO(m) & CLS_META)
 # endif
-# define NATIVE(obj) (*(Class *)obj != NULL && (RCLASS_VERSION(*(Class *)obj) & RCLASS_IS_OBJECT_SUBCLASS) != RCLASS_IS_OBJECT_SUBCLASS)
+# define NATIVE(obj) (*(Class *)obj != NULL && *(Class *)obj != (Class)rb_cBignum && (RCLASS_VERSION(*(Class *)obj) & RCLASS_IS_OBJECT_SUBCLASS) != RCLASS_IS_OBJECT_SUBCLASS)
 # define RCLASS_RUBY(m) ((RCLASS_VERSION(m) & RCLASS_IS_RUBY_CLASS) == RCLASS_IS_RUBY_CLASS)
 # define RCLASS_MODULE(m) ((RCLASS_VERSION(m) & RCLASS_IS_MODULE) == RCLASS_IS_MODULE)
 CFMutableDictionaryRef rb_class_ivar_dict(VALUE);
@@ -1076,6 +1082,7 @@
 	if (*(Class *)obj == (Class)rb_cCFString) return T_STRING;
 	if (*(Class *)obj == (Class)rb_cCFArray) return T_ARRAY;
 	if (*(Class *)obj == (Class)rb_cCFHash) return T_HASH;
+	if (NATIVE(obj)) return T_NATIVE;
     }
 #endif
     return BUILTIN_TYPE(obj);

Modified: MacRuby/branches/lrz_unstable/variable.c
===================================================================
--- MacRuby/branches/lrz_unstable/variable.c	2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/variable.c	2008-07-30 20:40:50 UTC (rev 386)
@@ -15,6 +15,7 @@
 #include "ruby/node.h"
 #include "ruby/st.h"
 #include "ruby/util.h"
+#include "debug.h"
 
 void rb_vm_change_state(void);
 st_table *rb_global_tbl;
@@ -1209,11 +1210,6 @@
     st_data_t index;
 #endif
 
-#if WITH_OBJC
-    if (!rb_special_const_p(obj) && NATIVE(obj))
-	return generic_ivar_get(obj, id, warn);
-#endif
-
     switch (TYPE(obj)) {
       case T_OBJECT:
 #if WITH_OBJC
@@ -1266,6 +1262,10 @@
 	    return val;
 #endif
 	break;
+#if WITH_OBJC
+      case T_NATIVE:
+	return generic_ivar_get(obj, id, warn);
+#endif
       default:
 	if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj))
 	    return generic_ivar_get(obj, id, warn);
@@ -1302,13 +1302,6 @@
     if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
 	rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
     if (OBJ_FROZEN(obj)) rb_error_frozen("object");
-#if WITH_OBJC
-    if (!rb_special_const_p(obj) && NATIVE(obj)) {
-	rb_objc_flag_set((const void *)obj, FL_EXIVAR, true);
-	generic_ivar_set(obj, id, val);
-	return val;
-    }
-#endif
     switch (TYPE(obj)) {
       case T_OBJECT:
 #if WITH_OBJC
@@ -1449,6 +1442,12 @@
 	st_insert(RCLASS_IV_TBL(obj), id, val);
         break;
 #endif
+#if WITH_OBJC
+      case T_NATIVE:
+	rb_objc_flag_set((const void *)obj, FL_EXIVAR, true);
+	generic_ivar_set(obj, id, val);
+	break;
+#endif
       default:
 	generic_ivar_set(obj, id, val);
 	FL_SET(obj, FL_EXIVAR);
@@ -1466,11 +1465,6 @@
     st_data_t index;
 #endif
 
-#if WITH_OBJC
-    if (!rb_special_const_p(obj) && NATIVE(obj)) {
-	return generic_ivar_defined(obj, id);
-    }
-#endif
     switch (TYPE(obj)) {
       case T_OBJECT:
 #if WITH_OBJC
@@ -1519,6 +1513,10 @@
 	    return Qtrue;
 	break;
 #endif
+#if WITH_OBJC
+      case T_NATIVE:
+	return generic_ivar_defined(obj, id);
+#endif
       default:
 	if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj))
 	    return generic_ivar_defined(obj, id);
@@ -1566,10 +1564,6 @@
 
 void rb_ivar_foreach(VALUE obj, int (*func)(ANYARGS), st_data_t arg)
 {
-#if WITH_OBJC
-    if (!rb_special_const_p(obj) && NATIVE(obj))
-	goto generic;
-#endif
     switch (TYPE(obj)) {
       case T_OBJECT:
 #if WITH_OBJC
@@ -1609,6 +1603,10 @@
 	}
 #endif
 	return;
+#if WITH_OBJC
+      case T_NATIVE:
+	goto generic;
+#endif
     }
     if (!FL_TEST(obj, FL_EXIVAR) && !rb_special_const_p(obj))
 	return;
@@ -2323,6 +2321,7 @@
 	rb_vm_change_state();
     }
 #if WITH_OBJC
+    DLOG("CONS", "%s::%s <- %p", class_getName((Class)klass), rb_id2name(id), (void *)val);
     CFDictionarySetValue(iv_dict, (const void *)id, (const void *)val);
 #else
     st_insert(RCLASS_IV_TBL(klass), id, val);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080730/9969bcda/attachment.html 


More information about the macruby-changes mailing list