diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeUnresolved.java @ 2055:99ad52189524

Refactorings to get towards less CRI overhead.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Thu, 13 Jan 2011 17:45:17 +0100
parents 177398c6147d
children f21664b3dd1c 569d3fe7d65c
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeUnresolved.java	Wed Jan 12 19:14:32 2011 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeUnresolved.java	Thu Jan 13 17:45:17 2011 +0100
@@ -28,9 +28,9 @@
  *
  * @author Thomas Wuerthinger, Lukas Stadler
  */
-public class HotSpotTypeUnresolved implements HotSpotType {
+public class HotSpotTypeUnresolved extends HotSpotType {
 
-    public final String name;
+    public final String simpleName;
     public final int dimensions;
 
     /**
@@ -48,35 +48,33 @@
                 dimensions++;
             }
             assert name.charAt(startIndex) == 'L';
-            name = name.substring(startIndex + 1, name.length() - 1);
+            this.simpleName = name.substring(startIndex + 1, name.length() - 1);
+            this.name = name;
+        } else {
+            this.simpleName = name;
+            this.name = getFullName(name, dimensions);
         }
 
-        this.name = name;
         this.dimensions = dimensions;
     }
 
     public HotSpotTypeUnresolved(String name, int dimensions) {
         assert dimensions >= 0;
-        this.name = name;
+        this.simpleName = name;
         this.dimensions = dimensions;
+        this.name = getFullName(name, dimensions);
     }
 
-    @Override
-    public String name() {
+    private String getFullName(String name, int dimensions) {
         StringBuilder str = new StringBuilder();
         for (int i = 0; i < dimensions; i++) {
             str.append('[');
         }
-        str.append('L').append(name).append(';');
+        str.append('L').append(simpleName).append(';');
         return str.toString();
     }
 
     @Override
-    public String simpleName() {
-        return name;
-    }
-
-    @Override
     public RiType uniqueConcreteSubtype() {
         throw unresolved("uniqueConcreteSubtype");
     }
@@ -144,7 +142,7 @@
     @Override
     public RiType componentType() {
         assert isArrayClass() : "no array class" + name();
-        return new HotSpotTypeUnresolved(name, dimensions - 1);
+        return new HotSpotTypeUnresolved(simpleName, dimensions - 1);
     }
 
     @Override
@@ -154,7 +152,7 @@
 
     @Override
     public RiType arrayOf() {
-        return new HotSpotTypeUnresolved(name, dimensions + 1);
+        return new HotSpotTypeUnresolved(simpleName, dimensions + 1);
     }
 
     @Override
@@ -168,12 +166,12 @@
     }
 
     private CiUnresolvedException unresolved(String operation) {
-        throw new CiUnresolvedException(operation + " not defined for unresolved class " + name);
+        throw new CiUnresolvedException(operation + " not defined for unresolved class " + simpleName);
     }
 
     @Override
     public int hashCode() {
-        return name.hashCode();
+        return simpleName.hashCode();
     }
 
     @Override
@@ -183,7 +181,7 @@
 
     @Override
     public String toString() {
-        return "HotSpotType<" + name + ", unresolved>";
+        return "HotSpotType<" + simpleName + ", unresolved>";
     }
 
     @Override