3470 * where #i is a freshly named synthetic local variable. |
3470 * where #i is a freshly named synthetic local variable. |
3471 */ |
3471 */ |
3472 private void visitIterableForeachLoop(JCEnhancedForLoop tree) { |
3472 private void visitIterableForeachLoop(JCEnhancedForLoop tree) { |
3473 make_at(tree.expr.pos()); |
3473 make_at(tree.expr.pos()); |
3474 Type iteratorTarget = syms.objectType; |
3474 Type iteratorTarget = syms.objectType; |
3475 Type iterableType = types.asSuper(types.upperBound(tree.expr.type), |
3475 Type iterableType = types.asSuper(types.cvarUpperBound(tree.expr.type), |
3476 syms.iterableType.tsym); |
3476 syms.iterableType.tsym); |
3477 if (iterableType.getTypeArguments().nonEmpty()) |
3477 if (iterableType.getTypeArguments().nonEmpty()) |
3478 iteratorTarget = types.erasure(iterableType.getTypeArguments().head); |
3478 iteratorTarget = types.erasure(iterableType.getTypeArguments().head); |
3479 Type eType = tree.expr.type; |
3479 Type eType = tree.expr.type; |
3480 while (eType.hasTag(TYPEVAR)) { |
3480 while (eType.hasTag(TYPEVAR)) { |
3504 names.next, |
3504 names.next, |
3505 itvar.type, |
3505 itvar.type, |
3506 List.<Type>nil()); |
3506 List.<Type>nil()); |
3507 JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next)); |
3507 JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next)); |
3508 if (tree.var.type.isPrimitive()) |
3508 if (tree.var.type.isPrimitive()) |
3509 vardefinit = make.TypeCast(types.upperBound(iteratorTarget), vardefinit); |
3509 vardefinit = make.TypeCast(types.cvarUpperBound(iteratorTarget), vardefinit); |
3510 else |
3510 else |
3511 vardefinit = make.TypeCast(tree.var.type, vardefinit); |
3511 vardefinit = make.TypeCast(tree.var.type, vardefinit); |
3512 JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods, |
3512 JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods, |
3513 tree.var.name, |
3513 tree.var.name, |
3514 tree.var.vartype, |
3514 tree.var.vartype, |