[1.9] Rescuing a specific error throws up a Java Exception when $DEBUG is true ------------------------------------------------------------------------------
Key: JRUBY-5341 URL: http://jira.codehaus.org/browse/JRUBY-5341 Project: JRuby Issue Type: Bug Components: Ruby 1.9 Affects Versions: JRuby 1.6RC1 Reporter: Hiro Asari Assignee: Thomas E Enebo Priority: Critical Fix For: JRuby 1.6 Compare: {noformat} $ jruby --1.9 -e '$DEBUG=true; begin; require "Win32API"; rescue LoadError; end; p "bar"' /Users/asari/Development/src/jruby/lib/ruby/site_ruby/shared/Win32API.rb:2:in `(root)': can't convert LoadError into String (TypeError) from org/jruby/RubyKernel.java:1050:in `require19' from /Users/asari/Development/src/jruby/lib/ruby/site_ruby/shared/Win32API.rb:29:in `require' from -e:1:in `__file__' {noformat} with {noformat} $ jruby --1.9 -e 'begin; require "Win32API"; rescue LoadError; end; p "bar"' "bar" {noformat} and {noformat} $ jruby --1.9 -e '$DEBUG=true; begin; require "Win32API"; rescue; end; p "bar"' "bar" {noformat} The combination of {{$DEBUG}} being true and rescuing a {{LoadError}} (rather than a generic {{rescue}}) results in the Java exception being thrown out of the JRuby stack. There is nothing special about {{LoadError}}: {noformat} $ jruby --1.9 -e '$DEBUG=true; begin; raise RuntimeError; rescue RuntimeError; end; p "bar"' -e:1:in `__file__': can't convert RuntimeError into String (TypeError) {noformat} I set the priority to critical, because this has a profound consequence, where we can't turn on the debug mode in 1.9: {noformat} $ jruby --1.9 -d -v jruby 1.6.0.RC1 (ruby 1.9.2 patchlevel 136) (2011-01-12 75ced7c) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_22) [darwin-x86_64-java] org.jruby.exceptions.RaiseException: (TypeError) can't convert LoadError into String at #<Class:0x125a41cc7>.(root)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/shared/Win32API.rb:2) at org.jruby.RubyKernel.require19(org/jruby/RubyKernel.java:1050) at #<Class:0x11b0952e8>.(class ConfigFile)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/shared/Win32API.rb:50) at #<Class:0x125a41cc7>.(root)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/1.8/rubygems/config_file.rb:28) at org.jruby.RubyKernel.require19(org/jruby/RubyKernel.java:1050) at #<Class:0x125a41cc7>.(root)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/1.8/rubygems/config_file.rb:1) at org.jruby.RubyKernel.require19(org/jruby/RubyKernel.java:1050) at #<Class:0x125a41cc7>.(root)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/1.8/rubygems/defaults/jruby.rb:1180) at org.jruby.RubyKernel.require19(org/jruby/RubyKernel.java:1050) at #<Class:0x125a41cc7>.(root)(/Users/asari/Development/src/jruby/lib/ruby/site_ruby/1.8/rubygems.rb:11) {noformat} {noformat} $ jruby -J-Djruby.backtrace.style=raw -J-Djruby.debug.fullTrace=true --1.9 -d -v jruby 1.6.0.RC1 (ruby 1.9.2 patchlevel 136) (2011-01-12 75ced7c) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_22) [darwin-x86_64-java] org.jruby.exceptions.RaiseException: (TypeError) can't convert LoadError into String at java.lang.Thread.getStackTrace(Thread.java:1503) at org.jruby.RubyException.prepareBacktrace(RubyException.java:154) at org.jruby.exceptions.RaiseException.preRaise(RaiseException.java:156) at org.jruby.Ruby.newRaiseException(Ruby.java:3432) at org.jruby.Ruby.newTypeError(Ruby.java:3249) at org.jruby.util.TypeConverter.handleUncoercibleObject(TypeConverter.java:243) at org.jruby.util.TypeConverter.convertToType(TypeConverter.java:66) at org.jruby.util.TypeConverter.convertToType(TypeConverter.java:117) at org.jruby.RubyBasicObject.convertToString(RubyBasicObject.java:726) at org.jruby.RubyKernel.printExceptionSummary(RubyKernel.java:1024) at org.jruby.RubyKernel.raise(RubyKernel.java:998) at org.jruby.RubyKernel$s_method_0_3$RUBYINVOKER$raise_DBG.call(org/jruby/RubyKernel$s_method_0_3$RUBYINVOKER$raise_DBG.gen:65535) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:204) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:139) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.IfNode.interpret(IfNode.java:119) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:115) at org.jruby.Ruby.runInterpreter(Ruby.java:729) at org.jruby.Ruby.loadFile(Ruby.java:2609) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:748) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:332) at org.jruby.runtime.load.LoadService.require(LoadService.java:379) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:304) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1058) at org.jruby.RubyKernel.require19(RubyKernel.java:1050) at org.jruby.RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.call(org/jruby/RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:139) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_CLASS(ASTInterpreter.java:99) at org.jruby.evaluator.ASTInterpreter.evalClassDefinitionBody(ASTInterpreter.java:232) at org.jruby.ast.ClassNode.interpret(ClassNode.java:138) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:115) at org.jruby.Ruby.runInterpreter(Ruby.java:729) at org.jruby.Ruby.loadFile(Ruby.java:2609) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:748) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:332) at org.jruby.runtime.load.LoadService.require(LoadService.java:379) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:304) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1058) at org.jruby.RubyKernel.require19(RubyKernel.java:1050) at org.jruby.RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.call(org/jruby/RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:139) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:115) at org.jruby.Ruby.runInterpreter(Ruby.java:729) at org.jruby.Ruby.loadFile(Ruby.java:2609) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:748) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:332) at org.jruby.runtime.load.LoadService.require(LoadService.java:379) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:304) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1058) at org.jruby.RubyKernel.require19(RubyKernel.java:1050) at org.jruby.RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.call(org/jruby/RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:139) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.IfNode.interpret(IfNode.java:117) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:115) at org.jruby.Ruby.runInterpreter(Ruby.java:729) at org.jruby.Ruby.loadFile(Ruby.java:2609) at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:66) at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:748) at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:332) at org.jruby.runtime.load.LoadService.require(LoadService.java:379) at org.jruby.runtime.load.LoadService.lockAndRequire(LoadService.java:304) at org.jruby.RubyKernel.requireCommon(RubyKernel.java:1058) at org.jruby.RubyKernel.require19(RubyKernel.java:1050) at org.jruby.RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.call(org/jruby/RubyKernel$s_method_1_0$RUBYINVOKER$require19_DBG.gen:65535) at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:319) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:139) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:103) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_ROOT(ASTInterpreter.java:115) at org.jruby.Ruby.runInterpreter(Ruby.java:729) at org.jruby.Ruby.loadFile(Ruby.java:2609) at org.jruby.Ruby.initBuiltins(Ruby.java:1546) at org.jruby.Ruby.init(Ruby.java:1107) at org.jruby.Ruby.newInstance(Ruby.java:180) at org.jruby.Main.run(Main.java:234) at org.jruby.Main.run(Main.java:144) at org.jruby.Main.main(Main.java:113) {noformat} -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - 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