From 9a2b0fd1a7c2cf2048162ea0566b9fca783d19c5 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 7 Oct 2018 17:31:45 -0400 Subject: [PATCH 1/2] propgate inbounds to substring and use it in split --- base/strings/substring.jl | 8 ++++---- base/strings/util.jl | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/base/strings/substring.jl b/base/strings/substring.jl index 005e1de8eb2c2..ea8a54b69da2f 100644 --- a/base/strings/substring.jl +++ b/base/strings/substring.jl @@ -35,11 +35,11 @@ struct SubString{T<:AbstractString} <: AbstractString end end -SubString(s::T, i::Int, j::Int) where {T<:AbstractString} = SubString{T}(s, i, j) -SubString(s::AbstractString, i::Integer, j::Integer=lastindex(s)) = SubString(s, Int(i), Int(j)) -SubString(s::AbstractString, r::UnitRange{<:Integer}) = SubString(s, first(r), last(r)) +Base.@propagate_inbounds Base.SubString(s::T, i::Int, j::Int) where {T<:AbstractString} = SubString{T}(s, i, j) +Base.@propagate_inbounds SubString(s::AbstractString, i::Integer, j::Integer=lastindex(s)) = SubString(s, Int(i), Int(j)) +Base.@propagate_inbounds SubString(s::AbstractString, r::UnitRange{<:Integer}) = SubString(s, first(r), last(r)) -function SubString(s::SubString, i::Int, j::Int) +Base.@propagate_inbounds function SubString(s::SubString, i::Int, j::Int) @boundscheck i ≤ j && checkbounds(s, i:j) SubString(s.string, s.offset+i, s.offset+j) end diff --git a/base/strings/util.jl b/base/strings/util.jl index fc473568646ec..7d0962860c011 100644 --- a/base/strings/util.jl +++ b/base/strings/util.jl @@ -323,7 +323,7 @@ function _split(str::AbstractString, splitter, limit::Integer, keepempty::Bool, while 0 < j <= n && length(strs) != limit-1 if i < k if keepempty || i < j - push!(strs, SubString(str,i,prevind(str,j))) + push!(strs, @inbounds SubString(str,i,prevind(str,j))) end i = k end @@ -334,7 +334,7 @@ function _split(str::AbstractString, splitter, limit::Integer, keepempty::Bool, end end if keepempty || i <= ncodeunits(str) - push!(strs, SubString(str,i)) + push!(strs, @inbounds SubString(str,i)) end return strs end From d455e1a801370391849f33f2097206f902bd2235 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 8 Oct 2018 10:09:05 -0400 Subject: [PATCH 2/2] remove Base prefix --- base/strings/substring.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/base/strings/substring.jl b/base/strings/substring.jl index ea8a54b69da2f..a949d2c342af5 100644 --- a/base/strings/substring.jl +++ b/base/strings/substring.jl @@ -35,11 +35,11 @@ struct SubString{T<:AbstractString} <: AbstractString end end -Base.@propagate_inbounds Base.SubString(s::T, i::Int, j::Int) where {T<:AbstractString} = SubString{T}(s, i, j) -Base.@propagate_inbounds SubString(s::AbstractString, i::Integer, j::Integer=lastindex(s)) = SubString(s, Int(i), Int(j)) -Base.@propagate_inbounds SubString(s::AbstractString, r::UnitRange{<:Integer}) = SubString(s, first(r), last(r)) +@propagate_inbounds SubString(s::T, i::Int, j::Int) where {T<:AbstractString} = SubString{T}(s, i, j) +@propagate_inbounds SubString(s::AbstractString, i::Integer, j::Integer=lastindex(s)) = SubString(s, Int(i), Int(j)) +@propagate_inbounds SubString(s::AbstractString, r::UnitRange{<:Integer}) = SubString(s, first(r), last(r)) -Base.@propagate_inbounds function SubString(s::SubString, i::Int, j::Int) +@propagate_inbounds function SubString(s::SubString, i::Int, j::Int) @boundscheck i ≤ j && checkbounds(s, i:j) SubString(s.string, s.offset+i, s.offset+j) end