@@ -128,12 +128,16 @@ for f in vcat(diadic, [+, -, *, ^, Base.add_sum, Base.mul_prod])
128128 return S
129129 elseif S <: T
130130 return T
131+ elseif T <: AbstractArray && ! (T <: Array )
132+ return promote_symtype ($ f, Array{eltype (T), ndims (T):: Int }, S)
133+ elseif S <: AbstractArray && ! (S <: Array )
134+ return promote_symtype ($ f, T, Array{eltype (S), ndims (S):: Int })
131135 elseif $ (f === (* ) || f === Base. mul_prod) && T <: AbstractMatrix && S <: AbstractVecOrMat
132- return Array{promote_symtype (* , T. parameters[1 ]:: TypeT , S. parameters[1 ]:: TypeT ), S. parameters[2 ]}
136+ return Array{promote_symtype (* , T. parameters[1 ]:: TypeT , S. parameters[1 ]:: TypeT ), S. parameters[2 ]:: Int }
133137 elseif $ (f === (* ) || f === Base. mul_prod) && T <: AbstractArray && S <: Number
134- return Array{promote_symtype (* , T. parameters[1 ]:: TypeT , S), T. parameters[2 ]}
138+ return Array{promote_symtype (* , T. parameters[1 ]:: TypeT , S), T. parameters[2 ]:: Int }
135139 elseif $ (f === (* ) || f === Base. mul_prod) && T <: Number && S <: AbstractArray
136- return Array{promote_symtype (* , T, S. parameters[1 ]:: TypeT ), S. parameters[2 ]}
140+ return Array{promote_symtype (* , T, S. parameters[1 ]:: TypeT ), S. parameters[2 ]:: Int }
137141 elseif $ (f === (+ ) || f === Base. add_sum || f === (- )) && T <: AbstractArray && S <: AbstractArray
138142 nd = T. parameters[2 ]:: Int
139143 @assert nd == S. parameters[2 ]:: Int
@@ -191,6 +195,10 @@ for f in [/, \]
191195 return Real
192196 elseif T <: Rational && S <: Integer
193197 return Real
198+ elseif T <: AbstractArray && ! (T <: Array )
199+ return promote_symtype ($ f, Array{eltype (T), ndims (T):: Int }, S)
200+ elseif S <: AbstractArray && ! (S <: Array )
201+ return promote_symtype ($ f, T, Array{eltype (S), ndims (S):: Int })
194202 elseif $ (f === (\ )) && T <: Number && S <: AbstractArray
195203 return Array{promote_symtype (/ , T, S. parameters[1 ]:: TypeT ), S. parameters[2 ]:: Int }
196204 elseif $ (f === (\ )) && T <: AbstractVector && S <: AbstractVector
0 commit comments