Mercurial > hg > graal-compiler
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java @ 20984:6361fa2e3321
Truffle-DSL: further fixes for polymorphic execute signatures.
author | Christian Humer <christian.humer@oracle.com> |
---|---|
date | Wed, 15 Apr 2015 21:13:43 +0200 |
parents | 476374f3fe9a |
children |
comparison
equal
deleted
inserted
replaced
20983:b99da6d86cfe | 20984:6361fa2e3321 |
---|---|
151 } | 151 } |
152 parameterCache.put(newParameter.getLocalName(), newParameter); | 152 parameterCache.put(newParameter.getLocalName(), newParameter); |
153 newParameter.setMethod(this); | 153 newParameter.setMethod(this); |
154 } | 154 } |
155 | 155 |
156 public Iterable<Parameter> getDynamicParameters() { | |
157 return new FilteredIterable<>(getParameters(), new Predicate<Parameter>() { | |
158 public boolean evaluate(Parameter value) { | |
159 return !value.getSpecification().isLocal() && !value.getSpecification().isAnnotated(); | |
160 } | |
161 }); | |
162 } | |
163 | |
156 public Iterable<Parameter> getSignatureParameters() { | 164 public Iterable<Parameter> getSignatureParameters() { |
157 return new FilteredIterable<>(getParameters(), new Predicate<Parameter>() { | 165 return new FilteredIterable<>(getParameters(), new Predicate<Parameter>() { |
158 public boolean evaluate(Parameter value) { | 166 public boolean evaluate(Parameter value) { |
159 return value.getSpecification().isSignature(); | 167 return value.getSpecification().isSignature(); |
160 } | 168 } |
289 } | 297 } |
290 return compare; | 298 return compare; |
291 } | 299 } |
292 | 300 |
293 public int compareBySignature(TemplateMethod compareMethod) { | 301 public int compareBySignature(TemplateMethod compareMethod) { |
294 List<TypeMirror> signature1 = getSignatureTypes(this); | 302 List<TypeMirror> signature1 = getDynamicTypes(); |
295 List<TypeMirror> signature2 = getSignatureTypes(compareMethod); | 303 List<TypeMirror> signature2 = compareMethod.getDynamicTypes(); |
296 | 304 |
297 int result = 0; | 305 int result = 0; |
298 for (int i = 0; i < Math.max(signature1.size(), signature2.size()); i++) { | 306 for (int i = 0; i < Math.max(signature1.size(), signature2.size()); i++) { |
299 TypeMirror t1 = i < signature1.size() ? signature1.get(i) : null; | 307 TypeMirror t1 = i < signature1.size() ? signature1.get(i) : null; |
300 TypeMirror t2 = i < signature2.size() ? signature2.get(i) : null; | 308 TypeMirror t2 = i < signature2.size() ? signature2.get(i) : null; |
305 } | 313 } |
306 | 314 |
307 return result; | 315 return result; |
308 } | 316 } |
309 | 317 |
310 public static List<TypeMirror> getSignatureTypes(TemplateMethod method) { | 318 public List<TypeMirror> getDynamicTypes() { |
311 List<TypeMirror> types = new ArrayList<>(); | 319 List<TypeMirror> types = new ArrayList<>(); |
312 for (Parameter param : method.getSignatureParameters()) { | 320 for (Parameter param : getDynamicParameters()) { |
313 types.add(param.getType()); | 321 types.add(param.getType()); |
314 } | 322 } |
315 return types; | 323 return types; |
316 } | 324 } |
317 | 325 |