@@ -67,10 +67,14 @@ Base.promote_rule(::Type{RI}, ::Type{T}) where {T<:Number,RI<:RInteger} =
67
67
68
68
Base. Signed (x:: RSigned ) = reinterpret (itype (x), x)
69
69
Base. Unsigned (x:: RUnsigned ) = reinterpret (itype (x), x)
70
+ RSigned (x:: RSigned ) = x
70
71
RSigned (x:: Signed ) = reinterpret (rtype (x), x)
72
+ RUnsigned (x:: RUnsigned ) = x
71
73
RUnsigned (x:: Unsigned ) = reinterpret (rtype (x), x)
72
74
Base. Integer (x:: RSigned ) = Signed (x)
73
75
Base. Integer (x:: RUnsigned ) = Unsigned (x)
76
+ Base. Integer (x:: RInteger ) = reinterpret (itype (x), x)
77
+ RInteger (x:: RInteger ) = x
74
78
RInteger (x:: Signed ) = RSigned (x)
75
79
RInteger (x:: Unsigned ) = RUnsigned (x)
76
80
@@ -94,13 +98,24 @@ RUInt128(x::UInt128) = reinterpret(RUInt128, x)
94
98
(:: Type{R} )(x:: Complex ) where R<: RInteger = R (round (itype (R), x))
95
99
(:: Type{R} )(x:: AbstractFloat ) where R<: RInteger = R (round (itype (R), x))
96
100
97
- @inline Base. convert (:: Type{T} , x:: RInteger ) where {T<: Number } = convert (T, Integer (x))
101
+ # Ambiguity resolution
102
+ (:: Type{T} )(x:: RInteger ) where {T<: RInteger } = convert (T, x)
103
+ Base. Bool (x:: RInteger ) = Bool (Integer (x))
104
+ Base. Rational (x:: RInteger ) = Rational (Integer (x))
105
+ Base. Rational {T} (x:: RInteger ) where {T<: Integer } = Rational (Integer (x))
106
+ Base. BigInt (x:: RInteger ) = BigInt (Integer (x))
107
+ Base. Float16 (x:: RInteger ) = Float16 (Integer (x))
108
+ Base. BigFloat (x:: RInteger ; kwargs... ) = BigFloat (Integer (x); kwargs... )
109
+
110
+ (:: Type{T} )(x:: RInteger ) where {T<: Real } = convert (T, Integer (x))
111
+ Base. convert (:: Type{T} , x:: T ) where {T<: RInteger } = x
112
+ Base. convert (:: Type{T} , x:: RInteger ) where {T<: RInteger } = T (convert (itype (T), Integer (x)))
98
113
99
114
# rem conversions
100
- @inline Base. rem (x:: T , :: Type{T} ) where {T<: RInteger } = T
101
- @inline Base. rem (x:: Integer , :: Type{T} ) where {T<: RInteger } = RInteger (rem (x, itype (T)))
115
+ Base. rem (x:: T , :: Type{T} ) where {T<: RInteger } = T
116
+ Base. rem (x:: Integer , :: Type{T} ) where {T<: RInteger } = RInteger (rem (x, itype (T)))
102
117
# ambs
103
- @inline Base. rem (x:: BigInt , :: Type{T} ) where {T<: RInteger } = error (" no rounding BigInt available" )
118
+ Base. rem (x:: BigInt , :: Type{T} ) where {T<: RInteger } = error (" no rounding BigInt available" )
104
119
105
120
106
121
Base. flipsign (x:: RSigned , y:: RSigned ) = RInteger (flipsign (Integer (x), Integer (y)))
0 commit comments