diff --git a/base/broadcast.jl b/base/broadcast.jl index 19d32199e4eb6..b4d89e9a5fb1b 100644 --- a/base/broadcast.jl +++ b/base/broadcast.jl @@ -925,7 +925,7 @@ const NonleafHandlingStyles = Union{DefaultArrayStyle,ArrayConflict} # Now handle the remaining values # The typeassert gives inference a helping hand on the element type and dimensionality # (work-around for #28382) - ElType′ = ElType <: Type ? Type : ElType + ElType′ = ElType === Union{} ? Any : ElType <: Type ? Type : ElType RT = dest isa AbstractArray ? AbstractArray{<:ElType′, ndims(dest)} : Any return copyto_nonleaf!(dest, bc′, iter, state, 1)::RT end diff --git a/base/regex.jl b/base/regex.jl index 8ee07fbc006cc..943291e1f5eb1 100644 --- a/base/regex.jl +++ b/base/regex.jl @@ -119,8 +119,9 @@ function show(io::IO, re::Regex) imsxa = PCRE.CASELESS|PCRE.MULTILINE|PCRE.DOTALL|PCRE.EXTENDED|PCRE.UCP opts = re.compile_options if (opts & ~imsxa) == (DEFAULT_COMPILER_OPTS & ~imsxa) - print(io, 'r') - print_quoted_literal(io, re.pattern) + print(io, "r\"") + escape_raw_string(io, re.pattern) + print(io, "\"") if (opts & PCRE.CASELESS ) != 0; print(io, 'i'); end if (opts & PCRE.MULTILINE) != 0; print(io, 'm'); end if (opts & PCRE.DOTALL ) != 0; print(io, 's'); end @@ -456,8 +457,9 @@ isvalid(s::SubstitutionString, i::Integer) = isvalid(s.string, i)::Bool iterate(s::SubstitutionString, i::Integer...) = iterate(s.string, i...)::Union{Nothing,Tuple{AbstractChar,Int}} function show(io::IO, s::SubstitutionString) - print(io, "s") - print_quoted_literal(io, s.string) + print(io, "s\"") + escape_raw_string(io, s.string) + print(io, "\"") end """ diff --git a/base/strings/io.jl b/base/strings/io.jl index 2901fe4bd3c2b..40d127150ebee 100644 --- a/base/strings/io.jl +++ b/base/strings/io.jl @@ -186,16 +186,6 @@ write(io::IO, s::Union{String,SubString{String}}) = GC.@preserve s Int(unsafe_write(io, pointer(s), reinterpret(UInt, sizeof(s))))::Int print(io::IO, s::Union{String,SubString{String}}) = (write(io, s); nothing) -## printing literal quoted string data ## - -# this is the inverse of print_unescaped_chars(io, s, "\\\") - -function print_quoted_literal(io, s::AbstractString) - print(io, '"') - for c = s; c == '"' ? print(io, "\\\"") : print(io, c); end - print(io, '"') -end - """ repr(x; context=nothing) diff --git a/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/md5 b/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/md5 new file mode 100644 index 0000000000000..4a1d720b1d763 --- /dev/null +++ b/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/md5 @@ -0,0 +1 @@ +258aee97c44956a2ef94525b24899b66 diff --git a/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/sha512 b/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/sha512 new file mode 100644 index 0000000000000..bd810322f68bd --- /dev/null +++ b/deps/checksums/Downloads-0d798cfe2c06c304833dde913552fe13559a0c20.tar.gz/sha512 @@ -0,0 +1 @@ +882a552472b1023eed52ffbeeafd320a178dcb54f1dc36a5cc8c8c8f06c1038e13e8cd257784851532deaa3faaf9809146a0873c3dff28219b9ee6492366ee2c diff --git a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 deleted file mode 100644 index fe7ca5582969c..0000000000000 --- a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -7e7a92138a053f4f65265821714d0919 diff --git a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 b/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 deleted file mode 100644 index e16064534e7ef..0000000000000 --- a/deps/checksums/Downloads-4e55241413c95551c54fc5c9bfdf5f48cb02fc4c.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -31628f766030e5ab46de78d4da458944f37fbe460a60a9f8969a9eab6be105373f7a57230e70b22ac66a72a85a46b0f7e215d084f9e5141b215a5271b26c6162 diff --git a/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/md5 b/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/md5 deleted file mode 100644 index 2147d67d28017..0000000000000 --- a/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -a0c7f7783354f900c2d0aa37d247fc38 diff --git a/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/sha512 b/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/sha512 deleted file mode 100644 index cbc18cbd50973..0000000000000 --- a/deps/checksums/Downloads-a6e4926ca3e9cdb72487026c0b57394e71a68a07.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -3ce99eafc5f8bd82dcb4f4c60f19ad35543b3e50253d7c93d380c28b6af7dc485ce22418c565e8b12267c1463da0d30fd39577fa09ff82621431816f1ea4d456 diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index b6dd897b63dd3..4d5a67afafcad 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,2 +1,2 @@ DOWNLOADS_BRANCH = master -DOWNLOADS_SHA1 = 4e55241413c95551c54fc5c9bfdf5f48cb02fc4c +DOWNLOADS_SHA1 = 0d798cfe2c06c304833dde913552fe13559a0c20 diff --git a/test/broadcast.jl b/test/broadcast.jl index 1ac247e50f5b8..dff306ee27c11 100644 --- a/test/broadcast.jl +++ b/test/broadcast.jl @@ -990,3 +990,15 @@ p0 = copy(p) @test isequal(identity.(Vector{<:Union{Int, Missing}}[[1, 2],[missing, 1]]), [[1, 2],[missing, 1]]) end + +@testset "Issue #28382: eltype inconsistent with getindex" begin + struct Cyclotomic <: Number + end + + Base.eltype(::Type{<:Cyclotomic}) = Tuple{Int,Int} + + Base.:*(c::T, x::Cyclotomic) where {T<:Real} = [1, 2] + Base.:*(x::Cyclotomic, c::T) where {T<:Real} = [1, 2] + + @test Cyclotomic() .* [2, 3] == [[1, 2], [1, 2]] +end diff --git a/test/regex.jl b/test/regex.jl index 595a3417cd33f..76fecfb4e4f56 100644 --- a/test/regex.jl +++ b/test/regex.jl @@ -34,11 +34,6 @@ @test map(m -> m.match, eachmatch(r"(\p{L}+)", "Tú lees.")) == ["Tú", "lees"] @test map(m -> m.match, eachmatch(r"(\p{L}+)", "¿Cuál es tu pregunta?")) == ["Cuál", "es", "tu", "pregunta"] - # Issue 9545 (32 bit) - buf = PipeBuffer() - show(buf, r"") - @test read(buf, String) == "r\"\"" - # see #10994, #11447: PCRE2 allows NUL chars in the pattern @test occursin(Regex("^a\0b\$"), "a\0b") @@ -52,12 +47,17 @@ subst = s"FROM: \g\n MESSAGE: \1" @test replace(msg, re => subst) == "FROM: Julia\n MESSAGE: Hello" + # Issue #9545 (32 bit) + @test repr(r"") == "r\"\"" # Issue #36550 - @test repr(s"\x") == "s\"\\x\"" - @test repr(s"\\x") == "s\"\\\\x\"" - @test repr(s"\\\x") == "s\"\\\\\\x\"" - @test repr(s"x\\") == "s\"x\\\"" - @test repr(s"a\1b") == "s\"a\\1b\"" + @test repr(s"\x") == raw"s\"\x\"" + @test repr(s"\\x") == raw"s\"\\x\"" + @test repr(s"\\\x") == raw"s\"\\\x\"" + @test repr(s"x\\") == raw"s\"x\\\\\"" + @test repr(s"a\1b") == raw"s\"a\1b\"" + # Issue #29580 + @test repr(r"\\\"") == raw"r\"\\\\\\\"\"" + @test repr(s"\\\"\\") == raw"s\"\\\\\\\"\\\\\"" # findall @test findall(r"\w+", "foo bar") == [1:3, 5:7]