From 03add2d31a1e940169c31d47705b5e2fd725c05d Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Thu, 13 Jul 2017 14:50:45 -0500 Subject: [PATCH] Add atsign-compat support for `CartesianRange` --- README.md | 5 +++++ src/Compat.jl | 8 ++++++++ test/runtests.jl | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/README.md b/README.md index 8228fafef..a56448f4a 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,11 @@ Currently, the `@compat` macro supports the following syntaxes: * `Compat.collect(A)` returns an `Array`, no matter what indices the array `A` has (Julia 0.5 and higher). [#21257] +* `@compat foo(::CartesianRange{N})` to replace the former + `foo(::CartesianRange{CartesianIndex{N}})`. Note that `CartesianRange` + now has two type parameters, so using them as fields in other + `struct`s requires manual intervention. + ## Module Aliases * In 0.6, some 0.5 iterator functions have been moved to the `Base.Iterators` diff --git a/src/Compat.jl b/src/Compat.jl index baec4dc06..c6eb0522d 100644 --- a/src/Compat.jl +++ b/src/Compat.jl @@ -483,6 +483,14 @@ function _compat(ex::Expr) end end end + if VERSION < v"0.7.0-DEV.880" + if ex.head == :curly && ex.args[1] == :CartesianRange && length(ex.args) >= 2 + a = ex.args[2] + if a != :CartesianIndex && !(isa(a, Expr) && a.head == :curly && a.args[1] == :CartesianIndex) + return Expr(:curly, :CartesianRange, Expr(:curly, :CartesianIndex, ex.args[2])) + end + end + end return Expr(ex.head, map(_compat, ex.args)...) end function _compat(ex::Symbol) diff --git a/test/runtests.jl b/test/runtests.jl index 116780b9a..0cc938df6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1893,6 +1893,20 @@ let @test_throws MethodError Dates.Month(1) < Dates.Day(1) end +let + @compat cr(::CartesianRange{2}) = 2 + @test cr(CartesianRange(1:5, 2:4)) == 2 + @test_throws MethodError cr(CartesianRange(1:5, 2:4, -1:1)) +end +if VERSION < v"0.7.0-DEV.880" + # ensure we don't bork any non-updated expressions + let + @compat cr(::CartesianRange{CartesianIndex{2}}) = 2 + @test cr(CartesianRange(1:5, 2:4)) == 2 + @test_throws MethodError cr(CartesianRange(1:5, 2:4, -1:1)) + end +end + include("to-be-deprecated.jl") nothing