public static int GetHashCode(UnaryOpStorage/*!*/ hashStorage, Range/*!*/ self) {
// MRI: Ruby treatment of hash return value is inconsistent.
// No conversions happen here (unlike e.g. Array.hash).
var hashSite = hashStorage.GetCallSite("hash");
return unchecked(
Protocols.ToHashCode(hashSite.Target(hashSite, self.Begin)) ^
Protocols.ToHashCode(hashSite.Target(hashSite, self.End)) ^
(self.ExcludeEnd ? 179425693 : 1794210891)
);
}