coins.ir.hir
インタフェース Stmt

すべてのスーパーインタフェース:
java.lang.Cloneable, HIR, HIR0, IR, IR0
既知のサブインタフェースの一覧:
AsmStmt, AssignStmt, BlockStmt, ExpStmt, ForStmt, IfStmt, IndexedLoopStmt, InfStmt, JumpStmt, LabeledStmt, LoopStmt, RepeatStmt, ReturnStmt, SetDataStmt, SwitchStmt, UntilStmt, WhileStmt
既知の実装クラスの一覧:
AsmStmtImpl, AssignStmtImpl, BlockStmtImpl, ExpStmtImpl, ForStmtImpl, IfStmtImpl, IndexedLoopStmtImpl, InfStmtImpl, JumpStmtImpl, LabeledStmtImpl, LoopStmtImpl, RepeatStmtImpl, ReturnStmtImpl, SetDataStmtImpl, StmtImpl, SwitchStmtImpl, UntilStmtImpl, WhileStmtImpl

public interface Stmt
extends HIR

Stmt Stmt (statement) class interface. Stmt is a subclass of HIR. See HIR.


フィールドの概要
 
インタフェース coins.ir.hir.HIR から継承したフィールド
OP_CODE_NAME, OP_CODE_NAME_DENSE
 
インタフェース coins.ir.IR から継承したフィールド
OP_INF, OP_LIST, OP_PROG, OP_SUBP_DEF
 
インタフェース 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
 
メソッドの概要
 Stmt addNextStmt(Stmt pStatement)
          addNextStmt Add a statement as the one next to this statement.
 Stmt ancestorControlStmtOfConditionalExp(HIR pHir)
          Get the ancestor control statement (IfStmt, LoopStmt, SwitchStmt) containing pHir as conditional Exp or ExpStmt.
 LabeledStmt attachLabel(Label pLabel)
          attachLabel Attach the definition of a label (pLabel) to this statement. (##2) A statement may have multiple labels (list of labels). (##2) If this statement has already a label different from pLabel, then pLabel is added as the last label attached to the statement. (##2) If pLabel is already attached to this statement, then pLabel is not attached to avoid duplication.
 LabeledStmt attachLabelAsFirstOne(Label pLabel)
          attachLabelAsFirstOne Attach pLabel as the first label of this statement.
 Stmt combineStmt(Stmt pStmt, boolean pBeforeBranch)
          combineStmt Combine this statement and pStmt making them as one 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.
 void copyPosition(Stmt pStmt)
          Copy the file name and line number of pStatement to this statement.
 void cutLabelLinkOfStmt(Stmt pStmt)
          cutLabelLinkOfStmt For labels defined in pStmt, execute setHirPosition(null) to prepare for deletion of pStmt.
 Stmt deleteThisStmt()
          deleteThisStmt Delete this statement and return the next statement.
 BlockStmt getBlockStmt()
          getBlockStmt Get the block statement containing this statement.
 java.lang.String getFileName()
          Get the absolute path of the file containing this statement (see setFileName method).
 Label getLabel()
          getLabel Get the label attached to this statement.
 IrList getLabelDefList()
           
 LabeledStmt getLabeledStmt()
          getLabeledStmt
 int getLineNumber()
          Get the line number of this statement.
 Stmt getPreviousStmt()
          getPreviousStmt Get the statement previous to this one.
 Stmt getUpperStmt()
          Get the statement that includes this statement.
 Stmt insertPreviousStmt(Stmt pStatement)
          insertPreviousStmt Insert a statement in front of "this" one.
 Stmt insertPreviousStmt(Stmt pStatement, BlockStmt pBlock)
          insertPreviousStmt Insert a statement in front of "this" one.
 boolean isBranchStmt()
          isBranch Return true if this statement is either //##60 IfStmt, JumpStmt, SwitchStmt, CallStmt, ReturnStmt, JumpStmt, ReturnStmt, //##60 or LabeledStmt with one of above statement body.
 boolean isMultiBlock()
          isMultiBlock true if this statement is composed of multiple basic blocks or a jump statement.
 void isolateThisStmt()
          isolateThisStmt Cut previous/next link and parent link of this statement.
 Stmt replaceThisStmtWith(Stmt pStmt)
          replaceThisStmtWith Replace this statement with pStmt which is made to have the same linkage with other nodes as this statement and this statement is made isolated.
 void setFileName(java.lang.String pFileName)
           Set the absolute path of the source program file containing this statement.
 void setLineNumber(int pLineNumber)
          Set the line number of this statement within the file specified by setFileName.
 
インタフェース 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
 
インタフェース coins.ir.IR から継承したメソッド
addInf, getChild1, getChild2, getInf, getInfList, getParent, getSym, print, print, removeInf
 
インタフェース coins.ir.IR0 から継承したメソッド
getChild, getChildCount, getIndex, getOperator, setChild
 
インタフェース coins.ir.hir.HIR0 から継承したメソッド
accept, 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
 

メソッドの詳細

addNextStmt

public Stmt addNextStmt(Stmt pStatement)
addNextStmt
  Add a statement as the one next to this statement.
  If "this" is included directly in a block, append pStatement as the
  next statement. If "this" is the last statement in the block, then
  pStatement becomes the last statement in the block.
  If "this" is not included directly in a block, a new block is
  created combining "this" and pStatement, and "this"
  is replaced by the created block.
  If pStatement is null, do nothing.
  It is not recommended to add statement having non-null linkage
  (getNextStmt(), getPreviousStmt(), or getParent() are not null)
  because the addition will change these linkages. In such case,
  copy of the statement should be used (see copyWithOperands() of HIR).

パラメータ:
pStatement - statement subtree to be added.
戻り値:
the added statement node.

getUpperStmt

public Stmt getUpperStmt()
Get the statement that includes this statement. If there is not, return null.

戻り値:
the upper statement.

combineStmt

public Stmt combineStmt(Stmt pStmt,
                        boolean pBeforeBranch)
combineStmt
  Combine this statement and pStmt making them as one statement.
  If this statement is a block, pStmt is added as the last statement
  of the block.
  If this statement is a labeled statement, then pStmt
  is combined with its statement body
  (((LabeledStmt)this).getStmt().combineStmt(pStmt, pBeforeBranch). //##65
  In other case, a new block statement
  including this and pStmt is created and pStmt is made
  as the next one to this statement.
  If pBeforeBranch is true and this statement has branch
  as the last statement (if this is a block), then
  pStatement is inserted before the branch statement.
  If pStmt is null, do nothing.
  It is not recommended to combine statement having non-null linkage
  (getNextStmt(), getPreviousStmt(), or getParent() are not null)
  because the addition will change these linkages. In such case,
  copy of the statement should be used (see copyWithOperands() of HIR).
  This method (combineStmt) changes statement linkages (linkages
  get by getNextStmt(), getPreviousStmt(), getParent()) of this
  statement. If these linkages are used later, then make copy and
  use the copy in applying combineStmt.
  combineStmt makes neither a copy of pStmt nore a copy of this Stmt. //##60
  If copy is required, then make copy before calling combineStmt.
  If label is to be changed so as not to make duplicated label,
  it is necessary to change it before calling combineStmt (see
  copyWithOperandsChangingLabels). //##60
  The combined result replaces this statement and inherit its linkages.
  It may be the same to
     Stmt ltmt3 = lStmt1.combineStmt(
                   ((Stmt)lStmt2.copyWithOperands(), true);
     lStmt1.replaceThisStmtWith(lStmt3);

パラメータ:
pStmt - Statement to be combined as the next one to this statement.
pBeforeBranch - if true, insertion is done before the branch statement.
戻り値:
the block statement containing pStmt.

insertPreviousStmt

public Stmt insertPreviousStmt(Stmt pStatement)
insertPreviousStmt
  Insert a statement in front of "this" one.
  If "this" is included directly in a block, insert pStatement
  in front of this statement. If "this" is the first statement in the
  block, then pStatement becomes the first statement in the block.
  If "this" is not included directly in a block, a new block is
  created combining pStatement and "this", and "this"
  is replaced by the created block.
  If pStatement is null, do nothing.
  It is not recommended to insert statement having non-null linkage
  (getNextStmt(), getPreviousStmt(), or getParent() are not null)
  because the addition will change these linkages. In such case,
  copy of the statement should be used (see copyWithOperands() of HIR).

パラメータ:
pStatement - statement subtree to be inserted.
戻り値:
the inserted statement node (pStatement).

insertPreviousStmt

public Stmt insertPreviousStmt(Stmt pStatement,
                               BlockStmt pBlock)
insertPreviousStmt
  Insert a statement in front of "this" one.
  It is not recommended to insert statement having non-null linkage
  (getNextStmt(), getPreviousStmt(), or getParent() are not null)
  because the addition will change these linkages. In such case,
  copy of the statement should be used (see copyWithOperands() of HIR).

パラメータ:
pStatement - statement subtree to be inserted.
pBlock - Block statement containing this statement. If it is unknown, give null.
戻り値:
the inserted statement node (pStatement).

getPreviousStmt

public Stmt getPreviousStmt()
getPreviousStmt Get the statement previous to this one.

戻り値:
the previous statement. If there is no previous one, return null.

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.
 See IfStmt, LoopStmt, SwitchStmt where this method is actually
 defined.

パラメータ:
pStmt - statement to be executed before pCond (unnecessary to prepare copy by copyWithOperands).
pCond - conditional expression to be combined with pStmt (unnecessary to prepare copy by copyWithOperands).

ancestorControlStmtOfConditionalExp

public Stmt ancestorControlStmtOfConditionalExp(HIR pHir)
Get the ancestor control statement (IfStmt, LoopStmt, SwitchStmt) containing pHir as conditional Exp or ExpStmt.

戻り値:
the ancestor control statement if found, or return null if not found.

deleteThisStmt

public Stmt deleteThisStmt()
deleteThisStmt
  Delete this statement and return the next statement.
  If this is the first statement of a block,
  then the next statement becomes the first statement of the block.
  If the block contains only one statement,
  then the block becomes an empty block.
  If this is a LabeledStmt, then the labels defined by this
  statement are removed from the list of labels of the
  current subprogram (hirRoot.symRoot.subpCurrent).
  "this" statement is not erazed but bypassed in the chain
  of statements.

戻り値:
the statement next to this statement. If there is no next statement, return null.

cutLabelLinkOfStmt

public void cutLabelLinkOfStmt(Stmt pStmt)
cutLabelLinkOfStmt
  For labels defined in pStmt, execute setHirPosition(null)
  to prepare for deletion of pStmt.
  If pStmt is a compound statement, then all statements in
  pStmt are searched for labels defined in pStmt.
  If no label is defined by pStmt, no effect remains.

パラメータ:
pStmt - Statement to be searched for label definition to cut definition point relation.

isolateThisStmt

public void isolateThisStmt()
isolateThisStmt Cut previous/next link and parent link of this statement.


replaceThisStmtWith

public Stmt replaceThisStmtWith(Stmt pStmt)
replaceThisStmtWith
  Replace this statement with pStmt which is made
  to have the same linkage with other nodes as this statement
  and this statement is made isolated.
  pStmt should not be a statement contained in this statement
  as its subtree because this statement will be deleted in this
  method. If this statement is to be replaced with its subtree,
  then copy the subtree by copyWithOperandsChangingLabels(null)
  and replace by the copied subtree.

パラメータ:
pStmt - statement used to replace this.
戻り値:
pStmt //##81

attachLabel

public LabeledStmt attachLabel(Label pLabel)
attachLabel
  Attach the definition of a label (pLabel) to this statement. (##2)
  A statement may have multiple labels (list of labels).       (##2)
  If this statement has already a label different from pLabel, then
  pLabel is added as the last label attached to the statement. (##2)
  If pLabel is already attached to this statement, then
  pLabel is not attached to avoid duplication.
  "this" should be a statement node.
  Note:                                                     (##2)
    Let attach label L1 to statement S and denote the resultant
    statement as S1, and let attach label L2 to S1 and denote the
    resultant statement as S2, then we say that S is attached with
    labels L1 and L2, or S has list of labels L1 and L2.
    In this case, L2 is the heading label of S and the label
    next to L2 is L1. (In C notation, if "L2: L1: S", S has list
    of labels L1 and L2, and the label next to L2 is L1.)
    The first label attached to the statement represents
    a relation between other statement such that then-part,
    else-part, loop-back point, etc. (see Label interface).

パラメータ:
pLabel - label to be attached to this statement.
戻り値:
labeled statement to which the label is attached. (##5)

attachLabelAsFirstOne

public LabeledStmt attachLabelAsFirstOne(Label pLabel)
attachLabelAsFirstOne Attach pLabel as the first label of this statement.


getLabelDefList

public IrList getLabelDefList()

getLabel

public Label getLabel()
getLabel Get the label attached to this statement. If the statement has multiple labels, then the heading (##2) one of the labels is returned.

戻り値:
the label attached to this statement, return null if no label is attached to this statement.

getLabeledStmt

public LabeledStmt getLabeledStmt()
getLabeledStmt

戻り値:
thes statement if this is a LabeledStmt else if the parent is LabeledStmt then return the parent else return null.

getBlockStmt

public BlockStmt getBlockStmt()
getBlockStmt Get the block statement containing this statement. If this statement is not contained in BlockStmt, return null.

戻り値:
BlockStmt containing this statement.

isMultiBlock

public boolean isMultiBlock()
isMultiBlock true if this statement is composed of multiple basic blocks or a jump statement.


isBranchStmt

public boolean isBranchStmt()
isBranch Return true if this statement is either //##60 IfStmt, JumpStmt, SwitchStmt, CallStmt, ReturnStmt, JumpStmt, ReturnStmt, //##60 or LabeledStmt with one of above statement body.

戻り値:
true if this statement is a branch statement.

setFileName

public void setFileName(java.lang.String pFileName)
 Set the absolute path of the source program file
 containing this statement.
 In C language, if this statement is included
 in a file specified by #include, then give the name
 of the file specified by #include (it may differ
 statement by statement within a subprogram).
 If setFileName is not called for this statement,
 then the name of compiler input file is taken as
 the default value by getFileName().

パラメータ:
pFileName - name of the source program file containing this statement.

getFileName

public java.lang.String getFileName()
Get the absolute path of the file containing this statement (see setFileName method). If setFileName is not called for this statement, then the name of compiler input file is returned as the default value.

戻り値:
the absolute path of the file containing this statement.

setLineNumber

public void setLineNumber(int pLineNumber)
Set the line number of this statement within the file specified by setFileName. The first line of the file is line number 1.

パラメータ:
pLineNumber - the line number of this statement within the source file.

getLineNumber

public int getLineNumber()
Get the line number of this statement. The line number is set by setLineNumber method.

戻り値:
the line number of this statement.

copyPosition

public void copyPosition(Stmt pStmt)
Copy the file name and line number of pStatement to this statement.

パラメータ:
pStmt - statement from which file name and line number are to be copied.