@@ -800,6 +800,7 @@ _view_vcat(a::Number, kr) = Fill(a,length(kr))
800800_view_vcat (a:: Number , kr, jr) = Fill (a,length (kr), length (jr))
801801_view_vcat (a, kr... ) = _viewifmutable (a, kr... )
802802
803+ _reverse_if_neg_step (args, kr:: Int ) = args
803804_reverse_if_neg_step (args, kr:: AbstractUnitRange ) = args
804805_reverse_if_neg_step (args, kr:: AbstractRange ) = step (kr) ≥ 0 ? args : reverse (args)
805806
@@ -825,7 +826,7 @@ function _vcat_sub_arguments(L::ApplyLayout{typeof(hcat)}, A, V)
825826 args = arguments (L, A)
826827 k,jr = parentindices (V)
827828 sz = size .(args,2 )
828- sjr = intersect .(_argsindices (sz ), Ref (jr ))
829+ sjr = intersect .(Ref (jr ), _argsindices (sz ))
829830 sjr2 = broadcast ((a,b) -> a .- b .+ 1 , sjr, _vcat_firstinds (sz))
830831 _view_hcat .(_reverse_if_neg_step (args, jr), k, sjr2)
831832end
@@ -841,9 +842,9 @@ function arguments(L::ApplyLayout{typeof(vcat)}, V::SubArray{<:Any,2})
841842 args = arguments (L, A)
842843 kr,jr = parentindices (V)
843844 sz = size .(args,1 )
844- skr = intersect .(_argsindices (sz ), Ref (kr ))
845+ skr = intersect .(Ref (kr ), _argsindices (sz ))
845846 skr2 = broadcast ((a,b) -> a .- b .+ 1 , skr, _vcat_firstinds (sz))
846- _view_vcat .(_reverse_if_neg_step (args, kr), skr2, Ref (jr))
847+ _view_vcat .(_reverse_if_neg_step (args, kr), _reverse_if_neg_step ( skr2, kr) , Ref (jr))
847848end
848849
849850@inline _view_hcat (a:: Number , kr, jr) = Fill (a,length (kr),length (jr))
@@ -864,7 +865,7 @@ function arguments(L::ApplyLayout{typeof(hcat)}, V::SubArray)
864865 sz = size .(args,2 )
865866 sjr = intersect .(_argsindices (sz), Ref (jr))
866867 sjr2 = broadcast ((a,b) -> a .- b .+ 1 , sjr, _vcat_firstinds (sz))
867- __view_hcat (args, kr, sjr2)
868+ __view_hcat (_reverse_if_neg_step ( args, jr), kr, _reverse_if_neg_step ( sjr2, jr) )
868869end
869870
870871arguments (:: ApplyLayout{typeof(vcat)} , V:: SubArray{<:Any,2,<:Any,<:Tuple{<:Slice,<:Any}} ) =
@@ -886,11 +887,11 @@ end
886887
887888sub_materialize (:: ApplyLayout{typeof(vcat)} , V:: AbstractVector , _) = ApplyVector (V)
888889
889- function sub_materialize (:: ApplyLayout{typeof(hcat)} , V, _)
890+ function sub_materialize (lay :: ApplyLayout{typeof(hcat)} , V, _)
890891 ret = similar (V)
891892 n = 0
892893 kr,_ = parentindices (V)
893- for a in arguments (V)
894+ for a in arguments (lay, V)
894895 m = size (a,2 )
895896 copyto! (view (ret,:,n+ 1 : n+ m), a)
896897 n += m
0 commit comments