strange behavior of anonymous class inside a proc
I have a problem in 1.9.1 when I run this code, extracted from a larger project:
@first or fail
def subseq @first or fail end
Overlaid =proc do
The output I get is like this:
subseq_first_nil.rb:10: warning: instance variable @first not initialized
subseq': unhandled exception from subseq_first_nil.rb:24:in subseq'
from subseq_first_nil.rb:33:in `'
This code should run without raising an exception, and does in ruby 1.8. The exception is raised from within the last line, the second call to mid.subseq. Both mid.subseq calls should behave exactly the same. The first appears to do all the right things. But in the second, it goes all awry. They should both call first the anonymous class's #subseq, then (via the super) Indexed#subseq, which ultimately returns a SubSeq object, also decorated by the anonymous class. SubSeq#subseq itself should never be called, but somehow (given the top line of the exception traceback and the warning) it is. SubSeq's @first should never be nil, since it is initialized in the constructor and never changed, but somehow it is.
This is the last remaining (serious) problem in porting redparse to 1.9. It causes redparse to incorrectly handle certain here documents which work fine when run in 1.8. I'd appreciate it very much of this problem can be fixed.
I've observed this in 1.9.1, but not 1.9.2.