diff --git a/README.md b/README.md index 2e25a4039e1cd..bbaf586dc5574 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,8 @@ Currently, the `@compat` macro supports the following syntaxes: * Constructors for `Matrix{T}`, `Array{T}`, and `SparseMatrixCSC{T}` from `UniformScaling` ([#24372], [#24657]) +* `Uninitialized` and `uninitialized` with corresponding `Array` constructors ([#24652]). + ## Renaming @@ -361,4 +363,5 @@ includes this fix. Find the minimum version from there. [#24282]: https://github.com/JuliaLang/julia/issues/24282 [#24372]: https://github.com/JuliaLang/julia/issues/24372 [#24459]: https://github.com/JuliaLang/julia/issues/24459 +[#24652]: https://github.com/JuliaLang/julia/issues/24652 [#24657]: https://github.com/JuliaLang/julia/issues/24657 diff --git a/src/Compat.jl b/src/Compat.jl index 5b705565c170c..6bb4c0a031dbe 100644 --- a/src/Compat.jl +++ b/src/Compat.jl @@ -793,6 +793,29 @@ if VERSION < v"0.7.0-DEV.2543" (::Type{Array{T}}){T}(s::UniformScaling, m::Integer, n::Integer) = Matrix{T}(s, m, n) end +# 0.7.0-DEV.2581 +@static if !isdefined(Base, :Uninitialized) + if VERSION >= v"0.6.0" + include_string(@__MODULE__, """ + struct Uninitialized end + Array{T}(::Uninitialized, args...) where {T} = Array{T}(args...) + Array{T,N}(::Uninitialized, args...) where {T,N} = Array{T,N}(args...) + Vector(::Uninitialized, args...) = Vector(args...) + Matrix(::Uninitialized, args...) = Matrix(args...) + """) + else + include_string(@__MODULE__, """ + immutable Uninitialized end + (::Type{Array{T}}){T}(::Uninitialized, args...) = Array{T}(args...) + (::Type{Array{T,N}}){T,N}(::Uninitialized, args...) = Array{T,N}(args...) + (::Type{Vector})(::Uninitialized, args...) = Vector(args...) + (::Type{Matrix})(::Uninitialized, args...) = Matrix(args...) + """) + end + const uninitialized = Uninitialized() + export Uninitialized, uninitialized +end + include("deprecated.jl") end # module Compat diff --git a/test/runtests.jl b/test/runtests.jl index 2483558e54faf..978bc1a88bfd3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -895,6 +895,15 @@ let a = [1 0 0; 0 1 0; 0 0 1] @test SparseMatrixCSC{Complex128,Int8}(I, 3, 2)::SparseMatrixCSC{Complex128,Int8} == a[:,1:2] end + +# 0.7.0-DEV.2581 +@test isa(Vector(uninitialized, 2), Vector{Any}) +@test isa(Vector{Float64}(uninitialized, 2), Vector{Float64}) +@test isa(Matrix(uninitialized, 2, 2), Matrix{Any}) +@test isa(Matrix{Float64}(uninitialized, 2, 2), Matrix{Float64}) +@test isa(Array{Float64}(uninitialized, 2, 2), Matrix{Float64}) +@test isa(Array{Float64,3}(uninitialized, 2, 2, 2), Array{Float64,3}) + if VERSION < v"0.6.0" include("deprecated.jl") end