langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java
changeset 24612 75dc732b45af
parent 24604 7f68545b5128
child 25007 eb097d3a68f5
equal deleted inserted replaced
24611:8848a1bca14f 24612:75dc732b45af
  3520          * where #i is a freshly named synthetic local variable.
  3520          * where #i is a freshly named synthetic local variable.
  3521          */
  3521          */
  3522         private void visitIterableForeachLoop(JCEnhancedForLoop tree) {
  3522         private void visitIterableForeachLoop(JCEnhancedForLoop tree) {
  3523             make_at(tree.expr.pos());
  3523             make_at(tree.expr.pos());
  3524             Type iteratorTarget = syms.objectType;
  3524             Type iteratorTarget = syms.objectType;
  3525             Type iterableType = types.asSuper(types.upperBound(tree.expr.type),
  3525             Type iterableType = types.asSuper(types.cvarUpperBound(tree.expr.type),
  3526                                               syms.iterableType.tsym);
  3526                                               syms.iterableType.tsym);
  3527             if (iterableType.getTypeArguments().nonEmpty())
  3527             if (iterableType.getTypeArguments().nonEmpty())
  3528                 iteratorTarget = types.erasure(iterableType.getTypeArguments().head);
  3528                 iteratorTarget = types.erasure(iterableType.getTypeArguments().head);
  3529             Type eType = tree.expr.type;
  3529             Type eType = tree.expr.type;
  3530             while (eType.hasTag(TYPEVAR)) {
  3530             while (eType.hasTag(TYPEVAR)) {
  3554                                        names.next,
  3554                                        names.next,
  3555                                        itvar.type,
  3555                                        itvar.type,
  3556                                        List.<Type>nil());
  3556                                        List.<Type>nil());
  3557             JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next));
  3557             JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next));
  3558             if (tree.var.type.isPrimitive())
  3558             if (tree.var.type.isPrimitive())
  3559                 vardefinit = make.TypeCast(types.upperBound(iteratorTarget), vardefinit);
  3559                 vardefinit = make.TypeCast(types.cvarUpperBound(iteratorTarget), vardefinit);
  3560             else
  3560             else
  3561                 vardefinit = make.TypeCast(tree.var.type, vardefinit);
  3561                 vardefinit = make.TypeCast(tree.var.type, vardefinit);
  3562             JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods,
  3562             JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods,
  3563                                                   tree.var.name,
  3563                                                   tree.var.name,
  3564                                                   tree.var.vartype,
  3564                                                   tree.var.vartype,