[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