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