src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java

changeset 2567
9a3e5ce68cef
parent 2564
ced008063508
child 2702
9ca8d8713094
child 2730
a513711d6171
equal deleted inserted replaced
2566:58e7e71b302e 2567:9a3e5ce68cef
495 deferredAttrNodes.remove(deferredAttrNode); 495 deferredAttrNodes.remove(deferredAttrNode);
496 progress = true; 496 progress = true;
497 } 497 }
498 } 498 }
499 if (!progress) { 499 if (!progress) {
500 DeferredAttrContext dac = this; 500 if (insideOverloadPhase()) {
501 while (dac != emptyDeferredAttrContext) { 501 for (DeferredAttrNode deferredNode: deferredAttrNodes) {
502 if (dac.mode == AttrMode.SPECULATIVE) { 502 deferredNode.dt.tree.type = Type.noType;
503 //unsticking does not take place during overload
504 break;
505 } 503 }
506 dac = dac.parent; 504 return;
507 } 505 }
508 //remove all variables that have already been instantiated 506 //remove all variables that have already been instantiated
509 //from the list of stuck variables 507 //from the list of stuck variables
510 try { 508 try {
511 inferenceContext.solveAny(stuckVars, depVarsMap, warn); 509 inferenceContext.solveAny(stuckVars, depVarsMap, warn);
516 //Just leave the remaining expressions as stuck. 514 //Just leave the remaining expressions as stuck.
517 break; 515 break;
518 } 516 }
519 } 517 }
520 } 518 }
519 }
520
521 private boolean insideOverloadPhase() {
522 DeferredAttrContext dac = this;
523 if (dac == emptyDeferredAttrContext) {
524 return false;
525 }
526 if (dac.mode == AttrMode.SPECULATIVE) {
527 return true;
528 }
529 return dac.parent.insideOverloadPhase();
521 } 530 }
522 } 531 }
523 532
524 /** 533 /**
525 * Class representing a deferred attribution node. It keeps track of 534 * Class representing a deferred attribution node. It keeps track of
577 return true; 586 return true;
578 } else { 587 } else {
579 return false; 588 return false;
580 } 589 }
581 } else { 590 } else {
591 Assert.check(!deferredAttrContext.insideOverloadPhase(),
592 "attribution shouldn't be happening here");
582 ResultInfo instResultInfo = 593 ResultInfo instResultInfo =
583 resultInfo.dup(deferredAttrContext.inferenceContext.asInstType(resultInfo.pt)); 594 resultInfo.dup(deferredAttrContext.inferenceContext.asInstType(resultInfo.pt));
584 dt.check(instResultInfo, dummyStuckPolicy, basicCompleter); 595 dt.check(instResultInfo, dummyStuckPolicy, basicCompleter);
585 return true; 596 return true;
586 } 597 }

mercurial