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

changeset 2567
9a3e5ce68cef
parent 2564
ced008063508
child 2702
9ca8d8713094
child 2730
a513711d6171
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Tue Sep 09 10:43:06 2014 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Wed Jul 09 10:49:32 2014 -0400
     1.3 @@ -497,13 +497,11 @@
     1.4                      }
     1.5                  }
     1.6                  if (!progress) {
     1.7 -                    DeferredAttrContext dac = this;
     1.8 -                    while (dac != emptyDeferredAttrContext) {
     1.9 -                        if (dac.mode == AttrMode.SPECULATIVE) {
    1.10 -                            //unsticking does not take place during overload
    1.11 -                            break;
    1.12 +                    if (insideOverloadPhase()) {
    1.13 +                        for (DeferredAttrNode deferredNode: deferredAttrNodes) {
    1.14 +                            deferredNode.dt.tree.type = Type.noType;
    1.15                          }
    1.16 -                        dac = dac.parent;
    1.17 +                        return;
    1.18                      }
    1.19                      //remove all variables that have already been instantiated
    1.20                      //from the list of stuck variables
    1.21 @@ -519,6 +517,17 @@
    1.22                  }
    1.23              }
    1.24          }
    1.25 +
    1.26 +        private boolean insideOverloadPhase() {
    1.27 +            DeferredAttrContext dac = this;
    1.28 +            if (dac == emptyDeferredAttrContext) {
    1.29 +                return false;
    1.30 +            }
    1.31 +            if (dac.mode == AttrMode.SPECULATIVE) {
    1.32 +                return true;
    1.33 +            }
    1.34 +            return dac.parent.insideOverloadPhase();
    1.35 +        }
    1.36      }
    1.37  
    1.38      /**
    1.39 @@ -579,6 +588,8 @@
    1.40                              return false;
    1.41                          }
    1.42                      } else {
    1.43 +                        Assert.check(!deferredAttrContext.insideOverloadPhase(),
    1.44 +                                "attribution shouldn't be happening here");
    1.45                          ResultInfo instResultInfo =
    1.46                                  resultInfo.dup(deferredAttrContext.inferenceContext.asInstType(resultInfo.pt));
    1.47                          dt.check(instResultInfo, dummyStuckPolicy, basicCompleter);

mercurial