|
275 | 275 |
|
276 | 276 | ## promotions in arithmetic, etc. ## |
277 | 277 |
|
278 | | -# Because of the promoting fallback definitions for Number, we need |
279 | | -# a special case for undefined promote_rule on numeric types. |
280 | | -# Otherwise, typejoin(T,S) is called (returning Number) so no conversion |
281 | | -# happens, and +(promote(x,y)...) is called again, causing a stack |
282 | | -# overflow. |
283 | | -function promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T<:Number,S<:Number} |
284 | | - @_inline_meta |
285 | | - promote_to_supertype(T, S, typejoin(T,S)) |
286 | | -end |
287 | | - |
288 | | -# promote numeric types T and S to typejoin(T,S) if T<:S or S<:T |
289 | | -# for example this makes promote_type(Integer,Real) == Real without |
290 | | -# promoting arbitrary pairs of numeric types to Number. |
291 | | -promote_to_supertype(::Type{T}, ::Type{T}, ::Type{T}) where {T<:Number} = T |
292 | | -promote_to_supertype(::Type{T}, ::Type{S}, ::Type{T}) where {T<:Number,S<:Number} = T |
293 | | -promote_to_supertype(::Type{T}, ::Type{S}, ::Type{S}) where {T<:Number,S<:Number} = S |
294 | | -promote_to_supertype(::Type{T}, ::Type{S}, ::Type) where {T<:Number,S<:Number} = |
295 | | - error("no promotion exists for ", T, " and ", S) |
296 | | - |
297 | 278 | promote() = () |
298 | 279 | promote(x) = (x,) |
299 | 280 |
|
|
0 commit comments