Skip to content

Commit 7c34d69

Browse files
Sacha0andreasnoack
authored andcommitted
Make broadcast treat all type arguments as scalars. (#19922)
1 parent 8ec47d1 commit 7c34d69

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

base/broadcast.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ function broadcast!{T,S,N}(::typeof(identity), x::AbstractArray{T,N}, y::Abstrac
2525
end
2626

2727
# logic for deciding the resulting container type
28-
containertype(x) = containertype(typeof(x))
29-
containertype(::Type) = Any
30-
containertype{T<:Ptr}(::Type{T}) = Any
31-
containertype{T<:Tuple}(::Type{T}) = Tuple
32-
containertype{T<:Ref}(::Type{T}) = Array
33-
containertype{T<:AbstractArray}(::Type{T}) = Array
34-
containertype{T<:Nullable}(::Type{T}) = Nullable
28+
_containertype(::Type) = Any
29+
_containertype{T<:Ptr}(::Type{T}) = Any
30+
_containertype{T<:Tuple}(::Type{T}) = Tuple
31+
_containertype{T<:Ref}(::Type{T}) = Array
32+
_containertype{T<:AbstractArray}(::Type{T}) = Array
33+
_containertype{T<:Nullable}(::Type{T}) = Nullable
34+
containertype(x) = _containertype(typeof(x))
3535
containertype(ct1, ct2) = promote_containertype(containertype(ct1), containertype(ct2))
3636
@inline containertype(ct1, ct2, cts...) = promote_containertype(containertype(ct1), containertype(ct2, cts...))
3737

test/broadcast.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ end
386386
Base.getindex(A::Array19745, i::Integer...) = A.data[i...]
387387
Base.size(A::Array19745) = size(A.data)
388388

389-
Base.Broadcast.containertype{T<:Array19745}(::Type{T}) = Array19745
389+
Base.Broadcast._containertype{T<:Array19745}(::Type{T}) = Array19745
390390

391391
Base.Broadcast.promote_containertype(::Type{Array19745}, ::Type{Array19745}) = Array19745
392392
Base.Broadcast.promote_containertype(::Type{Array19745}, ::Type{Array}) = Array19745
@@ -436,3 +436,11 @@ end
436436
@test f.([true, false]) == [true, "false"]
437437
end
438438
end
439+
440+
# Test that broadcast treats type arguments as scalars, i.e. containertype yields Any,
441+
# even for subtypes of abstract array. (https://github.com/JuliaStats/DataArrays.jl/issues/229)
442+
let
443+
@test Base.Broadcast.containertype(AbstractArray) == Any
444+
@test broadcast(==, [1], AbstractArray) == BitArray([false])
445+
@test broadcast(==, 1, AbstractArray) == false
446+
end

0 commit comments

Comments
 (0)