Class BinaryComparison


public class BinaryComparison extends BooleanExpr
Represents a comparison of two expressions. This class takes care of figuring out how to do the requested comparisons based on the available instructions in the Java Virtual Machine. For example, to compare double values, it has to use the dcmpl and dcmpg instructions in combination with ifeq, ifne, etc. For integers, it can use if_icmpeq, if_icmpne, etc. It does any autoboxing necessary (if enabled), so it can compare java.lang.Float values, for example. It has support for string comparisons, including those that ignore case. It calls the appropriate compareTo or compareToIgnoreCase and then uses ifeq, ifne, etc. to evaluate the comparison.
  • Field Details

    • test

      public Test test
      The type of comparison to be done.
    • left

      public Expression left
      The expression on the left side of the comparison
    • truePath

      public BooleanExpr truePath
      The expression to evaluate if the comparison is true
    • falsePath

      public BooleanExpr falsePath
      The expression to evaluate if the comparison is false
  • Constructor Details

    • BinaryComparison

      public BinaryComparison(Test test, Expression left, Expression right)
      Create a new BinaryComparison with the given test, and left and right expressions
      Parameters:
      test - The test to perform
      left - The left-hand side of the comparison
      right - The right-hand side of the comparison
    • BinaryComparison

      public BinaryComparison(Test test, Expression left, Expression right, String filename, int lineNumber)
      Create a new BinaryComparison with the given test, and left and right expressions
      Parameters:
      test - The test to perform
      left - The left-hand side of the comparison
      right - The right-hand side of the comparison
      filename - The source filename this expression is associated with
      lineNumber - The source line number this expression is associated with
  • Method Details

    • invert

      public BooleanExpr invert()
      Description copied from class: BooleanExpr
      Invert this expression, which may involve reversing comparisons or changing and to or with inverted tests, etc.
      Specified by:
      invert in class BooleanExpr
      Returns:
      An inverted boolean expression
    • removeNot

      public BooleanExpr removeNot()
      Description copied from class: BooleanExpr
      Remove any not expressions from a tree of boolean expressions by inverting the expression under the not
      Specified by:
      removeNot in class BooleanExpr
      Returns:
      a BooleanExpr with any nested Not constructions removed
    • reset

      public void reset()
      Description copied from class: BooleanExpr
      Resets any values modified during code generation
      Overrides:
      reset in class BooleanExpr
    • computeSequence

      public BooleanExpr computeSequence(BooleanExpr trueNext, BooleanExpr falseNext, List<BooleanExpr> tests)
      Description copied from class: BooleanExpr
      Compute a sequence of tests to determine if this expression is true or false
      Specified by:
      computeSequence in class BooleanExpr
      Parameters:
      trueNext - The next expression to evaluate if this expression is true
      falseNext - The next expression to evaluate if this expression is false
      tests - An accumulator for the tests to be executed
      Returns:
      The beginning of the sequence
    • findCaptured

      public void findCaptured(Environment env)
      Identify any variables captured by the left and right hand expressions
      Parameters:
      env - The environment chain to be searched
    • generate

      public void generate(ClassGenerator generator, Environment env, BooleanExpr next)
      Generate Java bytecode for this comparison
      Parameters:
      generator - The class generator that is generating the current class
      env - The environment containing all visible variables
      next - The next boolean expr in the chain