Projects

Ticket #63 (closed defect: fixed)

Opened 4 years ago

Last modified 3 years ago

-objectEnumerator troubles

Reported by: z@… Owned by: lsansonetti@…
Priority: major Milestone: MacRuby 0.3
Component: MacRuby Keywords:
Cc:

Description

(Revision 218) Forgive the unintelligent short summary--not really sure how to describe what's going on. e.class.name is empty, but e.className has a value. Also, e.nextObject fails.

irb(main):001:0> a = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> a.class.name
=> "NSCFArray"
irb(main):003:0> e = a.objectEnumerator
=> #<#<Class:0x1af5030>:0x1aed820>
irb(main):004:0> e.class.name
=> nil
irb(main):005:0> e.className
=> "__NSFastEnumerationEnumerator"
irb(main):006:0> e.respond_to?( :nextObject )
=> false
irb(main):007:0> e.respondsToSelector( 'nextObject' )
=> 1
irb(main):008:0> e.nextObject
(irb):8: [BUG] Bus Error
MacRuby version 0.2 (ruby 1.9.0 2008-05-17) [universal-darwin9.0]

-- control frame ----------
c:0024 p:---- s:0073 b:0073 l:000072 d:000072 CFUNC  :nextObject
c:0023 p:0009 s:0070 b:0070 l:001444 d:000069 EVAL   (irb):8
c:0022 p:---- s:0069 b:0069 l:000068 d:000068 FINISH :empty?
c:0021 p:---- s:0067 b:0067 l:000066 d:000066 CFUNC  :eval
c:0020 p:0023 s:0060 b:0060 l:000059 d:000059 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80
c:0019 p:0025 s:0053 b:0052 l:000051 d:000051 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/context.rb:218
c:0018 p:0024 s:0047 b:0047 l:002604 d:000046 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:149
c:0017 p:0025 s:0040 b:0040 l:000039 d:000039 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:263
c:0016 p:0009 s:0035 b:0035 l:002604 d:000034 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:146
c:0015 p:0093 s:0032 b:0032 l:000021 d:000031 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:243
c:0014 p:---- s:0032 b:0032 l:000031 d:000031 FINISH :block_given?
c:0013 p:---- s:0030 b:0030 l:000029 d:000029 CFUNC  :loop
c:0012 p:0007 s:0027 b:0027 l:000021 d:000026 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230
c:0011 p:---- s:0028 b:0028 l:000027 d:000027 FINISH :each
c:0010 p:---- s:0026 b:0026 l:000025 d:000025 CFUNC  :catch
c:0009 p:0017 s:0022 b:0022 l:000021 d:000021 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229
c:0008 p:0034 s:0019 b:0019 l:002604 d:002604 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:145
c:0007 p:0009 s:0016 b:0016 l:00250c d:000015 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:69
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH :(null)
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC  :catch
c:0004 p:0152 s:0011 b:0011 l:00250c d:00250c METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68
c:0003 p:0033 s:0006 b:0006 l:000005 d:000005 TOP    /usr/local/bin/macirb:12
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH :inherited
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP    
---------------------------
DBG> : "(irb):8:in `irb_binding'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80:in `eval'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80:in `evaluate'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/context.rb:218:in `evaluate'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:149:in `block (2 levels) in eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:263:in `signal_status'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:146:in `block in eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `loop'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `block in each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229:in `catch'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229:in `each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:145:in `eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:69:in `block in start'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68:in `catch'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68:in `start'"
DBG> : "/usr/local/bin/macirb:12:in `<main>'"
-- backtrace of native function call (Use addr2line) --
0x2d6216
0x1fefdc
0x1ff01b
0x29554b
0x94b0b5eb
0xffffffff
0x2df917
0x2dfc70
0x2e2322
0x2d44d0
0x2d43f7
0x2cd899
0x2d3a81
0x2074a7
0x20793e
0x2c5be5
0x2d44d0
0x2cd899
0x2d3a81
0x20306a
0x203129
0x203287
0x2d44d0
0x2cd899
0x2d3a81
0x204f7a
0x2c5be5
0x2d44d0
0x2cd899
0x2d3a81
0x204f7a
0x2c5be5
0x2d44d0
0x2cd899
0x2d3a81
0x2d3c51
0x202d39
0x2089a0
0x1fdf
0x1f46
-------------------------------------------------------
Abort trap

Attachments

macruby_2008-05-25-193629_annyong.crash Download (9.5 KB) - added by z@… 4 years ago.
Crash Log

Change History

Changed 4 years ago by z@…

Crash Log

Changed 4 years ago by lsansonetti@…

  • milestone set to MacRuby 1.0

Interesting problem. Hopefully this isn't critical, because #each is working.

Changed 4 years ago by z@…

It's not critical, if the object has #each. However, DOMNodeList doesn't. I am trying to implement #each using the enumerator, but I can't.

annyong:trunk wzph$ macirb
irb(main):001:0> framework 'cocoa' ; framework 'webkit'
=> true
irb(main):002:0> DOMNodeList.ancestors
=> [DOMNodeList, DOMObject, WebScriptObject, Object, NSObject, Kernel]

Changed 4 years ago by lsansonetti@…

It crashes because the array contains fixnums (which are not converted to NSNumber objects yet).

$ macirb
>> a=['foo','bar']
=> ["foo", "bar"]
>> e=a.objectEnumerator
=> #<#<Class:0x34155e0>:0x32fc8e0>
>> e.nextObject
=> "foo"
>> e.nextObject
=> "bar"
>> e.nextObject
=> nil

The objectEnumerator class is still a mystery.

Changed 3 years ago by lsansonetti@…

With trunk as of r465, it seems to work better (no crash! real class name!), but it's still not yielding the right objects yet.

$ macirb
>> a=[1,2,3]
=> [1, 2, 3]
>> a.objectEnumerator
=> #<__NSFastEnumerationEnumerator:0x2e7ef80>
>> e = a.objectEnumerator
=> #<__NSFastEnumerationEnumerator:0x28f6d50>
>> e.nextObject
=> 109967364
>> e.nextObject
=> 109967368
>> e.nextObject
=> 109967372
>> e.nextObject
=> nil
>> 

Changed 3 years ago by lsansonetti@…

  • status changed from new to closed
  • resolution set to fixed
  • milestone changed from MacRuby 1.0 to MacRuby 0.3

Fixed in trunk/r472.

$ cat /tmp/t.rb 
a=[1,2,3,4,5]
e = a.objectEnumerator
while o = e.nextObject
  p o
end

$ macruby /tmp/t.rb 
1
2
3
4
5
$ 
Note: See TracTickets for help on using tickets.