[kaffe] CVS kaffe (guilhem): More (and hopefully final) fixes for access.
Kaffe CVS
cvs-commits at kaffe.org
Thu Dec 22 10:04:02 PST 2005
PatchSet 7032
Date: 2005/12/22 17:51:17
Author: guilhem
Branch: HEAD
Tag: (none)
Log:
More (and hopefully final) fixes for access.
* kaffe/kaffevm/access.c
(checkAccess): Simplified to the maximum according to Sun's VM
spec we must not check for specific inner classes flags.
* kaffe/kaffevm/classMethod.c
(addInnerClasses): Do not merge inner class access flags with the
class flags.
* libraries/clib/native/Class.c
(java_lang_VMClass_getModifiers): Return the right access flags
depending on what we are asked and whether the class is nested.
* test/regression/TestSerialFields.java,
test/regression/TestSerialVersions.java: Removed private modifier
to be able to run the tests (as for JDK).
Members:
ChangeLog:1.4551->1.4552
kaffe/kaffevm/access.c:1.15->1.16
kaffe/kaffevm/classMethod.c:1.149->1.150
libraries/clib/native/Class.c:1.86->1.87
test/regression/TestSerialFields.java:1.3->1.4
test/regression/TestSerialVersions.java:1.3->1.4
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4551 kaffe/ChangeLog:1.4552
--- kaffe/ChangeLog:1.4551 Thu Dec 22 13:55:16 2005
+++ kaffe/ChangeLog Thu Dec 22 17:51:17 2005
@@ -1,3 +1,21 @@
+2005-12-22 Guilhem Lavaux <guilhem at kaffe.org>
+
+ * kaffe/kaffevm/access.c
+ (checkAccess): Simplified to the maximum according to Sun's VM
+ spec we must not check for specific inner classes flags.
+
+ * kaffe/kaffevm/classMethod.c
+ (addInnerClasses): Do not merge inner class access flags with the
+ class flags.
+
+ * libraries/clib/native/Class.c
+ (java_lang_VMClass_getModifiers): Return the right access flags
+ depending on what we are asked and whether the class is nested.
+
+ * test/regression/TestSerialFields.java,
+ test/regression/TestSerialVersions.java: Removed private modifier
+ to be able to run the tests (as for JDK).
+
2005-12-22 Ito Kazumitsu <kaz at maczuka.gcd.org>
* kaffe/kaffevm/access.c
Index: kaffe/kaffe/kaffevm/access.c
diff -u kaffe/kaffe/kaffevm/access.c:1.15 kaffe/kaffe/kaffevm/access.c:1.16
--- kaffe/kaffe/kaffevm/access.c:1.15 Thu Dec 22 13:55:22 2005
+++ kaffe/kaffe/kaffevm/access.c Thu Dec 22 17:51:23 2005
@@ -179,66 +179,9 @@
* is protected. But our experience tells the need for a special
* handling of this case.
*/
- else if( target->accflags & ACC_PROTECTED && instanceof(target, context) )
+ else if( instanceof(target, context) )
{
class_acc = 1;
- }
- else if( target->accflags & ACC_PROTECTED )
- {
- /* check whether target is non private innerclass of superclass */
- innerClass *ict;
- innerClass *icc;
- Hjava_lang_Class *outert;
- Hjava_lang_Class *outerc;
- errorInfo einfo;
- ict = icc = NULL;
- outert = outerc = NULL;
-
- /* get class containing the accessed class (the target) */
- if( target->this_inner_index >= 0 )
- {
- ict = &target->inner_classes[target->this_inner_index];
- if( ict->outer_class )
- {
- outert = getClass(ict->outer_class, target, &einfo);
- if( outert == NULL )
- {
- discardErrorInfo(&einfo);
- }
- }
- }
- /* get class containing the accessing class (the context) */
- if( context->this_inner_index >= 0 )
- {
- icc = &context->inner_classes[context->this_inner_index];
- if( icc->outer_class )
- {
- outerc = getClass(icc->outer_class, context, &einfo);
- if( outerc == NULL )
- {
- discardErrorInfo(&einfo);
- }
- }
- }
-
- if( outerc != NULL )
- {
- if ( recursive_instanceof(target, outerc) )
- {
- class_acc = 1;
- }
- else if (outert != NULL)
- {
- class_acc = recursive_instanceof(outert, outerc);
- }
-
- }
-
- if ( !class_acc && (outert != NULL) )
- {
- class_acc = instanceof(outert, context);
- }
-
}
if((context->packageLength == target->packageLength) &&
Index: kaffe/kaffe/kaffevm/classMethod.c
diff -u kaffe/kaffe/kaffevm/classMethod.c:1.149 kaffe/kaffe/kaffevm/classMethod.c:1.150
--- kaffe/kaffe/kaffevm/classMethod.c:1.149 Fri Sep 9 13:53:36 2005
+++ kaffe/kaffe/kaffevm/classMethod.c Thu Dec 22 17:51:23 2005
@@ -1113,7 +1113,6 @@
readu2(&ic->inner_class_accflags, fp);
if (c->this_index && ic->inner_class == c->this_index) {
- c->accflags = (c->accflags & ~ACC_MASK) | (ic->inner_class_accflags & ACC_MASK);
c->this_inner_index = i;
}
}
Index: kaffe/libraries/clib/native/Class.c
diff -u kaffe/libraries/clib/native/Class.c:1.86 kaffe/libraries/clib/native/Class.c:1.87
--- kaffe/libraries/clib/native/Class.c:1.86 Sat Aug 13 23:37:23 2005
+++ kaffe/libraries/clib/native/Class.c Thu Dec 22 17:51:23 2005
@@ -291,12 +291,19 @@
jint
java_lang_VMClass_getModifiers(struct Hjava_lang_Class* this,
- jboolean ignoreInnerClassAttribute UNUSED)
+ jboolean ignoreInnerClassAttribute)
{
#ifndef ACC_SUPER
#define ACC_SUPER ACC_SYNCHRONISED
#endif
- return (this->accflags & (ACC_MASK & ~ACC_SUPER));
+ accessFlags accflags = this->accflags;
+
+ if (this->this_inner_index >= 0 && !ignoreInnerClassAttribute)
+ {
+ assert(this->inner_classes != NULL);
+ accflags = this->inner_classes[this->this_inner_index].inner_class_accflags;
+ }
+ return accflags & (ACC_MASK & ~ACC_SUPER);
}
HArrayOfObject*
@@ -433,8 +440,12 @@
if (unhand(this)->this_inner_index >= 0) {
innerClass *ic = unhand(this)->inner_classes;
+ int oc = ic[unhand(this)->this_inner_index].outer_class;
+
+ if (oc == 0)
+ return NULL;
- ret = getClass (ic[unhand(this)->this_inner_index].outer_class,
+ ret = getClass (oc,
this,
&einfo);
Index: kaffe/test/regression/TestSerialFields.java
diff -u kaffe/test/regression/TestSerialFields.java:1.3 kaffe/test/regression/TestSerialFields.java:1.4
--- kaffe/test/regression/TestSerialFields.java:1.3 Sat Dec 10 19:38:20 2005
+++ kaffe/test/regression/TestSerialFields.java Thu Dec 22 17:51:24 2005
@@ -203,7 +203,7 @@
}
- private static class Test0001 // "original" (pristine) version
+ static class Test0001 // "original" (pristine) version
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -236,7 +236,7 @@
}
- private static class Test0002 // contains doubles
+ static class Test0002 // contains doubles
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -262,7 +262,7 @@
}
}
- private static class Test0005 // missing x,y fields
+ static class Test0005 // missing x,y fields
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -287,7 +287,7 @@
}
- private static class Test0008 // Compatible via serialPersistentFields...
+ static class Test0008 // Compatible via serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -317,7 +317,7 @@
}
- private static class Test0010 // Compatible, but different (and invalid) serialPersistentFields...
+ static class Test0010 // Compatible, but different (and invalid) serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -349,7 +349,7 @@
}
- private static class Test0011 // Compatible, broken writeObject
+ static class Test0011 // Compatible, broken writeObject
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -375,7 +375,7 @@
}
}
- private static class Test0012 // check defaultReadObject
+ static class Test0012 // check defaultReadObject
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -401,7 +401,7 @@
}
}
- private static class Test0014 // bogus reads/puts
+ static class Test0014 // bogus reads/puts
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -429,7 +429,7 @@
}
}
- private static class Test0015 // impossible field names
+ static class Test0015 // impossible field names
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -466,7 +466,7 @@
// XXX JDK1.4 and Kaffe differ on this one (JDK blows up with multiple
// readFields()) both Kaffe and JDK1.4 are fine with multiple putFields.
- private static class Test0016 // multiple gets/sets
+ static class Test0016 // multiple gets/sets
implements Serializable
{
private static final long serialVersionUID = constantUID;
Index: kaffe/test/regression/TestSerialVersions.java
diff -u kaffe/test/regression/TestSerialVersions.java:1.3 kaffe/test/regression/TestSerialVersions.java:1.4
--- kaffe/test/regression/TestSerialVersions.java:1.3 Sat Dec 10 19:38:20 2005
+++ kaffe/test/regression/TestSerialVersions.java Thu Dec 22 17:51:24 2005
@@ -21,7 +21,7 @@
public static final long constantUID = 0x42L;
- private static class Test0001 // "original" (pristine) version
+ static class Test0001 // "original" (pristine) version
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -34,7 +34,7 @@
}
}
- private static class Test0002 // mismatch (widen) field types
+ static class Test0002 // mismatch (widen) field types
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -47,7 +47,7 @@
}
}
- private static class Test0003 // mismatch (narrow) field types
+ static class Test0003 // mismatch (narrow) field types
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -60,7 +60,7 @@
}
}
- private static class Test0004 // mismatch (incompatible) field types
+ static class Test0004 // mismatch (incompatible) field types
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -73,7 +73,7 @@
}
}
- private static class Test0005 // missing x,y fields
+ static class Test0005 // missing x,y fields
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -84,7 +84,7 @@
}
}
- private static class Test0052 // missing x (but not y) field
+ static class Test0052 // missing x (but not y) field
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -97,7 +97,7 @@
}
}
- private static class Test0006 // Wrong serialVersionUID
+ static class Test0006 // Wrong serialVersionUID
implements Serializable
{
private static final long serialVersionUID = constantUID + 0x69;
@@ -115,7 +115,7 @@
// I think the serialPersistentFields are really only used for
// *writing* objects (in the default)...
// Kaffe now does the "right thing" (throws an exception on this case).
- private static class Test0007 // Compatible via serialPersistentFields...
+ static class Test0007 // Compatible via serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -135,7 +135,7 @@
}
- private static class Test0008 // Compatible via serialPersistentFields...
+ static class Test0008 // Compatible via serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -152,7 +152,7 @@
}
- private static class Test0009 // Compatible, but bad serialPersistentFields...
+ static class Test0009 // Compatible, but bad serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -171,7 +171,7 @@
}
- private static class Test0010 // Compatible, but different (and invalid) serialPersistentFields...
+ static class Test0010 // Compatible, but different (and invalid) serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -190,7 +190,7 @@
}
- private static class Test0011 // Compatible, but different (and valid) serialPersistentFields...
+ static class Test0011 // Compatible, but different (and valid) serialPersistentFields...
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -211,7 +211,7 @@
}
}
- private static class Test0012 // "Same" as 0011, but with 'transient' keyword
+ static class Test0012 // "Same" as 0011, but with 'transient' keyword
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -226,7 +226,7 @@
}
}
- private static class Test0013 // Battle of the overlapping specs
+ static class Test0013 // Battle of the overlapping specs
implements Serializable
{
private static final long serialVersionUID = constantUID;
@@ -245,7 +245,7 @@
}
- private static class Test0014 // Type mis-match but with an array
+ static class Test0014 // Type mis-match but with an array
implements Serializable
{
private static final long serialVersionUID = constantUID;
More information about the kaffe
mailing list