Guilhem Lavaux wrote:
Ito Kazumitsu wrote:
Hi,
Hi Ito !
Interested in Prevayler (http://www.prevayler.org/), which is marked untested in our "Compatibility - Application Testing", I tried it.
The result was unsatisfactory. The simplest demo of Prevayler cannot run on kaffe. After studying the cause of the error, I found something buggy in java.io.ObjectInputStream.
My test program is attaced below. The test shows that a field that is marked "final" cannot be restored by java.io.ObjectInputStream#readObject.
This is linked to ObjectStreamField.java:67
toset = !Modifier.isFinal(field.getModifiers());
I guess it was placed there for a good reason but I don't remember which one. We have to check in the spec again.
The reason was quite evident... you can't set a final variable. It's rather someone sets (or doesn't set) A to the right value when it is initializing a new instance using readObject().
Cheers,
Guilhem.
Actually, the case is getting worse. I have made some more tests and it depends on the compiler you used to build the class files.
KJC or GCJ-3.3.1, executed by sun's VM: s1 is set by ObjectInputStream
Jikes or Sun's javac, executed by sun's VM: s1 is not set by ObjectInputStream, the final value is kept.
Also it seems ObjectInputStream is capable of setting final values. That is a bit annoying as java.lang.reflect.Field's spec says we absolutely cannot.
So there are two problems in one !
I'll give GCJ-CVS a try later and I will have to fix KJC bytecode generation also after all.
Cheers,
Guilhem.
_______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe
