comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/TemplateMethod.java @ 11193:6879565ee10b

Truffle-DSL: Fixed the second specialization is unreachable if two specializations have the exactly same signature (also guards) and are ordered next to each other.
author Christian Humer <christian.humer@gmail.com>
date Thu, 01 Aug 2013 20:52:03 +0200
parents b8fe1fe004ec
children efe58aa92f86
comparison
equal deleted inserted replaced
11192:0460c44aef60 11193:6879565ee10b
214 } 214 }
215 } 215 }
216 return signature; 216 return signature;
217 } 217 }
218 218
219 public ActualParameter getSignatureParameter(int searchIndex) {
220 int index = 0;
221 for (ActualParameter parameter : getParameters()) {
222 if (!parameter.getSpecification().isSignature()) {
223 continue;
224 }
225 if (index == searchIndex) {
226 return parameter;
227 }
228 index++;
229 }
230 return null;
231 }
232
219 public void updateSignature(Signature signature) { 233 public void updateSignature(Signature signature) {
220 assert signature.size() >= 1; 234 assert signature.size() >= 1;
221 int signatureIndex = 0; 235 int signatureIndex = 0;
222 for (ActualParameter parameter : getReturnTypeAndParameters()) { 236 for (ActualParameter parameter : getReturnTypeAndParameters()) {
223 if (!parameter.getSpecification().isSignature()) { 237 if (!parameter.getSpecification().isSignature()) {
362 } else { 376 } else {
363 signature.types.add(genericSignature.types.get(i)); 377 signature.types.add(genericSignature.types.get(i));
364 } 378 }
365 } 379 }
366 return signature; 380 return signature;
381 }
382
383 public boolean equalsParameters(Signature other) {
384 if (size() != other.size()) {
385 return false;
386 }
387 return types.subList(1, types.size()).equals(other.types.subList(1, other.types.size()));
367 } 388 }
368 389
369 @Override 390 @Override
370 public boolean equals(Object obj) { 391 public boolean equals(Object obj) {
371 if (obj instanceof Signature) { 392 if (obj instanceof Signature) {