This is the mail archive of the
kawa@sourceware.org
mailing list for the Kawa project.
Question regarding dynamic jar loading
- From: "Croteau, Beau" <Beau dot Croteau at ca dot com>
- To: <kawa at sources dot redhat dot com>
- Date: Mon, 22 Sep 2008 19:50:19 -0400
- Subject: Question regarding dynamic jar loading
- References: <011D3B26E6B93C438DB3A057D0DD87D59DCD0E30@USILMS12.ca.com>
I have the following sample code:
(define (load-jar jar)
? (display jar)
? (newline)
? (try-catch
?? (let*
??? ((sysLoader (java.lang.ClassLoader:getSystemClassLoader))
????? (urls (java.net.URLClassLoader:getURLs sysLoader))
????? (u (java.io.File:toURL (java.io.File:new jar)))
????? (sysclass (java.net.URLClassLoader:.class))
????? (method
??????? (java.lang.Class:getDeclaredMethod sysclass
????????? "addURL" (make <java.lang.Class[]> length: 1 (java.net.URL:.class)))))
??? (java.lang.reflect.AccessibleObject:setAccessible method #t)
??? (java.lang.reflect.Method:invoke method sysLoader (make <java.lang.Object[]> length: 1 u))
??? #t)
?? (ex <java.lang.Exception>
??????? "Exception Caught")))
(load-jar "test.jar")
(define a (test.Test:new 10))
(display (test.Test:test2 a))
(display (test.Test:test1))
This code works against the 1.9.1 build from source.
But, when I attempt to run against HEAD of trunk (after building) I get the following error:
test-kawa.scm:15:5: internal compile error - caught java.lang.Error: popType called with empty stack atInteractiveLevel$1.loadJar(java.lang.Object)java.lang.Object
??? gnu.bytecode.CodeAttr.popType(CodeAttr.java:320)
??? gnu.bytecode.CodeAttr.emitInvokeMethod(CodeAttr.java:1321)
??? gnu.expr.PrimProcedure.compileInvoke(PrimProcedure.java:543)
??? gnu.expr.PrimProcedure.compile(PrimProcedure.java:525)
??? gnu.expr.PrimProcedure.compile(PrimProcedure.java:494)
??? gnu.expr.ApplyExp.compile(ApplyExp.java:171)
??? gnu.expr.ApplyExp.compile(ApplyExp.java:110)
??? gnu.expr.Expression.compileWithPosition(Expression.java:131)
??? gnu.expr.BeginExp.compile(BeginExp.java:142)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.LetExp.compile(LetExp.java:190)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.LetExp.compile(LetExp.java:190)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.LetExp.compile(LetExp.java:190)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.LetExp.compile(LetExp.java:190)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.LetExp.compile(LetExp.java:190)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:128)
??? gnu.expr.TryExp.compile(TryExp.java:71)
??? gnu.expr.Expression.compileWithPosition(Expression.java:131)
??? gnu.expr.BeginExp.compile(BeginExp.java:143)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:143)
??? gnu.expr.LambdaExp.compileBody(LambdaExp.java:1597)
??? gnu.expr.LambdaExp.compileAsMethod(LambdaExp.java:1574)
??? gnu.expr.LambdaExp.compileSetField(LambdaExp.java:639)
??? gnu.expr.SetExp.compile(SetExp.java:170)
??? gnu.expr.Expression.compileNotePosition(Expression.java:157)
??? gnu.expr.Expression.compileWithPosition(Expression.java:143)
??? gnu.expr.LambdaExp.compileBody(LambdaExp.java:1597)
??? gnu.expr.Compilation.generateBytecode(Compilation.java:2010)
??? gnu.expr.Compilation.process(Compilation.java:1884)
??? gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:315)
??? gnu.expr.ModuleExp.evalToClass(ModuleExp.java:73)
??? gnu.expr.ModuleExp.evalModule(ModuleExp.java:228)
??? kawa.Shell.run(Shell.java:275)
??? kawa.standard.load.loadSource(load.java:115)
??? kawa.standard.load.apply(load.java:236)
?? ?kawa.standard.load.apply(load.java:179)
??? kawa.Shell.runFile(Shell.java:357)
??? kawa.repl.main(repl.java:863)
Somewhere between revisions 6066 and 6139 it seems to go awry.? Anybody have any ideas?
From,
Beau Croteau
Beau.croteau@ca.com