private static int? Compare(BinaryOpStorage/*!*/ compareStorage, BinaryOpStorage/*!*/ lessThanStorage, BinaryOpStorage/*!*/ greaterThanStorage,
object lhs, object rhs) {
// calls method_missing, doesn't catch any exception:
var compare = compareStorage.GetCallSite("<=>");
object compareResult = compare.Target(compare, lhs, rhs);
if (compareResult != null) {
return Protocols.ConvertCompareResult(lessThanStorage, greaterThanStorage, compareResult);
} else {
throw RubyExceptions.MakeComparisonError(lessThanStorage.Context, lhs, rhs);
}
}