equal
deleted
inserted
replaced
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, |