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

changeset 33
ec29a1a284ca
parent 4
3c2d13c42e0a
child 54
eaf608c64fec
equal deleted inserted replaced
31:627deea1ea4f 33:ec29a1a284ca
2861 JCBinary cond = makeBinary(JCTree.LT, make.Ident(index), make.Ident(lencache)); 2861 JCBinary cond = makeBinary(JCTree.LT, make.Ident(index), make.Ident(lencache));
2862 2862
2863 JCExpressionStatement step = make.Exec(makeUnary(JCTree.PREINC, make.Ident(index))); 2863 JCExpressionStatement step = make.Exec(makeUnary(JCTree.PREINC, make.Ident(index)));
2864 2864
2865 Type elemtype = types.elemtype(tree.expr.type); 2865 Type elemtype = types.elemtype(tree.expr.type);
2866 JCStatement loopvarinit = make. 2866 JCExpression loopvarinit = make.Indexed(make.Ident(arraycache),
2867 VarDef(tree.var.sym, 2867 make.Ident(index)).setType(elemtype);
2868 make. 2868 JCVariableDecl loopvardef = (JCVariableDecl)make.VarDef(tree.var.mods,
2869 Indexed(make.Ident(arraycache), make.Ident(index)). 2869 tree.var.name,
2870 setType(elemtype)); 2870 tree.var.vartype,
2871 loopvarinit).setType(tree.var.type);
2872 loopvardef.sym = tree.var.sym;
2871 JCBlock body = make. 2873 JCBlock body = make.
2872 Block(0, List.of(loopvarinit, tree.body)); 2874 Block(0, List.of(loopvardef, tree.body));
2873 2875
2874 result = translate(make. 2876 result = translate(make.
2875 ForLoop(loopinit, 2877 ForLoop(loopinit,
2876 cond, 2878 cond,
2877 List.of(step), 2879 List.of(step),
2942 itvar.type, 2944 itvar.type,
2943 List.<Type>nil()); 2945 List.<Type>nil());
2944 JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next)); 2946 JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next));
2945 if (iteratorTarget != syms.objectType) 2947 if (iteratorTarget != syms.objectType)
2946 vardefinit = make.TypeCast(iteratorTarget, vardefinit); 2948 vardefinit = make.TypeCast(iteratorTarget, vardefinit);
2947 JCVariableDecl indexDef = make.VarDef(tree.var.sym, vardefinit); 2949 JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods,
2950 tree.var.name,
2951 tree.var.vartype,
2952 vardefinit).setType(tree.var.type);
2953 indexDef.sym = tree.var.sym;
2948 JCBlock body = make.Block(0, List.of(indexDef, tree.body)); 2954 JCBlock body = make.Block(0, List.of(indexDef, tree.body));
2949 result = translate(make. 2955 result = translate(make.
2950 ForLoop(List.of(init), 2956 ForLoop(List.of(init),
2951 cond, 2957 cond,
2952 List.<JCExpressionStatement>nil(), 2958 List.<JCExpressionStatement>nil(),

mercurial