# HG changeset patch # User Doug Simon # Date 1368445846 -7200 # Node ID 4c162e21880952b8b2a4bad2e6a8cd3902a04c4f # Parent 53cbcd9ff217261a7a0558a708d543f49ae9c5ea enabled creation of a HotSpotSignature from types (in addition to a string) diff -r 53cbcd9ff217 -r 4c162e218809 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java --- 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 arguments = new ArrayList<>(); + private final List 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(); + } }