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.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()
getNextStmt
Get the statement next to "this" one. |
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 |
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.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()
- getNextStmt
Get the statement next to "this" one.
- 戻り値:
- the statement next to "this" one.
Return null if there is no next statement
(if this is the last statement of a block).
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.
- パラメータ:
pLabel - label to be attached to this statement.
- 戻り値:
- labeled statement to which the label is attached. (##5)
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).
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.
- 戻り値:
- the label attached to this statement,
return null if no label is attached to this statement.
If the statement has multiple labels, then the heading (##2)
one of the labels is returned.
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.
- 戻り値:
- BlockStmt containing this statement.
If this statement is not contained in BlockStmt,
return null.
isMultiBlock
public boolean isMultiBlock()
- isMultiBlock
true if this statement is composed of multiple basic blocks
or a jump statement.
isBranchStmt
public boolean isBranchStmt()
- isBranch
- 戻り値:
- true if this statement is either
//##60 IfStmt, JumpStmt, SwitchStmt, CallStmt, ReturnStmt,
JumpStmt, ReturnStmt, //##60
or LabeledStmt with one of above statement body.
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.