Skip to content

Commit ff001a4

Browse files
deprecate getproperty(::Pairs, s) (#39448)
Co-authored-by: Jameson Nash <[email protected]>
1 parent 75c4f55 commit ff001a4

File tree

7 files changed

+34
-24
lines changed

7 files changed

+34
-24
lines changed

base/accumulate.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,10 @@ function accumulate(op, A; dims::Union{Nothing,Integer}=nothing, kw...)
293293
# This branch takes care of the cases not handled by `_accumulate!`.
294294
return collect(Iterators.accumulate(op, A; kw...))
295295
end
296-
nt = kw.data
297-
if nt isa NamedTuple{()}
296+
nt = values(kw)
297+
if isempty(kw)
298298
out = similar(A, promote_op(op, eltype(A), eltype(A)))
299-
elseif nt isa NamedTuple{(:init,)}
299+
elseif keys(nt) === (:init,)
300300
out = similar(A, promote_op(op, typeof(nt.init), eltype(A)))
301301
else
302302
throw(ArgumentError("acccumulate does not support the keyword arguments $(setdiff(keys(nt), (:init,)))"))
@@ -356,10 +356,10 @@ julia> B
356356
```
357357
"""
358358
function accumulate!(op, B, A; dims::Union{Integer, Nothing} = nothing, kw...)
359-
nt = kw.data
360-
if nt isa NamedTuple{()}
359+
nt = values(kw)
360+
if isempty(kw)
361361
_accumulate!(op, B, A, dims, nothing)
362-
elseif nt isa NamedTuple{(:init,)}
362+
elseif keys(kw) === (:init,)
363363
_accumulate!(op, B, A, dims, Some(nt.init))
364364
else
365365
throw(ArgumentError("acccumulate! does not support the keyword arguments $(setdiff(keys(nt), (:init,)))"))

base/deprecated.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,13 @@ end
241241
cat_shape(dims, shape::Tuple{}) = () # make sure `cat_shape(dims, ())` do not recursively calls itself
242242

243243
# END 1.6 deprecations
244+
245+
# BEGIN 1.7 deprecations
246+
247+
# the plan is to eventually overload getproperty to access entries of the dict
248+
@noinline function getproperty(x::Pairs, s::Symbol)
249+
depwarn("use values(kwargs) and keys(kwargs) instead of kwargs.data and kwargs.itr", :getproperty, force=true)
250+
return getfield(x, s)
251+
end
252+
253+
# END 1.7 deprecations

base/iterators.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -235,30 +235,30 @@ pairs(A::AbstractArray) = pairs(IndexCartesian(), A)
235235
pairs(A::AbstractVector) = pairs(IndexLinear(), A)
236236
# pairs(v::Pairs) = v # listed for reference, but already defined from being an AbstractDict
237237

238-
length(v::Pairs) = length(v.itr)
239-
axes(v::Pairs) = axes(v.itr)
240-
size(v::Pairs) = size(v.itr)
238+
length(v::Pairs) = length(getfield(v, :itr))
239+
axes(v::Pairs) = axes(getfield(v, :itr))
240+
size(v::Pairs) = size(getfield(v, :itr))
241241
@propagate_inbounds function iterate(v::Pairs{K, V}, state...) where {K, V}
242-
x = iterate(v.itr, state...)
242+
x = iterate(getfield(v, :itr), state...)
243243
x === nothing && return x
244244
indx, n = x
245-
item = v.data[indx]
245+
item = getfield(v, :data)[indx]
246246
return (Pair{K, V}(indx, item), n)
247247
end
248-
@inline isdone(v::Pairs, state...) = isdone(v.itr, state...)
248+
@inline isdone(v::Pairs, state...) = isdone(getfield(v, :itr), state...)
249249

250250
IteratorSize(::Type{<:Pairs{<:Any, <:Any, I}}) where {I} = IteratorSize(I)
251251
IteratorSize(::Type{<:Pairs{<:Any, <:Any, <:Base.AbstractUnitRange, <:Tuple}}) = HasLength()
252252

253-
reverse(v::Pairs) = Pairs(v.data, reverse(v.itr))
253+
reverse(v::Pairs) = Pairs(getfield(v, :data), reverse(getfield(v, :itr)))
254254

255-
haskey(v::Pairs, key) = (key in v.itr)
256-
keys(v::Pairs) = v.itr
257-
values(v::Pairs) = v.data # TODO: this should be a view of data subset by itr
258-
getindex(v::Pairs, key) = v.data[key]
259-
setindex!(v::Pairs, value, key) = (v.data[key] = value; v)
260-
get(v::Pairs, key, default) = get(v.data, key, default)
261-
get(f::Base.Callable, v::Pairs, key) = get(f, v.data, key)
255+
haskey(v::Pairs, key) = (key in getfield(v, :itr))
256+
keys(v::Pairs) = getfield(v, :itr)
257+
values(v::Pairs) = getfield(v, :data) # TODO: this should be a view of data subset by itr
258+
getindex(v::Pairs, key) = getfield(v, :data)[key]
259+
setindex!(v::Pairs, value, key) = (getfield(v, :data)[key] = value; v)
260+
get(v::Pairs, key, default) = get(getfield(v, :data), key, default)
261+
get(f::Base.Callable, v::Pairs, key) = get(f, getfield(v, :data), key)
262262

263263
# zip
264264

base/namedtuple.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ merge(a::NamedTuple, b::NamedTuple{()}) = a
267267
merge(a::NamedTuple{()}, b::NamedTuple{()}) = a
268268
merge(a::NamedTuple{()}, b::NamedTuple) = b
269269

270-
merge(a::NamedTuple, b::Iterators.Pairs{<:Any,<:Any,<:Any,<:NamedTuple}) = merge(a, b.data)
270+
merge(a::NamedTuple, b::Iterators.Pairs{<:Any,<:Any,<:Any,<:NamedTuple}) = merge(a, getfield(b, :data))
271271

272272
merge(a::NamedTuple, b::Iterators.Zip{<:Tuple{Any,Any}}) = merge(a, NamedTuple{Tuple(b.is[1])}(b.is[2]))
273273

base/reduce.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ julia> sum(1:20; init = 0.0)
531531
"""
532532
sum(a; kw...) = sum(identity, a; kw...)
533533
sum(a::AbstractArray{Bool}; kw...) =
534-
kw.data === NamedTuple() ? count(a) : reduce(add_sum, a; kw...)
534+
isempty(kw) ? count(a) : reduce(add_sum, a; kw...)
535535

536536
## prod
537537
"""

stdlib/InteractiveUtils/src/macros.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import Base: typesof, insert!
66

7-
separate_kwargs(args...; kwargs...) = (args, kwargs.data)
7+
separate_kwargs(args...; kwargs...) = (args, values(kwargs))
88

99
"""
1010
Transform a dot expression into one where each argument has been replaced by a

test/syntax.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1863,7 +1863,7 @@ end
18631863
@test_throws UndefVarError eval(:(1+$(Symbol(""))))
18641864

18651865
# issue #31404
1866-
f31404(a, b; kws...) = (a, b, kws.data)
1866+
f31404(a, b; kws...) = (a, b, values(kws))
18671867
@test f31404(+, (Type{T} where T,); optimize=false) === (+, (Type,), (optimize=false,))
18681868

18691869
# issue #28992

0 commit comments

Comments
 (0)