[macruby-changes] [3660] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Sun Feb 28 06:53:21 PST 2010


Revision: 3660
          http://trac.macosforge.org/projects/ruby/changeset/3660
Author:   eloy.de.enige at gmail.com
Date:     2010-02-28 06:53:20 -0800 (Sun, 28 Feb 2010)
Log Message:
-----------
Delegate #copyWithZone to #dup, as we don't do anything with the zone yet.

Modified Paths:
--------------
    MacRuby/trunk/class.c
    MacRuby/trunk/spec/macruby/core/object_spec.rb

Modified: MacRuby/trunk/class.c
===================================================================
--- MacRuby/trunk/class.c	2010-02-28 14:53:09 UTC (rev 3659)
+++ MacRuby/trunk/class.c	2010-02-28 14:53:20 UTC (rev 3660)
@@ -67,15 +67,13 @@
     return (void *)rb_robject_allocate_instance((VALUE)rcv);
 }
 
-VALUE rb_obj_init_copy(VALUE, SEL, VALUE);
-
 static void *
 rb_obj_imp_copyWithZone(void *rcv, SEL sel, void *zone)
 {
     // XXX honor zone?
-    VALUE copy = rb_robject_allocate_instance(CLASS_OF(rcv));
-    rb_obj_init_copy(copy, 0, (VALUE)rcv);
-    return (void *)copy;
+    // for now let rb_obj_dup allocate an instance, since we don't honor the
+    // zone yet anyways
+    return (void *)rb_obj_dup((VALUE)rcv);
 }
 
 static BOOL
@@ -129,6 +127,8 @@
     return rb_class_real(cl);
 }
 
+VALUE rb_obj_init_copy(VALUE, SEL, VALUE);
+
 void
 rb_define_object_special_methods(VALUE klass)
 {

Modified: MacRuby/trunk/spec/macruby/core/object_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/object_spec.rb	2010-02-28 14:53:09 UTC (rev 3659)
+++ MacRuby/trunk/spec/macruby/core/object_spec.rb	2010-02-28 14:53:20 UTC (rev 3660)
@@ -1,7 +1,8 @@
 require File.dirname(__FILE__) + "/../spec_helper"
+require File.expand_path('../../../frozen/core/object/shared/dup_clone', __FILE__)
+
 FixtureCompiler.require! "object"
 TestObject # force dynamic load
-
 require File.join(FIXTURES, 'object')
 
 describe "A pure MacRuby Class" do
@@ -25,3 +26,29 @@
     o.initialized?.should == true
   end
 end
+
+# Atm we don't actually do anything with the given zone, so the current
+# implementation behaves exactly like #dup. Hence, we can reuse the existing
+# rubyspec specs for Object#dup.
+#
+# But since #dup does not take an argument, we stub the spec classes to call
+# #copyWithZone from a method that doesn't take an argument either.
+module ObjectSpecCopyWithZone
+  def copyWithZoneWithoutActualZone
+    copyWithZone(nil)
+  end
+end
+ObjectSpecDup.send(:include, ObjectSpecCopyWithZone)
+ObjectSpecDupInitCopy.send(:include, ObjectSpecCopyWithZone)
+
+describe "Object#copyWithZone:" do
+  it_behaves_like :object_dup_clone, :copyWithZoneWithoutActualZone
+
+  it "does not preserve frozen state from the original" do
+    o = ObjectSpecDupInitCopy.new
+    o.freeze
+    o2 = o.copyWithZone(nil)
+
+    o2.frozen?.should == false
+  end
+end
\ No newline at end of file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100228/cfb84fec/attachment-0001.html>


More information about the macruby-changes mailing list