module Axiom::Optimizer::Function::Predicate::Comparable::NeverComparable
Optimize when the operands will never be comparable
Public Instance Methods
optimizable?()
click to toggle source
Test if the operands will never be comparable
@return [Boolean]
@api private
# File lib/axiom/optimizer/function/predicate/comparable.rb, line 101 def optimizable? util = Util if util.constant?(left) then left_invalid_constant? elsif util.constant?(right) then right_invalid_constant? else !comparable? end end
Private Instance Methods
comparable?()
click to toggle source
Test if the left and right operand are comparable
@return [Boolean]
@api private
# File lib/axiom/optimizer/function/predicate/comparable.rb, line 137 def comparable? left.class <=> right.class end
left_invalid_constant?()
click to toggle source
Test if the left operand is an invalid constant
@return [Boolean]
@api private
# File lib/axiom/optimizer/function/predicate/comparable.rb, line 117 def left_invalid_constant? type = right.type !type.infer(left.class).equal?(type) end
right_invalid_constant?()
click to toggle source
Test if the right operand is an invalid constant
@return [Boolean]
@api private
# File lib/axiom/optimizer/function/predicate/comparable.rb, line 127 def right_invalid_constant? type = left.type !type.infer(right.class).equal?(type) end