/** Lower a tree of the form e++ or e-- where e is an object type */ JCTree lowerBoxedPostop(final JCUnary tree) { // translate to tmp1=lval(e); tmp2=tmp1; tmp1 OP 1; tmp2 // or // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2 // where OP is += or -= final boolean cast = tree.arg.tag == JCTree.TYPECAST; final JCExpression arg = cast ? ((JCTypeCast)tree.arg).expr : tree.arg; return abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree tmp1) { return abstractRval(tmp1, tree.arg.type, new TreeBuilder() { public JCTree build(final JCTree tmp2) { int opcode = (tree.tag == JCTree.POSTINC) ? JCTree.PLUS_ASG : JCTree.MINUS_ASG; JCTree lhs = cast ? make.TypeCast(tree.arg.type, (JCExpression)tmp1) : tmp1; JCTree update = makeAssignop(opcode, lhs, make.Literal(1)); return makeComma(update, tmp2); } }); } }); }
/** Lower a tree of the form e++ or e-- where e is an object type */ JCTree lowerBoxedPostop(final JCUnary tree) { // translate to tmp1=lval(e); tmp2=tmp1; tmp1 OP 1; tmp2 // or // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2 // where OP is += or -= final boolean cast = tree.arg.getTag() == JCTree.TYPECAST; final JCExpression arg = cast ? ((JCTypeCast)tree.arg).expr : tree.arg; return abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree tmp1) { return abstractRval(tmp1, tree.arg.type, new TreeBuilder() { public JCTree build(final JCTree tmp2) { int opcode = (tree.getTag() == JCTree.POSTINC) ? JCTree.PLUS_ASG : JCTree.MINUS_ASG; JCTree lhs = cast ? make.TypeCast(tree.arg.type, (JCExpression)tmp1) : tmp1; JCTree update = makeAssignop(opcode, lhs, make.Literal(1)); return makeComma(update, tmp2); } }); } }); }
/** Lower a tree of the form e++ or e-- where e is an object type */ JCTree lowerBoxedPostop(final JCUnary tree) { // translate to tmp1=lval(e); tmp2=tmp1; tmp1 OP 1; tmp2 // or // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2 // where OP is += or -= final boolean cast = TreeInfo.skipParens(tree.arg).hasTag(TYPECAST); return abstractLval(tree.arg, new TreeBuilder() { public JCTree build(final JCTree tmp1) { return abstractRval(tmp1, tree.arg.type, new TreeBuilder() { public JCTree build(final JCTree tmp2) { JCTree.Tag opcode = (tree.hasTag(POSTINC)) ? PLUS_ASG : MINUS_ASG; JCTree lhs = cast ? make.TypeCast(tree.arg.type, (JCExpression)tmp1) : tmp1; JCTree update = makeAssignop(opcode, lhs, make.Literal(1)); return makeComma(update, tmp2); } }); } }); }
/** Lower a tree of the form e++ or e-- where e is an object type */ JCTree lowerBoxedPostop(final JCUnary tree) { // translate to tmp1=lval(e); tmp2=tmp1; tmp1 OP 1; tmp2 // or // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2 // where OP is += or -= final boolean cast = TreeInfo.skipParens(tree.arg).hasTag(TYPECAST); return abstractLval(tree.arg, new TreeBuilder() { public JCTree build(final JCTree tmp1) { return abstractRval(tmp1, tree.arg.type, new TreeBuilder() { public JCTree build(final JCTree tmp2) { JCTree.Tag opcode = (tree.hasTag(POSTINC)) ? PLUS_ASG : MINUS_ASG; JCTree lhs = cast ? make.TypeCast(tree.arg.type, (JCExpression)tmp1) : tmp1; JCTree update = makeAssignop(opcode, lhs, make.Literal(1)); return makeComma(update, tmp2); } }); } }); }
return abstractLval(((JCTypeCast)lval).expr, builder);
return abstractLval(((JCTypeCast)lval).expr, builder);
? ((JCTypeCast)tree.lhs).expr : tree.lhs; JCTree newTree = abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree lhs) { int newTag = tree.tag - JCTree.ASGOffset;
? ((JCTypeCast)tree.lhs).expr : tree.lhs; JCTree newTree = abstractLval(arg, new TreeBuilder() { public JCTree build(final JCTree lhs) { int newTag = tree.getTag() - JCTree.ASGOffset;
JCTree newTree = abstractLval(tree.lhs, new TreeBuilder() { public JCTree build(final JCTree lhs) { JCTree.Tag newTag = tree.getTag().noAssignOp();
JCTree newTree = abstractLval(tree.lhs, new TreeBuilder() { public JCTree build(final JCTree lhs) { JCTree.Tag newTag = tree.getTag().noAssignOp();