Package org.biojava.utils.bytecode

# Interface CodeGenerator

All Known Subinterfaces:
  `Instruction`, `ParametricCodeGenerator`, `PParametricCodeGenerator`

All Known Implementing Classes:
  `IfExpression`, `InstructionVector`, `Label`, `MarkLabel`

public interface CodeGenerator
Interface for an object which can produce Java bytecode.

Author:
  Thomas Down, Matthew Pocock

## Method Summary

Modifier and Type
Method
Description
`int`
`stackDelta()`
Return the change in the stack dept this generator will cause.
`int`
`stackDepth()`
Return the total depth of the stack required by this CodeGenerator.
`void`
`writeCode(CodeContext ctx)`
Write the byte or bytes for this CodeGenerator to a CodeContext.

## Method Details

### writeCode

void writeCode(CodeContext ctx) throws CodeException
Write the byte or bytes for this CodeGenerator to a CodeContext.

Parameters:
  `ctx` - a CodeContext to write to
Throws:
  `CodeException` - if there was some failure in writing to the context

### stackDepth

int stackDepth()
Return the total depth of the stack required by this CodeGenerator.

For single byte-code instructions, this will be the same as stackDelta() if stackDelta() is positive, zero otherwise. For a compound instruction, this will be the maximum stack depth required to execute all sub-instructions.

Returns:
  the stack depth needed

### stackDelta

int stackDelta()
Return the change in the stack dept this generator will cause.

In the case of an instruction that adds items to the stack, stackDelta will be positive. For instructions that removes items from the stack, this will be negative.

Returns:
  the change between stack depth before and after execution of this code