changeset 9657:4c162e218809

enabled creation of a HotSpotSignature from types (in addition to a string)
author Doug Simon <doug.simon@oracle.com>
date Mon, 13 May 2013 13:50:46 +0200
parents 53cbcd9ff217
children d64083db3c11
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java
diffstat 1 files changed, 41 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java	Mon May 13 11:56:16 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java	Mon May 13 13:50:46 2013 +0200
@@ -37,10 +37,10 @@
 public class HotSpotSignature extends CompilerObject implements Signature {
 
     private static final long serialVersionUID = -2890917956072366116L;
-    private final List<String> arguments = new ArrayList<>();
+    private final List<String> parameters = new ArrayList<>();
     private final String returnType;
     private final String originalString;
-    private JavaType[] argumentTypes;
+    private JavaType[] parameterTypes;
     private JavaType returnTypeCache;
 
     public HotSpotSignature(String signature) {
@@ -51,7 +51,7 @@
             int cur = 1;
             while (cur < signature.length() && signature.charAt(cur) != ')') {
                 int nextCur = parseSignature(signature, cur);
-                arguments.add(signature.substring(cur, nextCur));
+                parameters.add(signature.substring(cur, nextCur));
                 cur = nextCur;
             }
 
@@ -64,6 +64,20 @@
         }
     }
 
+    public HotSpotSignature(JavaType returnType, JavaType... parameterTypes) {
+        this.parameterTypes = parameterTypes.clone();
+        this.returnTypeCache = returnType;
+        this.returnType = returnType.getName();
+        StringBuilder sb = new StringBuilder("(");
+        for (JavaType type : parameterTypes) {
+            parameters.add(type.getName());
+            sb.append(type.getName());
+        }
+        sb.append(")").append(returnType.getName());
+        this.originalString = sb.toString();
+        assert new HotSpotSignature(originalString).equals(this);
+    }
+
     private static int parseSignature(String signature, int start) {
         int cur = start;
         char first;
@@ -96,12 +110,12 @@
 
     @Override
     public int getParameterCount(boolean withReceiver) {
-        return arguments.size() + (withReceiver ? 1 : 0);
+        return parameters.size() + (withReceiver ? 1 : 0);
     }
 
     @Override
     public Kind getParameterKind(int index) {
-        return Kind.fromTypeString(arguments.get(index));
+        return Kind.fromTypeString(parameters.get(index));
     }
 
     @Override
@@ -115,13 +129,13 @@
 
     @Override
     public JavaType getParameterType(int index, ResolvedJavaType accessingClass) {
-        if (argumentTypes == null) {
-            argumentTypes = new JavaType[arguments.size()];
+        if (parameterTypes == null) {
+            parameterTypes = new JavaType[parameters.size()];
         }
-        JavaType type = argumentTypes[index];
+        JavaType type = parameterTypes[index];
         if (type == null || !(type instanceof ResolvedJavaType)) {
-            type = graalRuntime().lookupType(arguments.get(index), (HotSpotResolvedObjectType) accessingClass, false);
-            argumentTypes[index] = type;
+            type = graalRuntime().lookupType(parameters.get(index), (HotSpotResolvedObjectType) accessingClass, false);
+            parameterTypes[index] = type;
         }
         return type;
     }
@@ -149,4 +163,21 @@
         return "HotSpotSignature<" + originalString + ">";
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof HotSpotSignature) {
+            HotSpotSignature other = (HotSpotSignature) obj;
+            if (other.originalString.equals(originalString)) {
+                assert other.parameters.equals(parameters);
+                assert other.returnType.equals(returnType);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return originalString.hashCode();
+    }
 }