diff --git a/base/strings/substring.jl b/base/strings/substring.jl index 7cc4c53a6b661..5142cf65fe9c5 100644 --- a/base/strings/substring.jl +++ b/base/strings/substring.jl @@ -214,10 +214,16 @@ end function string(a::Union{Char, String, SubString{String}, Symbol}...) n = 0 for v in a + # 4 types is too many for automatic Union-splitting, so we split manually + # and allow one specializable call site per concrete type if v isa Char n += ncodeunits(v) - else + elseif v isa String + n += sizeof(v) + elseif v isa SubString{String} n += sizeof(v) + else + n += sizeof(v::Symbol) end end out = _string_n(n)