Merge pull request #471 from FluxML/kf/broadcastvcheck

Add VERSION check around broadcast piracy
This commit is contained in:
Mike J Innes 2018-10-29 15:20:10 +00:00 committed by GitHub
commit 59cfe3e891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -434,26 +434,28 @@ end
using Requires using Requires
# https://github.com/FluxML/Flux.jl/issues/353 # https://github.com/FluxML/Flux.jl/issues/353
@init Requires.isprecompiling() || @eval Base.Broadcast begin if VERSION < v"1.1.0-DEV.548"
function flatten(bc::Broadcasted{Style}) where {Style} @init Requires.isprecompiling() || @eval Base.Broadcast begin
isflat(bc) && return bc function flatten(bc::Broadcasted{Style}) where {Style}
args = cat_nested(bc) isflat(bc) && return bc
let makeargs = make_makeargs(bc), f = bc.f args = cat_nested(bc)
newf = @inline function(args::Vararg{Any,N}) where N let makeargs = make_makeargs(bc), f = bc.f
f(makeargs(args...)...) newf = @inline function(args::Vararg{Any,N}) where N
f(makeargs(args...)...)
end
return Broadcasted{Style}(newf, args, bc.axes)
end end
return Broadcasted{Style}(newf, args, bc.axes)
end end
end @inline function make_makeargs(makeargs, t::Tuple{<:Broadcasted,Vararg{Any}})
@inline function make_makeargs(makeargs, t::Tuple{<:Broadcasted,Vararg{Any}}) bc = t[1]
bc = t[1] let makeargs = make_makeargs(makeargs, tail(t)), f = bc.f
let makeargs = make_makeargs(makeargs, tail(t)), f = bc.f let makeargs = make_makeargs(makeargs, bc.args)
let makeargs = make_makeargs(makeargs, bc.args) headargs, tailargs = make_headargs(bc.args), make_tailargs(bc.args)
headargs, tailargs = make_headargs(bc.args), make_tailargs(bc.args) return @inline function(args::Vararg{Any,N}) where N
return @inline function(args::Vararg{Any,N}) where N args1 = makeargs(args...)
args1 = makeargs(args...) a, b = headargs(args1...), tailargs(args1...)
a, b = headargs(args1...), tailargs(args1...) (f(a...), b...)
(f(a...), b...) end
end end
end end
end end