diff -r 01ea334ab39a -r ccbd9cd3f720 nashorn/src/jdk/nashorn/internal/ir/debug/PrintVisitor.java --- a/nashorn/src/jdk/nashorn/internal/ir/debug/PrintVisitor.java Mon May 05 14:17:20 2014 +0200 +++ b/nashorn/src/jdk/nashorn/internal/ir/debug/PrintVisitor.java Tue May 13 11:30:40 2014 +0200 @@ -29,18 +29,25 @@ import jdk.nashorn.internal.ir.BinaryNode; import jdk.nashorn.internal.ir.Block; import jdk.nashorn.internal.ir.BlockStatement; +import jdk.nashorn.internal.ir.BreakNode; import jdk.nashorn.internal.ir.CaseNode; import jdk.nashorn.internal.ir.CatchNode; +import jdk.nashorn.internal.ir.ContinueNode; import jdk.nashorn.internal.ir.ExpressionStatement; import jdk.nashorn.internal.ir.ForNode; import jdk.nashorn.internal.ir.FunctionNode; +import jdk.nashorn.internal.ir.IdentNode; import jdk.nashorn.internal.ir.IfNode; +import jdk.nashorn.internal.ir.JoinPredecessor; +import jdk.nashorn.internal.ir.JoinPredecessorExpression; import jdk.nashorn.internal.ir.LabelNode; import jdk.nashorn.internal.ir.LexicalContext; +import jdk.nashorn.internal.ir.LocalVariableConversion; import jdk.nashorn.internal.ir.Node; import jdk.nashorn.internal.ir.SplitNode; import jdk.nashorn.internal.ir.Statement; import jdk.nashorn.internal.ir.SwitchNode; +import jdk.nashorn.internal.ir.ThrowNode; import jdk.nashorn.internal.ir.TryNode; import jdk.nashorn.internal.ir.UnaryNode; import jdk.nashorn.internal.ir.VarNode; @@ -140,6 +147,27 @@ } @Override + public boolean enterContinueNode(final ContinueNode node) { + node.toString(sb); + printLocalVariableConversion(node); + return false; + } + + @Override + public boolean enterBreakNode(final BreakNode node) { + node.toString(sb); + printLocalVariableConversion(node); + return false; + } + + @Override + public boolean enterThrowNode(final ThrowNode node) { + node.toString(sb); + printLocalVariableConversion(node); + return false; + } + + @Override public boolean enterBlock(final Block block) { sb.append(' '); sb.append('{'); @@ -190,6 +218,7 @@ sb.append(EOLN); indent(); sb.append('}'); + printLocalVariableConversion(block); return false; } @@ -211,6 +240,24 @@ } @Override + public boolean enterJoinPredecessorExpression(JoinPredecessorExpression expr) { + expr.getExpression().accept(this); + printLocalVariableConversion(expr); + return false; + } + + @Override + public boolean enterIdentNode(IdentNode identNode) { + identNode.toString(sb); + printLocalVariableConversion(identNode); + return true; + } + + private void printLocalVariableConversion(final JoinPredecessor joinPredecessor) { + LocalVariableConversion.toString(joinPredecessor.getLocalVariableConversion(), sb); + } + + @Override public boolean enterUnaryNode(final UnaryNode unaryNode) { unaryNode.toString(sb, new Runnable() { @Override @@ -252,7 +299,12 @@ sb.append(" else "); fail.accept(this); } - + if(ifNode.getLocalVariableConversion() != null) { + assert fail == null; + sb.append(" else "); + printLocalVariableConversion(ifNode); + sb.append(";"); + } return false; } @@ -263,7 +315,7 @@ indent += TABWIDTH; labeledNode.toString(sb); labeledNode.getBody().accept(this); - + printLocalVariableConversion(labeledNode); return false; } @@ -296,12 +348,19 @@ sb.append(EOLN); indent(); caseNode.toString(sb); + printLocalVariableConversion(caseNode); indent += TABWIDTH; caseNode.getBody().accept(this); indent -= TABWIDTH; sb.append(EOLN); } - + if(switchNode.getLocalVariableConversion() != null) { + sb.append(EOLN); + indent(); + sb.append("default: "); + printLocalVariableConversion(switchNode); + sb.append("{}"); + } sb.append(EOLN); indent(); sb.append("}"); @@ -312,6 +371,7 @@ @Override public boolean enterTryNode(final TryNode tryNode) { tryNode.toString(sb); + printLocalVariableConversion(tryNode); tryNode.getBody().accept(this); final List catchBlocks = tryNode.getCatchBlocks(); @@ -336,6 +396,7 @@ public boolean enterVarNode(final VarNode varNode) { sb.append("var "); varNode.getName().toString(sb); + printLocalVariableConversion(varNode.getName()); final Node init = varNode.getInit(); if (init != null) { sb.append(" = "); @@ -347,6 +408,7 @@ @Override public boolean enterWhileNode(final WhileNode whileNode) { + printLocalVariableConversion(whileNode); if (whileNode.isDoWhile()) { sb.append("do"); whileNode.getBody().accept(this);