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