minor bug fixes
[org.ibex.tool.git] / src / java / org / ibex / tool / Compiler.java
index 26a1b4b..34b504e 100644 (file)
@@ -444,7 +444,7 @@ public class Compiler {
     final INameEnvironment env = new INameEnvironment() {
         public NameEnvironmentAnswer findType(char[][] c) { return findType(name(c), pack(c)); }
         public NameEnvironmentAnswer findType(char[] n, char[][] p) {
-            if (DEBUG) System.out.println("requesting: "+ str(p, '.') + "."+new String(n));
+            if (DEBUG) System.out.println("findType: "+ str(p, '.') + "."+new String(n));
 
             try {
                 Class c = Class.forName(str(p, '.') + '.' + new String(n));
@@ -455,7 +455,10 @@ public class Compiler {
             } catch (ClassNotFoundException e) {}
 
             // cut out searches for java.* packages in sources list
-            if (p.length > 0 && eq(p[0], "java".toCharArray())) return null;
+            if (p.length > 0 && eq(p[0], "java".toCharArray())) {
+                if (DEBUG) System.out.println("  not found, unknown java.*");
+                return null;
+            }
 
             try {
                 for (int i=0; i < sources.length; i++) {
@@ -479,12 +482,16 @@ public class Compiler {
                 System.out.println("Unexpected ClassFormatException"); // FIXME
                 e.printStackTrace();
             }
+            if (DEBUG) System.out.println("  not found");
             return null;
         }
         public boolean isPackage(char[][] parent, char[] name) {
+            if (DEBUG) System.out.println("isPackage: "+ str(parent, '.') + "."+new String(name));
             String parentName = str(parent, '/');
-            for (int i=0; i < sources.length; i++)
+            for (int i=0; i < sources.length; i++) {
                 if (eq(name, sources[i].n) && eq(parent, sources[i].p)) return false;
+                if (eq(pack(sources[i].p), parent) && eq(name(sources[i].p), name)) return true;
+            }
             return
                 loader.getResource(parentName + ".class") == null &&
                 loader.getResource(parentName + '/' + new String(name) + ".class") == null;
@@ -599,6 +606,7 @@ public class Compiler {
 
     /** Returns true of contents of both char arrays are equal. */
     private static boolean eq(char[][] c1, char[][] c2) {
+        if (c1 == null || c2 == null) return c1 == c2;
         if (c1.length != c2.length) return false;
         for (int i=0; i < c1.length; i++) if (!eq(c1[i], c2[i])) return false;
         return true;
@@ -606,6 +614,7 @@ public class Compiler {
 
     /** Returns true of contents of both char arrays are equal. */
     private static boolean eq(char[] c1, char[] c2) {
+        if (c1 == null || c2 == null) return c1 == c2;
         if (c1.length != c2.length) return false;
         for (int i=0; i < c1.length; i++) if (c1[i] != c2[i]) return false;
         return true;