Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java @ 16909:62cfffca9be2
Truffle-DSL: some more performance optimizations.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sat, 23 Aug 2014 19:31:18 +0200 |
parents | 2db61eddcb97 |
children | 5ede308adf68 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java Sat Aug 23 19:31:13 2014 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java Sat Aug 23 19:31:18 2014 +0200 @@ -44,7 +44,8 @@ private final ExecutableElement method; private final AnnotationMirror markerAnnotation; private Parameter returnType; - private List<Parameter> parameters; + private final List<Parameter> parameters; + private final Map<String, Parameter> parameterCache = new HashMap<>(); public TemplateMethod(String id, int naturalOrder, Template template, MethodSpec specification, ExecutableElement method, AnnotationMirror markerAnnotation, Parameter returnType, List<Parameter> parameters) { @@ -59,7 +60,9 @@ Parameter newParam = new Parameter(param); this.parameters.add(newParam); newParam.setMethod(this); + parameterCache.put(param.getLocalName(), param); } + parameterCache.put(returnType.getLocalName(), returnType); this.id = id; } @@ -77,10 +80,6 @@ getMessages().addAll(method.getMessages()); } - public void setParameters(List<Parameter> parameters) { - this.parameters = parameters; - } - @Override public Element getMessageElement() { return method; @@ -120,14 +119,10 @@ if (returnType.getLocalName().equals(localName)) { returnType = newParameter; returnType.setMethod(this); - } - - for (ListIterator<Parameter> iterator = parameters.listIterator(); iterator.hasNext();) { - Parameter parameter = iterator.next(); - if (parameter.getLocalName().equals(localName)) { - iterator.set(newParameter); - newParameter.setMethod(this); - } + } else { + Parameter local = findParameter(localName); + int index = parameters.indexOf(local); + parameters.set(index, newParameter); } } @@ -175,12 +170,7 @@ } public Parameter findParameter(String valueName) { - for (Parameter param : getReturnTypeAndParameters()) { - if (param.getLocalName().equals(valueName)) { - return param; - } - } - return null; + return parameterCache.get(valueName); } public List<Parameter> getReturnTypeAndParameters() {