coins.ir.hir
Class IfStmtImpl

java.lang.Object
  extended bycoins.ir.hir.HIR_Impl
      extended bycoins.ir.hir.StmtImpl
          extended bycoins.ir.hir.IfStmtImpl
All Implemented Interfaces:
java.lang.Cloneable, HasStringObject, HIR, HIR0, IfStmt, IR, IR0, Stmt

public class IfStmtImpl
extends StmtImpl
implements IfStmt

If-statement class. If then-part is not given, NullNode with label is inserted. (2001/6)


Field Summary
 
Fields inherited from class coins.ir.hir.StmtImpl
fMultiBlock, fNextStmt, fPrevStmt
 
Fields inherited from class coins.ir.hir.HIR_Impl
fAdditionalChild, fChildCount, fChildNode1, fChildNode2, fDbgLevel, fHirAnnex, fOperator, fParentNode, fType, hirRoot, inversionTable, machineParam, sourceLanguage
 
Fields inherited from interface coins.ir.hir.HIR
OP_CODE_NAME, OP_CODE_NAME_DENSE
 
Fields inherited from interface coins.ir.IR
OP_INF, OP_LIST, OP_PROG, OP_SUBP_DEF
 
Fields inherited from interface coins.ir.hir.HIR0
FLAG_C_PTR, FLAG_CONST_EXP, FLAG_INIT_BLOCK, FLAG_LOOP_WITH_CONDITIONAL_INIT, FLAG_NOCHANGE, FLAG_NONTERMINAL, OP_ADD, OP_ADD_ASSIGN, OP_ADDR, OP_AND, OP_AND_ASSIGN, OP_ARROW, OP_ASM, OP_ASSIGN, OP_BLOCK, OP_CALL, OP_CMP_EQ, OP_CMP_GE, OP_CMP_GT, OP_CMP_LE, OP_CMP_LT, OP_CMP_NE, OP_COMMA, OP_CONST, OP_CONTENTS, OP_CONV, OP_DECAY, OP_DIV, OP_DIV_ASSIGN, OP_ELEM, OP_ENCLOSE, OP_EQ_ZERO, OP_EXP_STMT, OP_EXPLIST, OP_EXPREPEAT, OP_FOR, OP_IF, OP_INDEX, OP_INDEXED_LOOP, OP_JUMP, OP_LABEL, OP_LABEL_DEF, OP_LABELED_STMT, OP_LG_AND, OP_LG_OR, OP_MOD, OP_MOD_ASSIGN, OP_MULT, OP_MULT_ASSIGN, OP_NEG, OP_NOT, OP_NULL, OP_OFFSET, OP_OR, OP_OR_ASSIGN, OP_PARAM, OP_PHI, OP_POST_DECR, OP_POST_INCR, OP_PRE_DECR, OP_PRE_INCR, OP_QUAL, OP_REPEAT, OP_RETURN, OP_SELECT, OP_SEQ, OP_SETDATA, OP_SHIFT_L_ASSIGN, OP_SHIFT_LL, OP_SHIFT_R, OP_SHIFT_R_ASSIGN, OP_SHIFT_RL, OP_SIZEOF, OP_STMT, OP_STMT_UPPER, OP_SUB, OP_SUB_ASSIGN, OP_SUBP, OP_SUBS, OP_SWITCH, OP_SYM, OP_TYPE, OP_UNDECAY, OP_UNTIL, OP_VAR, OP_WHILE, OP_XOR, OP_XOR_ASSIGN
 
Constructor Summary
IfStmtImpl(HirRoot pHirRoot, Exp pCondition, Stmt pThenPart, Stmt pElsePart)
           
 
Method Summary
 void accept(HirVisitor pVisitor)
          accept Acceptor used in HIR visitor.
 void addToElsePart(Stmt pStmt, boolean pBeforeBranch)
          addToElsePart Add pStmt to the tail of else-part of this if-statement.
 void addToThenPart(Stmt pStmt, boolean pBeforeBranch)
          addToThenPart Add pStmt to the tail of then-part of this if-statement.
 void combineWithConditionalExp(Stmt pStmt, HIR pCond)
          Combine pStmt with conditional expression part pCond of control statement so that pStmt should be executed before pCond.
 LabeledStmt getElsePart()
          getElsePart Get the else-part of if-statement.
 Label getEndLabel()
          getEndLabel (##2) Get the end label of if-statement.
 Exp getIfCondition()
          getIfCondition Get the condition part of if-statement.
 LabeledStmt getThenPart()
          getThenPart Get the then-part of if-statement.
 void replaceElsePart(LabeledStmt pNewElsePart)
          replaceThenPart Replace the else-part of this if-statement by pNewElsePart.
 void replaceThenPart(LabeledStmt pNewThenPart)
          replaceThenPart Replace the then-part of this if-statement by pNewThenPart.
 void setIfCondition(Exp pCondition)
          setIfCondition Set the condition part of if-statement.
 
Methods inherited from class coins.ir.hir.StmtImpl
addNextStmt, addNextStmt, adjustMultiBlockFlag, adjustMultiBlockFlag, ancestorControlStmtOfConditionalExp, attachLabel, attachLabelAsFirstOne, backTraceLabeledStmt, clone, combineStmt, copyPosition, cutLabelLinkOfStmt, deleteNextStmt, deletePreviousStmt, deleteThisStmt, getBlockStmt, getFileName, getLabel, getLabelDefList, getLabeledStmt, getLineNumber, getNextStmt, getPreviousStmt, getStmtWithLabel, getUpperStmt, insertPreviousStmt, insertPreviousStmt, isBranchStmt, isLoopStmt, isMultiBlock, isolateThisStmt, printLinkage, replaceThisStmtWith, setFileName, setLineNumber, toStringDetail, traceFirstStmt, traceLastStmt
 
Methods inherited from class coins.ir.hir.HIR_Impl
addInf, addrExp, asmStmt, assignStmt, blockStmt, callStmt, checkLinkage, conditionalExp, conditionalExp1, constNode, contains, contentsExp, convExp, copyInfListFrom, copyWithOperands, copyWithOperandsChangingLabels, cutParentLink, cutParentLink, decayExp, elemNode, exp, exp, exp, expList, expRepeat, expStmt, falseNode, fatalError, finishHir, flagsAreAllFalse, forStmt, forStmt, functionExp, getChild, getChild1, getChild2, getChildCount, getChildNumber, getClone, getExpId, getFlag, getFlagBox, getFlowAnalSym, getIndentSpace, getIndex, getInf, getInfList, getInfString, getIrName, getNextNode, getNextNodeSeeingAncestor, getOperator, getParent, getResultOperand, getResultVar, getSourceNode, getSourceNode1, getSourceNode2, getStmtContainingThisNode, getSym, getSymOrExpId, getType, getWork, hirClone, hirIterator, hirList, hirNodeClone, hirSeq, hirSeq, hirSeq, ifStmt, indexedLoopStmt, indexedLoopStmt, infStmt, infStmt, intConstNode, intConstNode, irList, irList, isEmpty, isHIR, isLIR, isSameAs, isStmt, isSym, isTerminal, isTree, isTree, jumpStmt, labelDef, labeledStmt, labelNode, nullNode, nullStmt, offsetConstNode, phiExp, pointedExp, print, print, program, qualifiedExp, removeInf, repeatStmt, repeatStmt, replaceOperator, replaceResultOperand, replaceResultVar, replaceSource, replaceSource1, replaceSource2, replaceThisNode, returnStmt, returnStmt, setChild, setChild1, setChild2, setChildren, setChildren, setChildren, setChildren, setDataStmt, setFlag, setIndex, setIndexNumberToAllNodes, setIndexNumberToAllNodes, setIndexNumberToAllNodes2, setParameters, setParent, setType, setWork, severeError, sizeofExp, sizeofExp, slightError, subpDefinition, subpDefinition, subpDefinition, subpIterator, subpNode, subscriptedExp, subscriptedExp, switchStmt, symNode, toString, toStringShort, toStringWithChildren, trueNode, typeNode, undecayExp, undecayExp, undecayExp, undecayExp, varNode, warinig, whileStmt, whileStmt, withInf
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface coins.ir.hir.Stmt
addNextStmt, ancestorControlStmtOfConditionalExp, attachLabel, attachLabelAsFirstOne, combineStmt, copyPosition, cutLabelLinkOfStmt, deleteThisStmt, getBlockStmt, getFileName, getLabel, getLabelDefList, getLabeledStmt, getLineNumber, getPreviousStmt, getUpperStmt, insertPreviousStmt, insertPreviousStmt, isBranchStmt, isMultiBlock, isolateThisStmt, replaceThisStmtWith, setFileName, setLineNumber
 
Methods inherited from interface coins.ir.hir.HIR
addrExp, asmStmt, checkLinkage, conditionalExp, contains, copyInfListFrom, cutParentLink, exp, expList, expRepeat, forStmt, getExpId, getFlowAnalSym, getIndentSpace, getInfString, getIrName, getSourceNode, getSourceNode1, getSourceNode2, getSymOrExpId, getWork, hirNodeClone, hirSeq, hirSeq, indexedLoopStmt, indexedLoopStmt, infStmt, infStmt, intConstNode, irList, isEmpty, isStmt, isTree, nullNode, nullStmt, offsetConstNode, phiExp, repeatStmt, replaceSource, replaceSource1, replaceSource2, returnStmt, setChild1, setChild2, setChildren, setChildren, setDataStmt, setIndex, setIndexNumberToAllNodes, setParent, setType, setWork, subpDefinition, subpIterator, subscriptedExp, toString, toStringDetail, toStringShort, toStringWithChildren, undecayExp, undecayExp, undecayExp, whileStmt
 
Methods inherited from interface coins.ir.IR
addInf, getChild1, getChild2, getInf, getInfList, getParent, getSym, print, print, removeInf
 
Methods inherited from interface coins.ir.IR0
getChild, getChildCount, getIndex, getOperator, setChild
 
Methods inherited from interface coins.ir.hir.HIR0
assignStmt, blockStmt, callStmt, constNode, contentsExp, convExp, copyWithOperands, copyWithOperandsChangingLabels, decayExp, elemNode, exp, exp, expStmt, falseNode, finishHir, forStmt, functionExp, getChildNumber, getFlag, getFlagBox, getNextStmt, getStmtContainingThisNode, getType, hirClone, hirIterator, hirList, hirSeq, ifStmt, intConstNode, irList, isSameAs, jumpStmt, labelDef, labeledStmt, labelNode, pointedExp, print, program, qualifiedExp, repeatStmt, replaceThisNode, returnStmt, setFlag, setIndexNumberToAllNodes, sizeofExp, sizeofExp, subpDefinition, subpNode, subscriptedExp, switchStmt, symNode, trueNode, undecayExp, varNode, whileStmt
 

Constructor Detail

IfStmtImpl

public IfStmtImpl(HirRoot pHirRoot,
                  Exp pCondition,
                  Stmt pThenPart,
                  Stmt pElsePart)
Method Detail

getIfCondition

public Exp getIfCondition()
getIfCondition Get the condition part of if-statement. "this" should be IfStmt statement built by buildIf.

Specified by:
getIfCondition in interface IfStmt
Returns:
the pCondition expression subtree if "this" is if-statement, otherwise return null.

setIfCondition

public void setIfCondition(Exp pCondition)
Description copied from interface: IfStmt
setIfCondition Set the condition part of if-statement. "this" should be IfStmt statement built by ifStmt.

Specified by:
setIfCondition in interface IfStmt
Parameters:
pCondition - Condition expression to be set.

getThenPart

public LabeledStmt getThenPart()
Description copied from interface: IfStmt
getThenPart Get the then-part of if-statement. "this" should be IfStmt statement built by ifStmt.

Specified by:
getThenPart in interface IfStmt
Returns:
the pThenPart subtree if "this" is if-statement, otherwise return null.

getElsePart

public LabeledStmt getElsePart()
Description copied from interface: IfStmt
getElsePart Get the else-part of if-statement. "this" should be IfStmt statement built by ifStmt.

Specified by:
getElsePart in interface IfStmt
Returns:
the pElsePart subtree if "this" is if-statement, otherwise return null.

getEndLabel

public Label getEndLabel()
Description copied from interface: IfStmt
getEndLabel (##2) Get the end label of if-statement. The end label is a label indicating the end of if-statement. "this" should be IfStmt statement built by ifStmt.

Specified by:
getEndLabel in interface IfStmt
Returns:
the end label of this if-statement.

addToThenPart

public void addToThenPart(Stmt pStmt,
                          boolean pBeforeBranch)
Description copied from interface: IfStmt
addToThenPart Add pStmt to the tail of then-part of this if-statement. If pBeforeBranch is true, the addition is made before a branch statement in the then-part if there is a branch. If then-part is a non-block statement, then it is changed to a block statement containing pStmt. The then-part should not be null.

Specified by:
addToThenPart in interface IfStmt
Parameters:
pStmt - Statement to be added.
pBeforeBranch - true if addition before branch point.

addToElsePart

public void addToElsePart(Stmt pStmt,
                          boolean pBeforeBranch)
Description copied from interface: IfStmt
addToElsePart Add pStmt to the tail of else-part of this if-statement. If pBeforeBranch is true, the addition is made before a branch statement in the else-part if there is a branch. If else-part is a non-block statement, then it is changed to a block statement containing pStmt. The else-part should not be null.

Specified by:
addToElsePart in interface IfStmt
Parameters:
pStmt - Statement to be added.
pBeforeBranch - true if addition before branch point.

replaceThenPart

public void replaceThenPart(LabeledStmt pNewThenPart)
Description copied from interface: IfStmt
replaceThenPart Replace the then-part of this if-statement by pNewThenPart. The label kind of the label in pNewThenPart is set to Label.THEN_LABEL.

Specified by:
replaceThenPart in interface IfStmt
Parameters:
pNewThenPart - Statement used for replacement.

replaceElsePart

public void replaceElsePart(LabeledStmt pNewElsePart)
Description copied from interface: IfStmt
replaceThenPart Replace the else-part of this if-statement by pNewElsePart. The label kind of the label in pNewElsePart is set to Label.ELSE_LABEL.

Specified by:
replaceElsePart in interface IfStmt
Parameters:
pNewElsePart - Statement used for replacement.

combineWithConditionalExp

public void combineWithConditionalExp(Stmt pStmt,
                                      HIR pCond)
Combine pStmt with conditional expression part pCond of control statement so that pStmt should be executed before pCond.

Specified by:
combineWithConditionalExp in interface Stmt
Overrides:
combineWithConditionalExp in class StmtImpl
Parameters:
pStmt - statement to be executed before pCond.
pCond - conditional expression to be combined with pStmt.

accept

public void accept(HirVisitor pVisitor)
Description copied from interface: HIR0
accept Acceptor used in HIR visitor. See HirVisitor, HirVisitorModel1, HirVisitormodel2.

Specified by:
accept in interface HIR0
Overrides:
accept in class HIR_Impl