git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@16 379699f6-c40d-0410-875b-85095c16579estable
parent
2589bb4450
commit
87b4f8f3c6
@ -0,0 +1,101 @@ |
||||
/* IfThenElseBlock (c) 1998 Jochen Hoenicke |
||||
* |
||||
* You may distribute under the terms of the GNU General Public License. |
||||
* |
||||
* IN NO EVENT SHALL JOCHEN HOENICKE BE LIABLE TO ANY PARTY FOR DIRECT, |
||||
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF |
||||
* THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF JOCHEN HOENICKE |
||||
* HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
* JOCHEN HOENICKE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||||
* PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" |
||||
* BASIS, AND JOCHEN HOENICKE HAS NO OBLIGATION TO PROVIDE MAINTENANCE, |
||||
* SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
||||
* |
||||
* $Id$ |
||||
*/ |
||||
package jode.flow; |
||||
|
||||
/** |
||||
* An IfThenElseBlock is the structured block representing an if |
||||
* instruction. The else part may be null. |
||||
*/ |
||||
public class IfThenElseBlock extends StructuredBlock { |
||||
|
||||
/** |
||||
* The condition. Must be of boolean type. |
||||
*/ |
||||
Instruction cond; |
||||
|
||||
/** |
||||
* The then part. This is always a valid block and not null |
||||
*/ |
||||
StructuredBlock thenBlock; |
||||
|
||||
/** |
||||
* The else part, may be null, and mustn't be the then part. |
||||
*/ |
||||
StructuredBlock elseBlock; |
||||
|
||||
/** |
||||
* Creates a new if then else block. |
||||
* @param thenBlock the then block, must be non null. |
||||
* @param elseBlock the else block, may be null. |
||||
*/ |
||||
public IfThenElseBlock(Instruction cond, |
||||
StructuredBlock thenBlock, |
||||
StructuredBlock elseBlock) { |
||||
this.cond = cond; |
||||
this.thenBlock = thenBlock; |
||||
this.elseBlock = elseBlock; |
||||
thenBlock.outer = this; |
||||
if (elseBlock != null) |
||||
elseBlock.outer = this; |
||||
} |
||||
|
||||
/* The implementation of getNext[Flow]Block is the standard |
||||
* implementation */ |
||||
|
||||
/** |
||||
* Replaces the given sub block with a new block. |
||||
* @param oldBlock the old sub block. |
||||
* @param newBlock the new sub block. |
||||
* @return false, if oldBlock wasn't a direct sub block. |
||||
*/ |
||||
boolean replaceSubBlock(StructuredBlock oldBlock, |
||||
StructuredBlock newBlock) { |
||||
if (thenBlock == oldBlock) |
||||
thenBlock = newBlock; |
||||
else if (elseBlock == oldBlock) |
||||
elseBlock = newBlock; |
||||
else |
||||
return false; |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Print the source code for this structured block. This may be |
||||
* called only once, because it remembers which local variables |
||||
* were declared. |
||||
*/ |
||||
public void dumpSource(TabbedPrintWriter writer) |
||||
throws java.io.IOException |
||||
{ |
||||
boolean needBrace = ! (thenBlock instanceof InstructionBlock); |
||||
writer.println("if ("+cond.toString()+")"+needBrace?" {":""); |
||||
writer.tab(); |
||||
thenBlock.dumpSource(writer); |
||||
writer.untab(); |
||||
if (elseBlock != null) { |
||||
writer.print(needBrace?"} ":""); |
||||
needBrace = ! (thenBlock instanceof InstructionBlock); |
||||
writer.println("else"+needBrace?" {":""); |
||||
writer.tab(); |
||||
elseBlock.dumpSource(writer); |
||||
writer.untab(); |
||||
} |
||||
if (needBrace) |
||||
writer.println("}"); |
||||
} |
||||
} |
@ -0,0 +1,43 @@ |
||||
/* Jump (c) 1998 Jochen Hoenicke |
||||
* |
||||
* You may distribute under the terms of the GNU General Public License. |
||||
* |
||||
* IN NO EVENT SHALL JOCHEN HOENICKE BE LIABLE TO ANY PARTY FOR DIRECT, |
||||
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF |
||||
* THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF JOCHEN HOENICKE |
||||
* HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
* JOCHEN HOENICKE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||||
* PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" |
||||
* BASIS, AND JOCHEN HOENICKE HAS NO OBLIGATION TO PROVIDE MAINTENANCE, |
||||
* SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
||||
* |
||||
* $Id$ |
||||
*/ |
||||
package jode.flow; |
||||
|
||||
/** |
||||
* This class represents an unconditional jump. |
||||
*/ |
||||
public class Jump { |
||||
/** |
||||
* The structured block that precedes this jump. |
||||
*/ |
||||
StructuredBlock prev; |
||||
/** |
||||
* The flow block, where this jump lies in |
||||
*/ |
||||
FlowBlock parent; |
||||
/** |
||||
* The destination block of this jump. |
||||
*/ |
||||
FlowBlock destination; |
||||
|
||||
/** |
||||
* Returns true if this jump has jsr or monitorexit attachments. |
||||
*/ |
||||
boolean hasAttachments() { |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue