package cfg.C;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import cfg.CFG;
import cfg.nodes.CFGNode;
public class CCFG extends CFG
{
private List<CFGNode> breakStatements;
private List<CFGNode> continueStatements;
private List<CFGNode> returnStatements;
private HashMap<CFGNode, String> gotoStatements;
private HashMap<String, CFGNode> labels;
public CCFG()
{
super();
setBreakStatements(new LinkedList<CFGNode>());
setContinueStatements(new LinkedList<CFGNode>());
setReturnStatements(new LinkedList<CFGNode>());
setGotoStatements(new HashMap<CFGNode, String>());
setLabels(new HashMap<String, CFGNode>());
}
public List<CFGNode> getBreakStatements()
{
return breakStatements;
}
public void setBreakStatements(List<CFGNode> breakStatements)
{
this.breakStatements = breakStatements;
}
public List<CFGNode> getContinueStatements()
{
return continueStatements;
}
public void setContinueStatements(List<CFGNode> continueStatements)
{
this.continueStatements = continueStatements;
}
public HashMap<String, CFGNode> getLabels()
{
return labels;
}
public void setLabels(HashMap<String, CFGNode> labels)
{
this.labels = labels;
}
public HashMap<CFGNode, String> getGotoStatements()
{
return gotoStatements;
}
public void setGotoStatements(HashMap<CFGNode, String> gotoStatements)
{
this.gotoStatements = gotoStatements;
}
public List<CFGNode> getReturnStatements()
{
return returnStatements;
}
public void setReturnStatements(List<CFGNode> returnStatements)
{
this.returnStatements = returnStatements;
}
public void addBlockLabel(String label, CFGNode block)
{
getLabels().put(label, block);
}
public void addBreakStatement(CFGNode statement)
{
getBreakStatements().add(statement);
}
public void addContinueStatement(CFGNode statement)
{
getContinueStatements().add(statement);
}
public void addGotoStatement(CFGNode gotoStatement, String gotoTarget)
{
getGotoStatements().put(gotoStatement, gotoTarget);
}
public void addReturnStatement(CFGNode returnStatement)
{
getReturnStatements().add(returnStatement);
}
public CFGNode getBlockByLabel(String label)
{
CFGNode block = getLabels().get(label);
if (block == null)
{
System.err.println("warning : can not find block for label "
+ label);
return getErrorNode();
}
return block;
}
@Override
public void addCFG(CFG o)
{
CCFG otherCFG = (CCFG) o;
super.addCFG(otherCFG);
getParameters().addAll(otherCFG.getParameters());
getBreakStatements().addAll(otherCFG.getBreakStatements());
getContinueStatements().addAll(otherCFG.getContinueStatements());
getReturnStatements().addAll(otherCFG.getReturnStatements());
getGotoStatements().putAll(otherCFG.getGotoStatements());
getLabels().putAll(otherCFG.getLabels());
}
}