PatchSet 13 Date: 2003/09/23 18:29:52 Author: guilhem Branch: HEAD Tag: (none) Log: Nested class loading fix.
When imported classes are specified using "import class;" KJC was not looking for nested classes in the "class". Accessibility of nested classes fixed btw. Members: build.xml:1.7->1.8 patches/kjc-nested-class-loading.diff:INITIAL->1.1 Index: kaffe-extras/build.xml diff -u kaffe-extras/build.xml:1.7 kaffe-extras/build.xml:1.8 --- kaffe-extras/build.xml:1.7 Thu Aug 14 07:15:04 2003 +++ kaffe-extras/build.xml Tue Sep 23 18:29:52 2003 @@ -242,6 +242,9 @@ <patch patchfile="${patches_dir}/kjc-class-file-dir.diff" strip="1" dir="${kjcsuite_dir}"/> + <patch patchfile="${patches_dir}/kjc-nested-class-loading.diff" + strip="1" + dir="${kjcsuite_dir}"/> <touch file="${kjcsuite_unpacked_stamp}"/> </target> =================================================================== Checking out kaffe-extras/patches/kjc-nested-class-loading.diff RCS: /home/cvs/kaffe/kaffe-extras/patches/kjc-nested-class-loading.diff,v VERS: 1.1 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe-extras/patches/kjc-nested-class-loading.diff Tue Sep 23 18:29:54 2003 @@ -0,0 +1,49 @@ +--- kjc-suite-2.1B/src/kjc/CCompilationUnit.java 2002-07-15 20:53:32.000000000 +0200 ++++ kjc-suite-2.1B.new/src/kjc/CCompilationUnit.java 2003-09-23 19:15:25.000000000 +0200 +@@ -79,6 +79,26 @@ + return cl; + } + ++ // Now we must check whether the specified class is an inner class ++ // of the imported classes. ++ for (int i = 0; i < importedClasses.length; i++) { ++ String qualifiedName = importedClasses[i].getQualifiedName() + '$' + name; ++ ++ if (classReader.hasClassFile(qualifiedName)) { ++ CClass lastClass = (CClass)loadedClasses.get(name); ++ ++ if (lastClass!= null && !lastClass.isAccessible(caller)) { ++ lastClass = null; // not accessible -> not imported ++ } ++ if (lastClass != null && !lastClass.getQualifiedName().equals(qualifiedName)) { ++ // Oops, the name is ambiguous (declared by more than one import-on-demand declaration) ++ throw new UnpositionedError(KjcMessages.CUNIT_RENAME2, name); ++ } ++ loadedClasses.put(name, classReader.loadClass(typeFactory, qualifiedName)); ++ importedClasses[i].setUsed(); ++ } ++ } ++ + // Otherwise, look for a type declared in another compilation unit of this package + if (packageName.length() == 0) { + cl = classReader.hasClassFile(name) ? classReader.loadClass(typeFactory, name) : null; +@@ -94,7 +114,7 @@ + // Otherwise, look for a type declared by EXACTLY ONE import-on-demand declaration + for (int i = 0; i < importedPackages.length; i++) { + String qualifiedName; +- ++ + if (classReader.hasClassFile(importedPackages[i].getName())) { + // import on demand of enclosed classes! + qualifiedName = (importedPackages[i].getName() + '$' + name).intern(); +--- kjc-suite-2.1B/src/kjc/CMember.java 2002-07-15 20:53:32.000000000 +0200 ++++ kjc-suite-2.1B.new/src/kjc/CMember.java 2003-09-23 19:27:38.000000000 +0200 +@@ -207,7 +207,7 @@ + return true; + } else if (!isPrivate() && owner.getPackage() == from.getPackage()) { + return true; +- } else if (isProtected() && from.descendsFrom(owner)) { ++ } else if (!isPrivate() && from.descendsFrom(owner)) { + return true; + } else { + return false; _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe