Super w/ implicit arguments in Ruby 1.9

Hi--

Debugging a library for 1.9.1 compatibility. I get this error:

  6) Error:
  test_02_002(TC_Inheritor_02):
  RuntimeError: implicit argument passing of super from method defined
     by define_method() is not supported. Specify all arguments
explicitly.

The offending code is:

      define_method( key ) do
        defined?(super) ? super.__send__(op,obj) : obj.dup
      end

So I'm confused since I am not calling super without arguments, though
I am asking if it is defined. But #defined? works in a special way so
as not to actually invoke it's argument, right? Or is it something to
with __send__? What is amiss here?

Thanks.

read the line like the parser will:

   defined?(super) ? (super).__send__((op),(obj)) : (obj).dup

the object that gets __send__ is the return value of super. Can you try:
   defined?(super) ? super().__send__(op,obj) : obj.dup
so that the implicit args of super aren't an issue? (because you explicitly give an empty arg list)

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Nov 4, 2009, at 10:39 AM, Intransition wrote:

Hi--

Debugging a library for 1.9.1 compatibility. I get this error:

6) Error:
test_02_002(TC_Inheritor_02):
RuntimeError: implicit argument passing of super from method defined
    by define_method() is not supported. Specify all arguments
explicitly.

The offending code is:

     define_method( key ) do
       defined?(super) ? super.__send__(op,obj) : obj.dup
     end

So I'm confused since I am not calling super without arguments, though
I am asking if it is defined. But #defined? works in a special way so
as not to actually invoke it's argument, right? Or is it something to
with __send__? What is amiss here?

Thanks.

Doh. I should have seen that. Thank you for helping my poor little
overtaxed brain :wink:

Unfortunately now I get:

  3) Error:
test_02_002(TC_Inheritor_02):
NoMethodError: super: no superclass method `koko' for
TC_Inheritor_02::C:Class
    /mnt/repos/rubyworks/facets/lib/more/facets/inheritor.rb:70:in
`block (2 levels) in inheritor'
    /mnt/repos/rubyworks/facets/test/more/test_inheritor.rb:31:in
`test_02_002'

Does defined?(super) not work in 1.9? If so, how does one work around?

···

On Nov 4, 11:13 am, Rob Biedenharn <R...@AgileConsultingLLC.com> wrote:

read the line like the parser will:

defined?(super) ? (super).__send__((op),(obj)) : (obj).dup

the object that gets __send__ is the return value of super. Can you
try:
defined?(super) ? super().__send__(op,obj) : obj.dup
so that the implicit args of super aren't an issue? (because you
explicitly give an empty arg list)

No, it works. I checked. So it's something else.

Thanks for the help.

···

On Nov 4, 12:04 pm, Intransition <transf...@gmail.com> wrote:

On Nov 4, 11:13 am, Rob Biedenharn <R...@AgileConsultingLLC.com> > wrote:

> read the line like the parser will:

> defined?(super) ? (super).__send__((op),(obj)) : (obj).dup

> the object that gets __send__ is the return value of super. Can you
> try:
> defined?(super) ? super().__send__(op,obj) : obj.dup
> so that the implicit args of super aren't an issue? (because you
> explicitly give an empty arg list)

Doh. I should have seen that. Thank you for helping my poor little
overtaxed brain :wink:

Unfortunately now I get:

3) Error:
test_02_002(TC_Inheritor_02):
NoMethodError: super: no superclass method `koko' for
TC_Inheritor_02::C:Class
/mnt/repos/rubyworks/facets/lib/more/facets/inheritor.rb:70:in
`block (2 levels) in inheritor'
/mnt/repos/rubyworks/facets/test/more/test_inheritor.rb:31:in
`test_02_002'

Does defined?(super) not work in 1.9? If so, how does one work around?