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); |
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 } |