|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 |
メソッドの概要 | |
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.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 |
メソッドの詳細 |
public Stmt addNextStmt(Stmt pStatement)
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.
public Stmt getUpperStmt()
public Stmt combineStmt(Stmt pStmt, boolean pBeforeBranch)
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.
public Stmt insertPreviousStmt(Stmt pStatement)
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.
public Stmt insertPreviousStmt(Stmt pStatement, BlockStmt pBlock)
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.
public Stmt getPreviousStmt()
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).public Stmt ancestorControlStmtOfConditionalExp(HIR pHir)
public Stmt 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.
public void cutLabelLinkOfStmt(Stmt pStmt)
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.public void isolateThisStmt()
public Stmt replaceThisStmtWith(Stmt pStmt)
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.
public LabeledStmt attachLabel(Label pLabel)
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.
public LabeledStmt attachLabelAsFirstOne(Label pLabel)
public IrList getLabelDefList()
public Label getLabel()
public LabeledStmt getLabeledStmt()
public BlockStmt getBlockStmt()
public boolean isMultiBlock()
public boolean isBranchStmt()
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.public java.lang.String getFileName()
public void setLineNumber(int pLineNumber)
pLineNumber
- the line number of this statement within
the source file.public int getLineNumber()
public void copyPosition(Stmt pStmt)
pStmt
- statement from which file name and
line number are to be copied.
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |