Mercurial > hg > graal-jvmci-8
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(); + } }