[macruby-changes] [188] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon May 5 14:13:55 PDT 2008


Revision: 188
          http://trac.macosforge.org/projects/ruby/changeset/188
Author:   lsansonetti at apple.com
Date:     2008-05-05 14:13:55 -0700 (Mon, 05 May 2008)

Log Message:
-----------
fixing the bootstraptest suite (only 3 tests are now failing)

Modified Paths:
--------------
    MacRuby/trunk/bootstraptest/test_class.rb
    MacRuby/trunk/bootstraptest/test_literal.rb
    MacRuby/trunk/bootstraptest/test_objectspace.rb
    MacRuby/trunk/gc.c
    MacRuby/trunk/object.c

Modified: MacRuby/trunk/bootstraptest/test_class.rb
===================================================================
--- MacRuby/trunk/bootstraptest/test_class.rb	2008-05-04 04:56:59 UTC (rev 187)
+++ MacRuby/trunk/bootstraptest/test_class.rb	2008-05-05 21:13:55 UTC (rev 188)
@@ -106,7 +106,7 @@
 assert_equal 'C',       %q( class A; class ::C; end end;  C )
 assert_equal 'Class',   %q( class A; class ::C; end end;  C.class )
 assert_equal 'OK',      %q( class A; ::C = "OK"; end;  C )
-assert_equal 'String',  %q( class A; ::C = "OK"; end;  C.class )
+assert_equal 'NSCFString',  %q( class A; ::C = "OK"; end;  C.class )
 
 # class/module dup
 assert_equal 'Class',   %q( class C; end;  C.dup.class )

Modified: MacRuby/trunk/bootstraptest/test_literal.rb
===================================================================
--- MacRuby/trunk/bootstraptest/test_literal.rb	2008-05-04 04:56:59 UTC (rev 187)
+++ MacRuby/trunk/bootstraptest/test_literal.rb	2008-05-05 21:13:55 UTC (rev 188)
@@ -35,13 +35,13 @@
 
 # string literal
 assert_equal 'a',               '?a'
-assert_equal 'String',          '?a.class'
+assert_equal 'NSCFString',      '?a.class'
 assert_equal 'A',               '?A'
-assert_equal 'String',          '?A.class'
+assert_equal 'NSCFString',      '?A.class'
 assert_equal "\n",              '?\n'
-assert_equal 'String',          '?\n.class'
+assert_equal 'NSCFString',      '?\n.class'
 assert_equal ' ',               '?\ '
-assert_equal 'String',          '?\ .class'
+assert_equal 'NSCFString',      '?\ .class'
 assert_equal 'string',          "'string'"
 assert_equal 'string',          '"string"'
 assert_equal 'string',          '%(string)'
@@ -87,28 +87,28 @@
 assert_equal 'Regexp',          %q(/re#{'ge'}xp/.class)
 
 # array
-assert_equal 'Array',           '[].class'
+assert_equal 'NSCFArray',       '[].class'
 assert_equal '0',               '[].size'
 assert_equal '0',               '[].length'
 assert_equal '[]',              '[].inspect'
-assert_equal 'Array',           '[0].class'
+assert_equal 'NSCFArray',       '[0].class'
 assert_equal '1',               '[3].size'
 assert_equal '[3]',             '[3].inspect'
 assert_equal '3',               'a = [3]; a[0]'
-assert_equal 'Array',           '[1,2].class'
+assert_equal 'NSCFArray',       '[1,2].class'
 assert_equal '2',               '[1,2].size'
-assert_equal '[1, 2]',           '[1,2].inspect'
-assert_equal 'Array',           '[1,2,3,4,5].class'
+assert_equal '[1, 2]',          '[1,2].inspect'
+assert_equal 'NSCFArray',       '[1,2,3,4,5].class'
 assert_equal '5',               '[1,2,3,4,5].size'
 assert_equal '[1, 2, 3, 4, 5]', '[1,2,3,4,5].inspect'
 assert_equal '1',               'a = [1,2]; a[0]'
 assert_equal '2',               'a = [1,2]; a[1]'
-assert_equal 'Array',           'a = [1 + 2, 3 + 4, 5 + 6]; a.class'
+assert_equal 'NSCFArray',       'a = [1 + 2, 3 + 4, 5 + 6]; a.class'
 assert_equal '[3, 7, 11]',      'a = [1 + 2, 3 + 4, 5 + 6]; a.inspect'
 assert_equal '7',               'a = [1 + 2, 3 + 4, 5 + 6]; a[1]'
 assert_equal '1',               '([0][0] += 1)'
 assert_equal '1',               '([2][0] -= 1)'
-assert_equal 'Array',           'a = [obj = Object.new]; a.class'
+assert_equal 'NSCFArray',       'a = [obj = Object.new]; a.class'
 assert_equal '1',               'a = [obj = Object.new]; a.size'
 assert_equal 'true',            'a = [obj = Object.new]; a[0] == obj'
 assert_equal '5',               'a = [1,2,3]; a[1] = 5; a[1]'
@@ -119,9 +119,9 @@
 
 
 # hash
-assert_equal 'Hash',            '{}.class'
+assert_equal 'NSCFDictionary',  '{}.class'
 assert_equal '{}',              '{}.inspect'
-assert_equal 'Hash',            '{1=>2}.class'
+assert_equal 'NSCFDictionary',  '{1=>2}.class'
 assert_equal '{1=>2}',          '{1=>2}.inspect'
 assert_equal '2',               'h = {1 => 2}; h[1]'
 assert_equal '0',               'h = {1 => 2}; h.delete(1); h.size'
@@ -166,7 +166,7 @@
 assert_equal 'a',               'r = ("a".."c"); r.begin'
 assert_equal 'c',               'r = ("a".."c"); r.end'
 
-assert_equal 'String',          '__FILE__.class'
+assert_equal 'NSCFString',      '__FILE__.class'
 assert_equal 'Fixnum',          '__LINE__.class'
 
 ###

Modified: MacRuby/trunk/bootstraptest/test_objectspace.rb
===================================================================
--- MacRuby/trunk/bootstraptest/test_objectspace.rb	2008-05-04 04:56:59 UTC (rev 187)
+++ MacRuby/trunk/bootstraptest/test_objectspace.rb	2008-05-05 21:13:55 UTC (rev 188)
@@ -8,6 +8,8 @@
     rescue RangeError
       next
     end
+    next if o.is_a?(Hash) # Some CF dictionaries cannot be inspected because 
+			  # they contain pointers to C raw data.
     o.inspect if defined?(o.inspect)
   }
 }, '[ruby-dev:31911]'

Modified: MacRuby/trunk/gc.c
===================================================================
--- MacRuby/trunk/gc.c	2008-05-04 04:56:59 UTC (rev 187)
+++ MacRuby/trunk/gc.c	2008-05-05 21:13:55 UTC (rev 188)
@@ -2067,6 +2067,20 @@
  */
 
 #if WITH_OBJC
+static bool
+rb_objc_is_placeholder(void *obj)
+{
+    static void *placeholder_dict = NULL;
+    static void *placeholder_ary = NULL;
+    void *obj_klass;
+    if (placeholder_dict == NULL)
+	placeholder_dict = objc_getClass("__NSPlaceholderDictionary");
+    if (placeholder_ary == NULL)
+	placeholder_ary = objc_getClass("__NSPlaceholderArray");
+    obj_klass = *(void **)obj;
+    return obj_klass == placeholder_dict || obj_klass == placeholder_ary;
+}
+
 struct rb_objc_recorder_context {
     VALUE class_of;
     int count;
@@ -2119,6 +2133,10 @@
 			continue;
 	    }
 	}
+	else {
+	    if (rb_objc_is_placeholder((void *)r->address))
+		continue;
+	}
 	rb_yield((VALUE)r->address);
 	ctx->count++;
     }	
@@ -2513,7 +2531,10 @@
     if (auto_zone_is_valid_pointer(auto_zone(), p0)) {
 	auto_memory_type_t type = 
 	    auto_zone_get_layout_type_no_lock(__auto_zone, p0);
-	if (type == AUTO_OBJECT_SCANNED || type == AUTO_OBJECT_UNSCANNED)
+	if ((type == AUTO_OBJECT_SCANNED || type == AUTO_OBJECT_UNSCANNED)
+	    && !rb_objc_is_placeholder(p0)
+	    && (rb_objc_is_non_native((VALUE)p0)
+		|| (BUILTIN_TYPE(p0) < T_VALUES && BUILTIN_TYPE(p0) != T_ICLASS)))
 	    return (VALUE)p0;
     }
     rb_raise(rb_eRangeError, "%p is not id value", p0);

Modified: MacRuby/trunk/object.c
===================================================================
--- MacRuby/trunk/object.c	2008-05-04 04:56:59 UTC (rev 187)
+++ MacRuby/trunk/object.c	2008-05-05 21:13:55 UTC (rev 188)
@@ -841,6 +841,10 @@
 VALUE
 rb_obj_frozen_p(VALUE obj)
 {
+    if (SPECIAL_CONST_P(obj)) {
+	if (!immediate_frozen_tbl) return Qfalse;
+	if (st_lookup(immediate_frozen_tbl, obj, 0)) return Qtrue;
+    }
 #if WITH_OBJC
     if (rb_objc_is_non_native(obj)) {
 	int type = TYPE(obj);
@@ -854,10 +858,6 @@
     }
 #endif
     if (OBJ_FROZEN(obj)) return Qtrue;
-    if (SPECIAL_CONST_P(obj)) {
-	if (!immediate_frozen_tbl) return Qfalse;
-	if (st_lookup(immediate_frozen_tbl, obj, 0)) return Qtrue;
-    }
     return Qfalse;
 }
 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080505/0b0fad0b/attachment-0001.html


More information about the macruby-changes mailing list