$! is not set to nil in an ensure block where no exception is raised
--------------------------------------------------------------------

                 Key: JRUBY-5986
                 URL: https://jira.codehaus.org/browse/JRUBY-5986
             Project: JRuby
          Issue Type: Bug
    Affects Versions: JRuby 1.6.3
         Environment: jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java 
HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
            Reporter: Lin Jen-Shin
            Assignee: Thomas E Enebo


I am sorry that I cannot reproduce this in a simple way, I'll try to describe 
it briefly while show you how to reproduce it with full codes.

I have a code something like this, I don't want to do something if and only if 
a SyntaxError exception was raised. I put this in an ensure block, and check 
against $!

  def loop_eval input
    super
  ensure
    # SyntaxError might mean we're multiline editing
    handle_multiline unless $!.kind_of?(SyntaxError)
  end

This works correctly if I am only running the first part of the test, or the 
last part of the test. BUT if I run all two parts, the last test case would 
fail, it seems there's no exception was raised, but $! was still pointing to 
previous SyntaxError exception.

If you need to run full code to reproduce this, clone my repository and run 
with this command:

  jruby -rubygems -I lib test/more/test_multiline_history.rb

Here's the repository: https://github.com/godfat/rib
Here's the ensure block: 
https://github.com/godfat/rib/blob/66d17d7e9935d835cf485e1833ff9efc3374b11b/lib/rib/more/multiline_history.rb#L15-21
Here's the test case: 
https://github.com/godfat/rib/blob/66d17d7e9935d835cf485e1833ff9efc3374b11b/lib/rib/test/multiline.rb#L115-119
Here's the definition of check: 
https://github.com/godfat/rib/blob/66d17d7e9935d835cf485e1833ff9efc3374b11b/test/more/test_multiline_history.rb#L9-18

By the first part of the test, I mean a call to:

    with_history(str)

If only with_history(str) is tested, it's fine. If only with_history(str, 'old 
history') is tested, then it's fine too. But if both of them are running, as it 
is now, the last check would fail.

P.S. Rubinius suffers this even more. MRI 1.8.7 and 1.9.2 works correctly.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to