class __extend__(SomeBool): def bool(self): return self def invert(self): return SomeInteger() invert.can_only_throw = [] def neg(self): return SomeInteger() neg.can_only_throw = [] neg_ovf = _clone(neg, [OverflowError]) def abs(self): return SomeInteger(nonneg=True) abs.can_only_throw = [] abs_ovf = _clone(abs, [OverflowError]) def pos(self): return SomeInteger(nonneg=True) pos.can_only_throw = [] int = pos
class __extend__(SomeInteger): def invert(self): return SomeInteger(knowntype=self.knowntype) invert.can_only_throw = [] def pos(self): return SomeInteger(knowntype=self.knowntype) pos.can_only_throw = [] int = pos # these are the only ones which can overflow: def neg(self): return SomeInteger(knowntype=self.knowntype) neg.can_only_throw = [] neg_ovf = _clone(neg, [OverflowError]) def abs(self): return SomeInteger(nonneg=True, knowntype=self.knowntype) abs.can_only_throw = [] abs_ovf = _clone(abs, [OverflowError])