X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BreakStatement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BreakStatement.java index a033e1e..0acbc7d 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BreakStatement.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BreakStatement.java @@ -16,69 +16,74 @@ import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo; import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope; public class BreakStatement extends BranchStatement { - + public BreakStatement(Expression expr, int sourceStart, int e) { super(expr, sourceStart, e); } - public FlowInfo analyseCode( - BlockScope currentScope, - FlowContext flowContext, - FlowInfo flowInfo) { + public FlowInfo analyseCode(BlockScope currentScope, + FlowContext flowContext, FlowInfo flowInfo) { - // here requires to generate a sequence of finally blocks invocations depending corresponding - // to each of the traversed try statements, so that execution will terminate properly. + // here requires to generate a sequence of finally blocks invocations + // depending corresponding + // to each of the traversed try statements, so that execution will + // terminate properly. // lookup the label, this should answer the returnContext -// FlowContext targetContext = (label == null) -// ? flowContext.getTargetContextForDefaultBreak() -// : flowContext.getTargetContextForBreakLabel(label); -// -// if (targetContext == null) { -// if (label == null) { -// currentScope.problemReporter().invalidBreak(this); -// } else { -// currentScope.problemReporter().undefinedLabel(this); -// } -// return flowInfo; // pretend it did not break since no actual target -// } -// -// targetLabel = targetContext.breakLabel(); -// FlowContext traversedContext = flowContext; -// int subIndex = 0, maxSub = 5; -// subroutines = new ASTNode[maxSub]; -// -// do { -// ASTNode sub; -// if ((sub = traversedContext.subRoutine()) != null) { -// if (subIndex == maxSub) { -// System.arraycopy(subroutines, 0, (subroutines = new ASTNode[maxSub*=2]), 0, subIndex); // grow -// } -// subroutines[subIndex++] = sub; -// if (sub.cannotReturn()) { -// break; -// } -// } -// traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); -// -// ASTNode node; -// if ((node = traversedContext.associatedNode) instanceof TryStatement) { -// TryStatement tryStatement = (TryStatement) node; -// flowInfo.addInitializationsFrom(tryStatement.subRoutineInits); // collect inits -// } else if (traversedContext == targetContext) { -// // only record break info once accumulated through subroutines, and only against target context -// targetContext.recordBreakFrom(flowInfo); -// break; -// } -// } while ((traversedContext = traversedContext.parent) != null); -// -// // resize subroutines -// if (subIndex != maxSub) { -// System.arraycopy(subroutines, 0, (subroutines = new ASTNode[subIndex]), 0, subIndex); -// } + // FlowContext targetContext = (label == null) + // ? flowContext.getTargetContextForDefaultBreak() + // : flowContext.getTargetContextForBreakLabel(label); + // + // if (targetContext == null) { + // if (label == null) { + // currentScope.problemReporter().invalidBreak(this); + // } else { + // currentScope.problemReporter().undefinedLabel(this); + // } + // return flowInfo; // pretend it did not break since no actual target + // } + // + // targetLabel = targetContext.breakLabel(); + // FlowContext traversedContext = flowContext; + // int subIndex = 0, maxSub = 5; + // subroutines = new ASTNode[maxSub]; + // + // do { + // ASTNode sub; + // if ((sub = traversedContext.subRoutine()) != null) { + // if (subIndex == maxSub) { + // System.arraycopy(subroutines, 0, (subroutines = new + // ASTNode[maxSub*=2]), 0, subIndex); // grow + // } + // subroutines[subIndex++] = sub; + // if (sub.cannotReturn()) { + // break; + // } + // } + // traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); + // + // ASTNode node; + // if ((node = traversedContext.associatedNode) instanceof TryStatement) + // { + // TryStatement tryStatement = (TryStatement) node; + // flowInfo.addInitializationsFrom(tryStatement.subRoutineInits); // + // collect inits + // } else if (traversedContext == targetContext) { + // // only record break info once accumulated through subroutines, and + // only against target context + // targetContext.recordBreakFrom(flowInfo); + // break; + // } + // } while ((traversedContext = traversedContext.parent) != null); + // + // // resize subroutines + // if (subIndex != maxSub) { + // System.arraycopy(subroutines, 0, (subroutines = new + // ASTNode[subIndex]), 0, subIndex); + // } return FlowInfo.DEAD_END; } - + public String toString(int tab) { String s = tabString(tab); @@ -87,15 +92,17 @@ public class BreakStatement extends BranchStatement { s += expression.toString(); return s; } + public StringBuffer printStatement(int tab, StringBuffer output) { printIndent(tab, output).append("break "); //$NON-NLS-1$ - if (expression != null) output.append(expression); + if (expression != null) + output.append(expression); return output.append(';'); } - public void traverse( - IAbstractSyntaxTreeVisitor visitor, - BlockScope blockscope) { + + public void traverse(IAbstractSyntaxTreeVisitor visitor, + BlockScope blockscope) { visitor.visit(this, blockscope); visitor.endVisit(this, blockscope);