[MacRuby-devel] MacRuby not finding a method that Ruby is

Laurent Sansonetti lsansonetti at apple.com
Wed Oct 7 21:21:07 PDT 2009


We fixed a few 32-bit issues in trunk so you may want to give it a try  
one more time.

At least we are not maintaining 0.4 anymore, so it would be great if  
you could try your code with trunk and let us know if the bug is still  
there. Then we can try to reduce it and fix it :)

Laurent

On Oct 7, 2009, at 9:16 PM, Edward Hynes wrote:

> I'm still on a 32-bit machine, so can't try 0.5 yet :^(
>
> I did manage to find a workaround, however, by creating an alias for  
> the 'initialize' method and then calling it instead of 'super'  
> inside of the 'define_method' call.
>
> Ed
>
> On Oct 7, 2009, at 10:51 PM, Matt Aimonetti wrote:
>
>> you might want to try your luck with 0.5
>>
>> - Matt
>>
>> On Wed, Oct 7, 2009 at 7:37 PM, Edward Hynes <mred at dharmagaia.com>  
>> wrote:
>> Hi,
>>
>> I'm attempting to use the RParsec gem under MacRuby, but am getting  
>> a NoMethodError when it loads.  I've create a test file that simply  
>> adds my local gem directory to the front of the library search path  
>> and then calls "require 'rparsec'".  This file runs fine under Ruby  
>> 1.9, but produces the following error when called from MacRuby 0.4.
>>
>> /Users/ehynes/Test/Gems/rparsec/parser.rb:32:in `block in init':  
>> super: no superclass method `initialize:' for  
>> RParsec::ValueParser:RParsec::ValueParser (NoMethodError)
>>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:621:in `new'
>>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:621:in  
>> `<module:RParsec>'
>>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:3:in `<top  
>> (required)>'
>>        from /Users/ehynes/Test/Gems/rparsec.rb:3:in `require'
>>        from /Users/ehynes/Test/Gems/rparsec.rb:3:in `block in <top  
>> (required)>'
>>        from /Users/ehynes/Test/Gems/rparsec.rb:2:in `each'
>>        from /Users/ehynes/Test/Gems/rparsec.rb:2:in `<top (required) 
>> >'
>>        from AbcParser.rb:2:in `require'
>>        from AbcParser.rb:2:in `<main>'
>>
>>
>> The method with the error in the Parser class is:
>>
>>  def self.init(*vars)
>>    parser_checker = {}
>>    vars.each_with_index do |var, i|
>>      name = var.to_s
>>      parser_checker[i] = var if name.include?('parser') && ! 
>> name.include?('parsers')
>>    end
>>    define_method(:initialize) do |*params|
>> --->  super()   # <--- line 32
>>      vars.each_with_index do |var, i|
>>        param = params[i]
>>        if parser_checker.include? i
>>          TypeChecker.check_arg_type Parser, param, self, i
>>        end
>>        instance_variable_set("@"+var.to_s, param)
>>      end
>>    end
>>  end
>>
>>
>> Any ideas as to why Ruby can call super in the above method, but  
>> MacRuby can't?  Is there a fix or workaround that I could use?  An  
>> alternate parser?
>>
>> Thanks,
>> Ed
>>
>>
>> P.S.  I did have to change one line in the RParsec parser.rb file  
>> to get it to run under Ruby 1.9, replacing a ':' with a 'then' in a  
>> case statement.
>>
>>        $ diff parser_original.rb parser.rb
>>        881c881
>>        <     case c when String: c[0] else c end
>>        ---
>>        >     case c when String then c[0] else c end  # ':'  
>> replaced with 'then'
>>
>>
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> -- 
> Edward Hynes
> Dharma Gaia LLC
> "Software with the Earth in Mind"
> http://dharmagaia.com
>
>
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel



More information about the MacRuby-devel mailing list