Package gnu.bytecode

Class ExitableBlock

java.lang.Object
gnu.bytecode.ExitableBlock

public class ExitableBlock extends Object
Support for code block that one may be exited. You may optionally exit with a value, and/or run intervening finally blocks.

Typical usage::

 CodeAttr code = ...;
 Type retType = ...; // a Type or null
 ExitableBlock block = code.startExitableBlock(retType, true);
 ...
 ... block.exit() ...; // conditionally
 ...
 code.endExitableBlock();
 

The block.exit() compiles to a transfer to the end of the block, executing any finally-blocks within the block that surround the call to exit.

If the ExitableBlock should leave a result on the stack, then specify the type of the result as the retType. The block itself must push a result before calling endExitableBlock (unless code.reachableHere() is false), and must also push a result before block.exit()..

  • Method Details

    • exit

      public void exit()
      Exit this surrounding block, executing finally blocks as needed. Return a value as the result of this ExitableBlock.
    • exitIsGoto

      public Label exitIsGoto()
      If an exit is simple, return the label for block end. The exit is simple if there is no intervening finally blocks.