blob: 9cfcaf11b0b3791de8a355d16ed7731c882eead5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 xored software, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.internal.javascript.validation;
public class FlowStatus {
boolean isBreak;
boolean returnThrow;
boolean returnValue;
boolean returnWithoutValue;
boolean noReturn;
public void add(FlowStatus value) {
if (value != null) {
isBreak |= value.isBreak;
returnThrow |= value.returnThrow;
returnValue |= value.returnValue;
returnWithoutValue |= value.returnWithoutValue;
noReturn = value.noReturn || !value.isAnyReturn();
} else {
noReturn = true;
}
}
public void addCase(FlowStatus value) {
if (value != null) {
isBreak |= value.isBreak;
returnThrow |= value.returnThrow;
returnValue |= value.returnValue;
returnWithoutValue |= value.returnWithoutValue;
}
}
public boolean isTerminated() {
return isBreak || isReturned();
}
public boolean isAnyReturn() {
return returnThrow || returnValue || returnWithoutValue;
}
public boolean isReturned() {
return isAnyReturn() && !noReturn;
}
public void addBranch(FlowStatus branch) {
if (branch != null) {
if (noReturn != branch.noReturn)
noReturn = true;
if (returnValue != branch.returnValue)
returnValue = true;
if (returnWithoutValue != branch.returnWithoutValue)
returnWithoutValue = true;
} else {
noReturn = true;
}
}
}