Revision: 188 http://trac.macosforge.org/projects/ruby/changeset/188 Author: lsansonetti@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; }
participants (1)
-
source_changes@macosforge.org