Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java @ 9211:77c17c97f713
Fixed verifying specialization argument length must be done before generating specialization ids.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 08 Apr 2013 17:00:31 +0200 |
parents | e2b471ba533a |
children | 61ba6fc21ba4 |
comparison
equal
deleted
inserted
replaced
9210:160f088e40db | 9211:77c17c97f713 |
---|---|
363 specialization.setId("Uninitialized"); | 363 specialization.setId("Uninitialized"); |
364 } else { | 364 } else { |
365 needsId.add(specialization); | 365 needsId.add(specialization); |
366 } | 366 } |
367 } | 367 } |
368 List<String> ids = calculateSpecializationIds(needsId); | 368 |
369 for (int i = 0; i < ids.size(); i++) { | 369 // verify specialization parameter length |
370 needsId.get(i).setId(ids.get(i)); | 370 if (verifySpecializationParameters(node)) { |
371 List<String> ids = calculateSpecializationIds(needsId); | |
372 for (int i = 0; i < ids.size(); i++) { | |
373 needsId.get(i).setId(ids.get(i)); | |
374 } | |
371 } | 375 } |
372 } | 376 } |
373 | 377 |
374 private void matchGuards(List<Element> elements, SpecializationData specialization) { | 378 private void matchGuards(List<Element> elements, SpecializationData specialization) { |
375 if (specialization.getGuardDefinitions().isEmpty()) { | 379 if (specialization.getGuardDefinitions().isEmpty()) { |
507 | 511 |
508 return signatures; | 512 return signatures; |
509 } | 513 } |
510 | 514 |
511 private void verifyNode(NodeData nodeData) { | 515 private void verifyNode(NodeData nodeData) { |
512 // verify specialization parameter length | |
513 verifySpecializationParameters(nodeData); | |
514 | |
515 // verify order is not ambiguous | 516 // verify order is not ambiguous |
516 verifySpecializationOrder(nodeData); | 517 verifySpecializationOrder(nodeData); |
517 | 518 |
518 verifyMissingAbstractMethods(nodeData); | 519 verifyMissingAbstractMethods(nodeData); |
519 | 520 |
520 assignShortCircuitsToSpecializations(nodeData); | 521 assignShortCircuitsToSpecializations(nodeData); |
521 | 522 |
522 verifyConstructors(nodeData); | 523 verifyConstructors(nodeData); |
523 | |
524 // if (!verifyNamingConvention(specializations, "do")) { | |
525 // return null; | |
526 // } | |
527 // | |
528 // if (!verifyNamesUnique(specializations)) { | |
529 // return null; | |
530 // } | |
531 | 524 |
532 verifyNamingConvention(nodeData.getShortCircuits(), "needs"); | 525 verifyNamingConvention(nodeData.getShortCircuits(), "needs"); |
533 | 526 |
534 verifySpecializationThrows(nodeData); | 527 verifySpecializationThrows(nodeData); |
535 } | 528 } |
563 nodeData.setFields(parseFields(elements, typeHierarchy)); | 556 nodeData.setFields(parseFields(elements, typeHierarchy)); |
564 | 557 |
565 return nodeData; | 558 return nodeData; |
566 } | 559 } |
567 | 560 |
568 private static void verifySpecializationParameters(NodeData nodeData) { | 561 private static boolean verifySpecializationParameters(NodeData nodeData) { |
569 boolean valid = true; | 562 boolean valid = true; |
570 int args = -1; | 563 int args = -1; |
571 for (SpecializationData specializationData : nodeData.getSpecializations()) { | 564 for (SpecializationData specializationData : nodeData.getSpecializations()) { |
572 int signatureArgs = 0; | 565 int signatureArgs = 0; |
573 for (ActualParameter param : specializationData.getParameters()) { | 566 for (ActualParameter param : specializationData.getParameters()) { |
584 if (!valid) { | 577 if (!valid) { |
585 for (SpecializationData specialization : nodeData.getSpecializations()) { | 578 for (SpecializationData specialization : nodeData.getSpecializations()) { |
586 specialization.addError("All specializations must have the same number of arguments."); | 579 specialization.addError("All specializations must have the same number of arguments."); |
587 } | 580 } |
588 } | 581 } |
582 return valid; | |
589 } | 583 } |
590 | 584 |
591 private void verifyMissingAbstractMethods(NodeData nodeData) { | 585 private void verifyMissingAbstractMethods(NodeData nodeData) { |
592 if (!nodeData.needsFactory()) { | 586 if (!nodeData.needsFactory()) { |
593 // missing abstract methods only needs to be implemented | 587 // missing abstract methods only needs to be implemented |