History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: JANINO-69
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Arno Unkrig
Reporter: John V Sichi
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
Janino

Unable to resolve reference to var name from within catch block of anon inner class

Created: 11/Oct/06 11:40 PM   Updated: 06/Nov/06 04:14 PM
Component/s: None
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments: 1. Java Source File Test.java (0.7 kb)
2. Java Source File UnitCompiler.java (377 kb)

Environment: 2.5.0

Testcase included: yes


 Description  « Hide
I'll attach testcase. This used to work way back in 2.3.18, the version I am attempting to upgrade from. Other blocks such as finally are OK.

 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
John V Sichi - 11/Oct/06 11:42 PM
Output (note javac is happy with it):

jvs@bagheera:~/tmp/janino-2.5.0$ java -classpath lib/janino.jar org.codehaus.janino.SimpleCompiler Test.java Test
Exception in thread "main" org.codehaus.janino.CompileException: File Test.java, Line 19, Column 31: Unknown variable or type "test"
at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$81(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$13.visitPackage(UnitCompiler.java)
at org.codehaus.janino.Java$Package.accept(Java.java)
at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$107(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$13.visitAmbiguousName(UnitCompiler.java)
at org.codehaus.janino.Java$AmbiguousName.accept(Java.java)
at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$46(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$7.visitMethodInvocation(UnitCompiler.java)
at org.codehaus.janino.Java$MethodInvocation.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$14(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitThrowStatement(UnitCompiler.java)
at org.codehaus.janino.Java$ThrowStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$8(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitTryStatement(UnitCompiler.java)
at org.codehaus.janino.Java$TryStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$1.visitAnonymousClassDeclaration(UnitCompiler.java)
at org.codehaus.janino.Java$AnonymousClassDeclaration.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$49(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$7.visitNewAnonymousClassInstance(UnitCompiler.java)
at org.codehaus.janino.Java$NewAnonymousClassInstance.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$13(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitReturnStatement(UnitCompiler.java)
at org.codehaus.janino.Java$ReturnStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$1.visitPackageMemberClassDeclaration(UnitCompiler.java)
at org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java)
at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java)
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.SimpleCompiler.<init>(SimpleCompiler.java)
at org.codehaus.janino.SimpleCompiler.main(SimpleCompiler.java)


John V Sichi - 12/Oct/06 06:15 AM
I found the problem. Here's a modified version of UnitCompiler.java (modified from the 2.5.0 codebase) which fixes it for my testcase; I'm going to run it through the full Farrago regression suite now.

John V Sichi - 12/Oct/06 06:18 AM
Problem is that some walking-up-the-tree code is doing instanceof Java.BlockStatement where it should also be checking for Java.CatchClause. Some places were already checking for both. I added a method isBlocky and replaced the remaining ones, and that seems to fix it. Probably there are more to be fixed.

Arno Unkrig - 06/Nov/06 04:14 PM
Fixed in 2.5.1, published NOW.