Class BranchWrapper

java.lang.Object
org.jibx.binding.classes.BranchWrapper

public class BranchWrapper extends Object
Wrapper for branch handle. This preserves a snapshot of the stack state for the branch instruction, matching it against the stack state for the target instruction when set.
Version:
1.0
Author:
Dennis M. Sosnoski
  • Field Details

    • s_trackSource

      private static boolean s_trackSource
      Track source code location for generated branches.
    • s_errorOverride

      private static boolean s_errorOverride
      Continue on after code generation error flag.
    • m_branchHandle

      private final BranchHandle m_branchHandle
      Actual wrapped instruction handle.
    • m_stackTypes

      private final String[] m_stackTypes
      Stack state for branch origin.
    • m_sourceObject

      private final Object m_sourceObject
      Object that generated branch.
    • m_sourceTrace

      private final Throwable m_sourceTrace
      Code generation backtrace for source of branch.
  • Constructor Details

    • BranchWrapper

      BranchWrapper(BranchHandle hand, String[] types, Object src)
      Constructor.
      Parameters:
      hand - branch handle
      types - array of types of values on stack
      src - object responsible for generating branch
  • Method Details

    • getStackState

      String[] getStackState()
      Get branch origin stack state information.
      Returns:
      array of types of values on stack
    • describeStack

      private String describeStack(String[] types)
      Generate description of stack state.
      Parameters:
      types - array of types on stack
      Returns:
      stack state description
    • buildReport

      private String buildReport(String text, String[] types, MethodBuilder mb)
      Report branch target error. Dumps the stack trace for the source of the branch, if source tracking is enabled, and generates an exception that includes the stack state information.
      Parameters:
      text - basic error message text
      types - stack state description
      mb - method builder using this code
      Returns:
      complete error description text
    • setTarget

      void setTarget(InstructionHandle hand, String[] types, MethodBuilder mb)
      Set target instruction for branch. Validates the branch source stack state against the branch target stack state.
      Parameters:
      hand - target branch instruction handle
      types - stack state description
      mb - method builder using this code
    • setTarget

      public void setTarget(BranchTarget target, MethodBuilder mb)
      Set target instruction for branch. Validates the branch source stack state against the branch target stack state.
      Parameters:
      target - branch target wrapper
      mb - method builder using this code
    • setTracking

      public static void setTracking(boolean track)
      Set branch code generation tracking state. When set, this saves a stack trace for each generated branch instruction, allowing the source of a branch to be traced when an error occurs in setting the branch target.
      Parameters:
      track - true to enable branch code generation tracking, false to disable it
    • setErrorOverride

      public static void setErrorOverride(boolean over)
      Set target setting error override state. When set, this blocks throwing an exception when an error occurs on setting the branch target, instead just printing the information to the console.
      Parameters:
      over - true to override exception on target error, false to allow it