X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/flow/InsideSubRoutineFlowContext.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/flow/InsideSubRoutineFlowContext.java index 3ed888f..e927a45 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/flow/InsideSubRoutineFlowContext.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/flow/InsideSubRoutineFlowContext.java @@ -1,16 +1,16 @@ /******************************************************************************* - * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others. + * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v0.5 + * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v05.html + * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation - ******************************************************************************/ + *******************************************************************************/ package net.sourceforge.phpdt.internal.compiler.flow; -import net.sourceforge.phpdt.internal.compiler.ast.AstNode; +import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode; /** * Reflects the context of code analysis, keeping track of enclosing @@ -22,21 +22,37 @@ public class InsideSubRoutineFlowContext extends FlowContext { public InsideSubRoutineFlowContext( FlowContext parent, - AstNode associatedNode) { + ASTNode associatedNode) { super(parent, associatedNode); - this.initsOnReturn = FlowInfo.DeadEnd; + this.initsOnReturn = FlowInfo.DEAD_END; } - + + public String individualToString() { + + StringBuffer buffer = new StringBuffer("Inside SubRoutine flow context"); //$NON-NLS-1$ + buffer.append("[initsOnReturn -").append(initsOnReturn.toString()).append(']'); //$NON-NLS-1$ + return buffer.toString(); + } + + public UnconditionalFlowInfo initsOnReturn(){ + return this.initsOnReturn; + } + public boolean isNonReturningContext() { return associatedNode.cannotReturn(); } - public AstNode subRoutine() { + public ASTNode subRoutine() { return associatedNode; } - public void recordReturnFrom(UnconditionalFlowInfo flowInfo) { - // record initializations which were performed at the return point - initsOnReturn = initsOnReturn.mergedWith(flowInfo); + public void recordReturnFrom(FlowInfo flowInfo) { + + if (!flowInfo.isReachable()) return; + if (initsOnReturn == FlowInfo.DEAD_END) { + initsOnReturn = flowInfo.copy().unconditionalInits(); + } else { + initsOnReturn = initsOnReturn.mergedWith(flowInfo.unconditionalInits()); + } } -} \ No newline at end of file +}