You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ar...@apache.org on 2006/06/06 15:54:38 UTC

svn commit: r412122 - in /incubator/harmony/enhanced/jchevm/libjc: jni_native.c reflect.c resolve.c resolve2.c

Author: archie
Date: Tue Jun  6 06:54:38 2006
New Revision: 412122

URL: http://svn.apache.org/viewvc?rev=412122&view=rev
Log:
- Fix bug in field resolution: we were failing to find fields declared in
  interfaces of superclasses. Only some compilers (jikes) emit such code.
- Fix exception message for failed field resolution to specify the original
  class being searched rather than java/lang/Object.

Modified:
    incubator/harmony/enhanced/jchevm/libjc/jni_native.c
    incubator/harmony/enhanced/jchevm/libjc/reflect.c
    incubator/harmony/enhanced/jchevm/libjc/resolve.c
    incubator/harmony/enhanced/jchevm/libjc/resolve2.c

Modified: incubator/harmony/enhanced/jchevm/libjc/jni_native.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/jchevm/libjc/jni_native.c?rev=412122&r1=412121&r2=412122&view=diff
==============================================================================
--- incubator/harmony/enhanced/jchevm/libjc/jni_native.c (original)
+++ incubator/harmony/enhanced/jchevm/libjc/jni_native.c Tue Jun  6 06:54:38 2006
@@ -773,6 +773,8 @@
 	/* Search for field */
 	if ((field = _jc_resolve_field(env,
 	    type, name, sig, is_static)) == NULL) {
+		_JC_EX_STORE(env, NoSuchFieldError, "%s.%s (type `%s'%s)",
+		    type->name, name, sig, is_static ? ", static" : "");
 		_jc_post_exception_info(env);
 		goto done;
 	}

Modified: incubator/harmony/enhanced/jchevm/libjc/reflect.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/jchevm/libjc/reflect.c?rev=412122&r1=412121&r2=412122&view=diff
==============================================================================
--- incubator/harmony/enhanced/jchevm/libjc/reflect.c (original)
+++ incubator/harmony/enhanced/jchevm/libjc/reflect.c Tue Jun  6 06:54:38 2006
@@ -120,8 +120,8 @@
 
 fail:
 	/* Not found */
-	_JC_EX_STORE(env, NoSuchFieldError, "%s.%s (type `%s', %sstatic)",
-	    type->name, name, sig, is_static ? "" : "non-");
+	_JC_EX_STORE(env, NoSuchFieldError, "%s.%s (type `%s'%s)",
+	    type->name, name, sig, is_static ? ", static" : "");
 	return NULL;
 }
 

Modified: incubator/harmony/enhanced/jchevm/libjc/resolve.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/jchevm/libjc/resolve.c?rev=412122&r1=412121&r2=412122&view=diff
==============================================================================
--- incubator/harmony/enhanced/jchevm/libjc/resolve.c (original)
+++ incubator/harmony/enhanced/jchevm/libjc/resolve.c Tue Jun  6 06:54:38 2006
@@ -194,9 +194,9 @@
 
 /*
  * Resolve a field per JVMS section 5.4.3.2.
- * Note the static-ness of the field is not checked.
  *
- * Returns NULL and stores a NoSuchFieldError upon failure.
+ * Returns NULL and stores a NoSuchFieldError upon failure
+ * (with the message containing java/lang/Object as the type name).
  */
 _jc_field *
 _jc_resolve_field(_jc_env *env, _jc_type *type,
@@ -222,13 +222,10 @@
 			return field;
 	}
 
-	/* Search for field in superclasses */
-	while (JNI_TRUE) {
-		if ((type = type->superclass) == NULL)
-			break;
-		if ((field = _jc_get_declared_field(env,
-		    type, name, sig, is_static)) != NULL)
-			return field;
+	/* Recurse to superclass */
+	if (type->superclass != NULL) {
+		return _jc_resolve_field(env,
+		    type->superclass, name, sig, is_static);
 	}
 
 	/* Not found */

Modified: incubator/harmony/enhanced/jchevm/libjc/resolve2.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/jchevm/libjc/resolve2.c?rev=412122&r1=412121&r2=412122&view=diff
==============================================================================
--- incubator/harmony/enhanced/jchevm/libjc/resolve2.c (original)
+++ incubator/harmony/enhanced/jchevm/libjc/resolve2.c Tue Jun  6 06:54:38 2006
@@ -688,7 +688,10 @@
 			/* Resolve field */
 			if ((field = _jc_resolve_field(env, type,
 			    ref->name, ref->descriptor, is_static)) == NULL) {
-				env->ex.num = _JC_IncompatibleClassChangeError;
+				_JC_EX_STORE(env, IncompatibleClassChangeError,
+				    "%s.%s (type `%s'%s)", type->name,
+				    ref->name, ref->descriptor,
+				    is_static ? ", static" : "");
 				goto post_fail;
 			}