[kaffe] CVS kaffe (guilhem): Fix for bug #14

Kaffe CVS cvs-commits at kaffe.org
Sun Mar 19 08:27:46 PST 2006


PatchSet 7153 
Date: 2006/03/19 16:16:15
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Fix for bug #14

	* kaffe/kaffevm/classMethod.c,
	kaffe/kaffevm/reference.c,
	kaffe/kaffevm/support.c,
	kaffe/kaffevm/jni/jni.c: Adapted to new internal API.

	* kaffe/kaffevm/lookup.c,
	kaffe/kaffevm/lookup.h
	(KaffeVM_findDeclaredMethod): New function to lookup for methods
	declared in the specified class only.

	* kaffe/kaffevm/support.c
	(lookupClassMethod): New parameter to specify if we want the
	declared methods or not.

Members: 
	ChangeLog:1.4671->1.4672 
	kaffe/kaffevm/classMethod.c:1.151->1.152 
	kaffe/kaffevm/lookup.c:1.47->1.48 
	kaffe/kaffevm/lookup.h:1.6->1.7 
	kaffe/kaffevm/reference.c:1.7->1.8 
	kaffe/kaffevm/support.c:1.91->1.92 
	kaffe/kaffevm/support.h:1.44->1.45 
	kaffe/kaffevm/jni/jni.c:1.40->1.41 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4671 kaffe/ChangeLog:1.4672
--- kaffe/ChangeLog:1.4671	Sat Mar 18 17:40:16 2006
+++ kaffe/ChangeLog	Sun Mar 19 16:16:15 2006
@@ -1,4 +1,22 @@
-2006-03-16  Guilhem Lavaux  <guilhem at kaffe.org>
+2006-03-19  Guilhem Lavaux  <guilhem at kaffe.org>
+
+	Fix for bug #14
+	
+	* kaffe/kaffevm/classMethod.c,
+	kaffe/kaffevm/reference.c,
+	kaffe/kaffevm/support.c,
+	kaffe/kaffevm/jni/jni.c: Adapted to new internal API.
+
+	* kaffe/kaffevm/lookup.c,
+	kaffe/kaffevm/lookup.h
+	(KaffeVM_findDeclaredMethod): New function to lookup for methods
+	declared in the specified class only.
+
+	* kaffe/kaffevm/support.c
+	(lookupClassMethod): New parameter to specify if we want the
+	declared methods or not.
+	
+2006-03-18  Guilhem Lavaux  <guilhem at kaffe.org>
 
 	* config/i386/cygwin32/md.h
 	(ALIGNMENT_OF_SIZE): Redefine it specifically for cygwin.
Index: kaffe/kaffe/kaffevm/classMethod.c
diff -u kaffe/kaffe/kaffevm/classMethod.c:1.151 kaffe/kaffe/kaffevm/classMethod.c:1.152
--- kaffe/kaffe/kaffevm/classMethod.c:1.151	Mon Dec 26 20:06:34 2005
+++ kaffe/kaffe/kaffevm/classMethod.c	Sun Mar 19 16:16:21 2006
@@ -1403,7 +1403,7 @@
 	     */
 	    if ((meth = lookupClassMethod(class_of_loader, "loadClass", 
 					 "(Ljava/lang/String;)Ljava/lang/Class;",
-					 einfo)) == NULL)
+					  false, einfo)) == NULL)
 	      {
 		retval = NULL;
 		goto userload_done;
Index: kaffe/kaffe/kaffevm/lookup.c
diff -u kaffe/kaffe/kaffevm/lookup.c:1.47 kaffe/kaffe/kaffevm/lookup.c:1.48
--- kaffe/kaffe/kaffevm/lookup.c:1.47	Mon May 30 09:24:00 2005
+++ kaffe/kaffe/kaffevm/lookup.c	Sun Mar 19 16:16:21 2006
@@ -366,3 +366,31 @@
 	postExceptionMessage(einfo, JAVA_LANG(NoSuchMethodError), "%s", name->data);
 	return (NULL);
 }
+
+
+Method*
+KaffeVM_findDeclaredMethod(Hjava_lang_Class *class, Utf8Const *name, Utf8Const *signature, errorInfo *einfo)
+{
+  Method *mptr;
+  bool success;
+  /*
+   * Waz CSTATE_LINKED - Must resolve constants before we do any
+   * translation.  Might not be right though ... XXX
+   */
+  if (class->state < CSTATE_USABLE) {
+    success = processClass(class, CSTATE_COMPLETE, einfo);
+    if (!success)
+      return (NULL);
+  }
+
+  /*
+   * Lookup method - this could be alot more efficient but never mind.
+   * Also there is no attempt to honour PUBLIC, PRIVATE, etc.
+   */
+  mptr = findMethodLocal(class, name, signature);
+  if (mptr != NULL)
+    return mptr;
+
+  postExceptionMessage(einfo, JAVA_LANG(NoSuchMethodError), "%s", name->data);
+  return NULL;
+}
Index: kaffe/kaffe/kaffevm/lookup.h
diff -u kaffe/kaffe/kaffevm/lookup.h:1.6 kaffe/kaffe/kaffevm/lookup.h:1.7
--- kaffe/kaffe/kaffevm/lookup.h:1.6	Fri Oct  1 20:39:41 1999
+++ kaffe/kaffe/kaffevm/lookup.h	Sun Mar 19 16:16:21 2006
@@ -45,5 +45,6 @@
 
 Method* findMethod(Hjava_lang_Class*, Utf8Const*, Utf8Const*, errorInfo*);
 Method* findMethodLocal(Hjava_lang_Class*, Utf8Const*, Utf8Const*);
+Method* KaffeVM_findDeclaredMethod(Hjava_lang_Class*, Utf8Const*, Utf8Const*, errorInfo*);
 
 #endif
Index: kaffe/kaffe/kaffevm/reference.c
diff -u kaffe/kaffe/kaffevm/reference.c:1.7 kaffe/kaffe/kaffevm/reference.c:1.8
--- kaffe/kaffe/kaffevm/reference.c:1.7	Fri May  6 15:24:28 2005
+++ kaffe/kaffe/kaffevm/reference.c	Sun Mar 19 16:16:21 2006
@@ -175,7 +175,7 @@
       referenceLinkList *temp = ll->next;
       errorInfo einfo;
       Hjava_lang_Class *ref_clazz = OBJECT_CLASS((Hjava_lang_Object*)ll->reference);
-      Method *mid = lookupClassMethod(ref_clazz, "enqueue", "()Z", &einfo);
+      Method *mid = lookupClassMethod(ref_clazz, "enqueue", "()Z", false, &einfo);
 
       if (mid != NULL && !METHOD_IS_STATIC(mid))
 	{
Index: kaffe/kaffe/kaffevm/support.c
diff -u kaffe/kaffe/kaffevm/support.c:1.91 kaffe/kaffe/kaffevm/support.c:1.92
--- kaffe/kaffe/kaffevm/support.c:1.91	Fri Dec 16 19:56:55 2005
+++ kaffe/kaffe/kaffevm/support.c	Sun Mar 19 16:16:21 2006
@@ -103,7 +103,7 @@
 		assert(method_name != NULL);
 		assert(signature != NULL);
 		if (isStaticCall) {
-			mb = lookupClassMethod((Hjava_lang_Class*)obj, method_name, signature, &info);
+			mb = lookupClassMethod((Hjava_lang_Class*)obj, method_name, signature, false, &info);
 		}
 		else {
 			mb = lookupObjectMethod((Hjava_lang_Object*)obj, method_name, signature, &info);
@@ -179,7 +179,7 @@
 
 	/* Get method */
 	if (clazz != NULL) {
-		mb = lookupClassMethod(clazz, method_name, signature, &info);
+		mb = lookupClassMethod(clazz, method_name, signature, false, &info);
 	}
 	if (mb == NULL) {
 		throwError(&info);
@@ -367,7 +367,7 @@
  * @return struct _jmethodID of the method being searched or 0 in case of an error
  */
 Method*
-lookupClassMethod(Hjava_lang_Class* cls, const char* name, const char* sig, errorInfo *einfo)
+lookupClassMethod(Hjava_lang_Class* cls, const char* name, const char* sig, bool declared, errorInfo *einfo)
 {
 	Method *meth;
 	Utf8Const *name_utf8, *sig_utf8;
@@ -387,7 +387,10 @@
 		postOutOfMemory(einfo);
 		return NULL;
 	}
-	meth = findMethod(cls, name_utf8, sig_utf8, einfo);
+	if (declared)
+	  meth = KaffeVM_findDeclaredMethod(cls, name_utf8, sig_utf8, einfo);
+	else
+	  meth = findMethod(cls, name_utf8, sig_utf8, einfo);
 	utf8ConstRelease(name_utf8);
 	utf8ConstRelease(sig_utf8);
 	return(meth);
@@ -407,7 +410,7 @@
 lookupObjectMethod(Hjava_lang_Object* obj, const char* name, const char* sig, errorInfo *einfo)
 {
 	assert(obj != NULL && name != NULL && sig != NULL);
-	return (lookupClassMethod(OBJECT_CLASS(obj), name, sig, einfo));
+	return (lookupClassMethod(OBJECT_CLASS(obj), name, sig, false, einfo));
 }
 
 /**
Index: kaffe/kaffe/kaffevm/support.h
diff -u kaffe/kaffe/kaffevm/support.h:1.44 kaffe/kaffe/kaffevm/support.h:1.45
--- kaffe/kaffe/kaffevm/support.h:1.44	Fri Dec 16 19:56:55 2005
+++ kaffe/kaffe/kaffevm/support.h	Sun Mar 19 16:16:21 2006
@@ -135,7 +135,7 @@
 extern void	KaffeVM_callMethodV(struct _jmethodID*, void*, void*, va_list, jvalue*);
 extern void     KaffeVM_safeCallMethodA(struct _jmethodID*, void*, void*, jvalue*, jvalue*, int);
 extern void     KaffeVM_safeCallMethodV(struct _jmethodID*, void*, void*, va_list, jvalue*);
-extern Method*	lookupClassMethod(struct Hjava_lang_Class*, const char*, const char*, struct _errorInfo*);
+extern Method*	lookupClassMethod(struct Hjava_lang_Class*, const char*, const char*, bool, struct _errorInfo*);
 extern Method*	lookupObjectMethod(struct Hjava_lang_Object*, const char*, const char*, struct _errorInfo*);
 extern Field*   KNI_lookupFieldC(struct Hjava_lang_Class*, const char*, bool, struct _errorInfo*);
 
Index: kaffe/kaffe/kaffevm/jni/jni.c
diff -u kaffe/kaffe/kaffevm/jni/jni.c:1.40 kaffe/kaffe/kaffevm/jni/jni.c:1.41
--- kaffe/kaffe/kaffevm/jni/jni.c:1.40	Sat Mar  4 17:51:07 2006
+++ kaffe/kaffe/kaffevm/jni/jni.c	Sun Mar 19 16:16:22 2006
@@ -536,7 +536,7 @@
 	cls_local = unveil(cls);
 
 	meth = lookupClassMethod((Hjava_lang_Class*)cls_local, name, sig,
-				 &info);
+				 false, &info);
 	if (meth == NULL) {
 		postError(env, &info);
 	}
@@ -585,7 +585,7 @@
 
 	cls_local = unveil(cls);
 	meth = lookupClassMethod((Hjava_lang_Class*)cls_local, name, sig,
-				 &info);
+				 true, &info);
 	if (meth == NULL) {
 		postError(env, &info);
 	} else if (!METHOD_IS_STATIC(meth)) {



More information about the kaffe mailing list