This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
module-export vs. define-simple-class
- From: Chris Dean <Chris dot Dean at sokitomi dot com>
- To: Kawa List <kawa at sources dot redhat dot com>
- Date: Wed, 02 Jul 2003 16:01:05 -0700
- Subject: module-export vs. define-simple-class
The define-simple-class in the code below produces an invalid .class
file. If you module-export the class (or remove module-export
entirely), everything is fine.
One way to see that the class is invalid is to run jode on it:
unix% jode BrokenClass
Jode (c) 1998-2001 Jochen Hoenicke <jochen@gnu.org>
BrokenClass
locals:[0:LBrokenClass;,1:?], stack:[]
0_2c84d9: aload 1
1_c5c3ac: getstatic Ljava/lang/Boolean; FALSE Ljava/lang/Boolean;
4_1b16e52: if_acmpeq 11
7_1c1ea29: aload 1
8_1f436f5: goto 15
11_4413ee: aload 0
12_1786e64: getfield LBrokenClass; var2 Ljava/lang/Object;
15_197a37c: areturn
jode.jvm.VerifyException: 0_2c84d9: aload 1
at jode.jvm.CodeVerifier.modelEffect(CodeVerifier.java:517)
at jode.jvm.CodeVerifier.doVerify(CodeVerifier.java:1033)
at jode.jvm.CodeVerifier.verify(CodeVerifier.java:1102)
at jode.decompiler.MethodAnalyzer.analyze(MethodAnalyzer.java:610)
at jode.decompiler.ClassAnalyzer.analyze(ClassAnalyzer.java:359)
at jode.decompiler.ClassAnalyzer.dumpJavaFile(ClassAnalyzer.java:624)
at jode.decompiler.ClassAnalyzer.dumpJavaFile(ClassAnalyzer.java:613)
at jode.decompiler.Main.decompileClass(Main.java:184)
at jode.decompiler.Main.decompile(Main.java:376)
at jode.decompiler.Main.main(Main.java:203)
jode.AssertError: Verification error
at jode.decompiler.MethodAnalyzer.analyze(MethodAnalyzer.java:613)
at jode.decompiler.ClassAnalyzer.analyze(ClassAnalyzer.java:359)
at jode.decompiler.ClassAnalyzer.dumpJavaFile(ClassAnalyzer.java:624)
at jode.decompiler.ClassAnalyzer.dumpJavaFile(ClassAnalyzer.java:613)
at jode.decompiler.Main.decompileClass(Main.java:184)
at jode.decompiler.Main.decompile(Main.java:376)
at jode.decompiler.Main.main(Main.java:203)
Regards,
Chris Dean
(module-static #t)
(module-name <BrokenClassSupport>)
(module-export func)
; (module-export <BrokenClass>)
(define (func)
'no-op)
(define-simple-class <BrokenClass> ()
(var)
(var2)
((method)
(or var var2)))