Skip to content

Commit b0d3f2e

Browse files
author
Andy Ferris
committed
Replace pure annotations in promotion with inline
1 parent a898a50 commit b0d3f2e

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

base/promotion.jl

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ end
122122

123123
## promotion mechanism ##
124124

125-
promote_type() = (@_pure_meta; Bottom)
126-
promote_type(T) = (@_pure_meta; T)
127-
promote_type(T, S, U, V...) = (@_pure_meta; promote_type(T, promote_type(S, U, V...)))
125+
promote_type() = (@_inline_meta; Bottom)
126+
promote_type(T) = (@_inline_meta; T)
127+
promote_type(T, S, U, V...) = (@_inline_meta; promote_type(T, promote_type(S, U, V...)))
128128

129-
promote_type(::Type{Bottom}, ::Type{Bottom}) = (@_pure_meta; Bottom)
130-
promote_type(::Type{T}, ::Type{T}) where {T} = (@_pure_meta; T)
131-
promote_type(::Type{T}, ::Type{Bottom}) where {T} = (@_pure_meta; T)
132-
promote_type(::Type{Bottom}, ::Type{T}) where {T} = (@_pure_meta; T)
129+
promote_type(::Type{Bottom}, ::Type{Bottom}) = (@_inline_meta; Bottom)
130+
promote_type(::Type{T}, ::Type{T}) where {T} = (@_inline_meta; T)
131+
promote_type(::Type{T}, ::Type{Bottom}) where {T} = (@_inline_meta; T)
132+
promote_type(::Type{Bottom}, ::Type{T}) where {T} = (@_inline_meta; T)
133133

134134
"""
135135
promote_type(type1, type2)
@@ -152,7 +152,7 @@ BigFloat
152152
```
153153
"""
154154
function promote_type(::Type{T}, ::Type{S}) where {T,S}
155-
@_pure_meta
155+
@_inline_meta
156156
# Try promote_rule in both orders. Typically only one is defined,
157157
# and there is a fallback returning Bottom below, so the common case is
158158
# promote_type(T, S) =>
@@ -161,26 +161,29 @@ function promote_type(::Type{T}, ::Type{S}) where {T,S}
161161
promote_result(T, S, promote_rule(T,S), promote_rule(S,T))
162162
end
163163

164-
promote_rule(T, S) = (@_pure_meta; Bottom)
164+
promote_rule(::Type{<:Any}, ::Type{<:Any}) = (@_inline_meta; Bottom)
165165

166-
promote_result(t,s,T,S) = (@_pure_meta; promote_type(T,S))
166+
promote_result(::Type{<:Any},::Type{<:Any},::Type{T},::Type{S}) where {T,S} = (@_inline_meta; promote_type(T,S))
167167
# If no promote_rule is defined, both directions give Bottom. In that
168168
# case use typejoin on the original types instead.
169-
promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T,S} = (@_pure_meta; typejoin(T, S))
169+
promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T,S} = (@_inline_meta; typejoin(T, S))
170170

171171
promote() = ()
172172
promote(x) = (x,)
173173
function promote(x::T, y::S) where {T,S}
174+
@_inline_meta
174175
(convert(promote_type(T,S),x), convert(promote_type(T,S),y))
175176
end
176-
promote_typeof(x) = (@_pure_meta; typeof(x))
177-
promote_typeof(x, xs...) = (@_pure_meta; promote_type(typeof(x), promote_typeof(xs...)))
177+
promote_typeof(x) = (@_inline_meta; typeof(x))
178+
promote_typeof(x, xs...) = (@_inline_meta; promote_type(typeof(x), promote_typeof(xs...)))
178179
function promote(x, y, z)
180+
@_inline_meta
179181
(convert(promote_typeof(x,y,z), x),
180182
convert(promote_typeof(x,y,z), y),
181183
convert(promote_typeof(x,y,z), z))
182184
end
183185
function promote(x, y, zs...)
186+
@_inline_meta
184187
(convert(promote_typeof(x,y,zs...), x),
185188
convert(promote_typeof(x,y,zs...), y),
186189
convert(Tuple{Vararg{promote_typeof(x,y,zs...)}}, zs)...)
@@ -195,16 +198,16 @@ end
195198
# happens, and +(promote(x,y)...) is called again, causing a stack
196199
# overflow.
197200
function promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T<:Number,S<:Number}
198-
@_pure_meta
201+
@_inline_meta
199202
promote_to_supertype(T, S, typejoin(T,S))
200203
end
201204

202205
# promote numeric types T and S to typejoin(T,S) if T<:S or S<:T
203206
# for example this makes promote_type(Integer,Real) == Real without
204207
# promoting arbitrary pairs of numeric types to Number.
205-
promote_to_supertype(::Type{T}, ::Type{T}, ::Type{T}) where {T<:Number} = (@_pure_meta; T)
206-
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{T}) where {T<:Number,S<:Number} = (@_pure_meta; T)
207-
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{S}) where {T<:Number,S<:Number} = (@_pure_meta; S)
208+
promote_to_supertype(::Type{T}, ::Type{T}, ::Type{T}) where {T<:Number} = (@_inline_meta; T)
209+
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{T}) where {T<:Number,S<:Number} = (@_inline_meta; T)
210+
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{S}) where {T<:Number,S<:Number} = (@_inline_meta; S)
208211
promote_to_supertype(::Type{T}, ::Type{S}, ::Type) where {T<:Number,S<:Number} =
209212
error("no promotion exists for ", T, " and ", S)
210213

@@ -304,15 +307,15 @@ minmax(x::Real, y::Real) = minmax(promote(x, y)...)
304307
# "Promotion" that takes a function into account and tries to preserve
305308
# non-concrete types. These are meant to be used mainly by elementwise
306309
# operations, so it is advised against overriding them
307-
_default_type(T::Type) = (@_pure_meta; T)
310+
_default_type(T::Type) = (@_inline_meta; T)
308311

309312
if isdefined(Core, :Inference)
310313
const _return_type = Core.Inference.return_type
311314
else
312315
_return_type(f::ANY, t::ANY) = Any
313316
end
314317

315-
promote_op(::Any...) = (@_pure_meta; Any)
318+
promote_op(::Any...) = (@_inline_meta; Any)
316319
function promote_op{S}(f, ::Type{S})
317320
@_inline_meta
318321
T = _return_type(f, Tuple{_default_type(S)})

0 commit comments

Comments
 (0)