Revision: 1519 http://trac.macosforge.org/projects/ruby/changeset/1519 Author: lsansonetti@apple.com Date: 2009-05-02 21:09:05 -0700 (Sat, 02 May 2009) Log Message: ----------- when loading a BS structure which has the same type as a previously-loaded BS structure, let's create an alias under the new name to the previously-loaded class Modified Paths: -------------- MacRuby/branches/experimental/roxor.cpp MacRuby/branches/experimental/spec/macruby/spec_helper.rb MacRuby/branches/experimental/spec/macruby/struct_spec.rb Modified: MacRuby/branches/experimental/roxor.cpp =================================================================== --- MacRuby/branches/experimental/roxor.cpp 2009-05-03 03:05:49 UTC (rev 1518) +++ MacRuby/branches/experimental/roxor.cpp 2009-05-03 04:09:05 UTC (rev 1519) @@ -9320,6 +9320,11 @@ GET_VM()->bs_boxed.find(octype); if (iter != GET_VM()->bs_boxed.end()) { + // A boxed class of this type already exists, so let's create an + // alias to it. + rb_vm_bs_boxed_t *boxed = iter->second; + const ID name = rb_intern(((bs_element_opaque_t *)value)->name); + rb_const_set(rb_cObject, name, boxed->klass); return false; } Modified: MacRuby/branches/experimental/spec/macruby/spec_helper.rb =================================================================== --- MacRuby/branches/experimental/spec/macruby/spec_helper.rb 2009-05-03 03:05:49 UTC (rev 1518) +++ MacRuby/branches/experimental/spec/macruby/spec_helper.rb 2009-05-03 04:09:05 UTC (rev 1519) @@ -1,4 +1,4 @@ -framework 'Foundation' +framework 'Cocoa' SPEC_ROOT = File.dirname(__FILE__) FIXTURES = File.join(SPEC_ROOT, "fixtures") Modified: MacRuby/branches/experimental/spec/macruby/struct_spec.rb =================================================================== --- MacRuby/branches/experimental/spec/macruby/struct_spec.rb 2009-05-03 03:05:49 UTC (rev 1518) +++ MacRuby/branches/experimental/spec/macruby/struct_spec.rb 2009-05-03 04:09:05 UTC (rev 1519) @@ -145,20 +145,20 @@ it "has a nice #inspect message that lists the fields" do p = NSPoint.new - p.inspect.should == "#<NSPoint x=0.0 y=0.0>" + p.inspect.should == "#<CGPoint x=0.0 y=0.0>" p.x = 1 p.y = 2 - p.inspect.should == "#<NSPoint x=1.0 y=2.0>" + p.inspect.should == "#<CGPoint x=1.0 y=2.0>" s = NSSize.new(3, 4) - s.inspect.should == "#<NSSize width=3.0 height=4.0>" + s.inspect.should == "#<CGSize width=3.0 height=4.0>" r = NSRect.new - r.inspect.should == "#<NSRect origin=#<NSPoint x=0.0 y=0.0> size=#<NSSize width=0.0 height=0.0>>" + r.inspect.should == "#<CGRect origin=#<CGPoint x=0.0 y=0.0> size=#<CGSize width=0.0 height=0.0>>" r.origin = p - r.inspect.should == "#<NSRect origin=#<NSPoint x=1.0 y=2.0> size=#<NSSize width=0.0 height=0.0>>" + r.inspect.should == "#<CGRect origin=#<CGPoint x=1.0 y=2.0> size=#<CGSize width=0.0 height=0.0>>" r.size = s - r.inspect.should == "#<NSRect origin=#<NSPoint x=1.0 y=2.0> size=#<NSSize width=3.0 height=4.0>>" + r.inspect.should == "#<CGRect origin=#<CGPoint x=1.0 y=2.0> size=#<CGSize width=3.0 height=4.0>>" end it "can be duplicated using #dup or #clone" do @@ -203,4 +203,13 @@ NSRect.type.should == '{_NSRect={_NSPoint=ff}{_NSSize=ff}}' end end + + it "defined after a structure which has the same type is an alias to the other structure class" do + NSPoint.should == CGPoint + NSSize.should == CGSize + NSRect.should == CGRect + NSPoint.object_id.should == CGPoint.object_id + NSSize.object_id.should == CGSize.object_id + NSRect.object_id.should == CGRect.object_id + end end