@@ -112,7 +112,7 @@ final class Pattern {
112112 // RegEx matches.
113113 if patternStr. range ( of: " {{ " ) ? . lowerBound == patternStr. startIndex {
114114 // This is the start of a regex match. Scan for the }}.
115- patternStr = patternStr . substring ( from : patternStr. index ( patternStr. startIndex, offsetBy: 2 ) )
115+ patternStr = String ( patternStr [ patternStr . index ( patternStr. startIndex, offsetBy: 2 ) ... ] )
116116 guard let end = self . findRegexVarEnd ( patternStr, brackets: ( open: " { " , close: " } " ) , terminator: " }} " ) else {
117117 let loc = CheckLoc . inBuffer ( pattern. baseAddress!, buf)
118118 diagnose ( . error, at: loc, with: " found start of regex string with no end '}}' " , options: options)
@@ -126,15 +126,15 @@ final class Pattern {
126126 regExPattern += " ( "
127127 curParen += 1
128128
129- let substr = patternStr. substring ( to : end)
129+ let substr = patternStr [ ..< end]
130130 let ( res, paren) = self . addRegExToRegEx ( substr, curParen)
131131 curParen = paren
132132 if res {
133133 return nil
134134 }
135135 regExPattern += " ) "
136136
137- patternStr = patternStr . substring ( from : patternStr. index ( end, offsetBy: 2 ) )
137+ patternStr = String ( patternStr [ patternStr . index ( end, offsetBy: 2 ) ... ] )
138138 continue
139139 }
140140
@@ -146,23 +146,23 @@ final class Pattern {
146146 if patternStr. hasPrefix ( " [[ " ) {
147147 // Find the closing bracket pair ending the match. End is going to be an
148148 // offset relative to the beginning of the match string.
149- let regVar = patternStr . substring ( from : patternStr. index ( patternStr. startIndex, offsetBy: 2 ) )
149+ let regVar = String ( patternStr [ patternStr . index ( patternStr. startIndex, offsetBy: 2 ) ... ] )
150150 guard let end = self . findRegexVarEnd ( regVar, brackets: ( open: " [ " , close: " ] " ) , terminator: " ]] " ) else {
151151 let loc = CheckLoc . inBuffer ( pattern. baseAddress!, buf)
152152 diagnose ( . error, at: loc, with: " invalid named regex reference, no ]] found " , options: options)
153153 return nil
154154 }
155155
156- let matchStr = regVar. substring ( to : end)
157- patternStr = patternStr . substring ( from : patternStr. index ( end, offsetBy: 4 ) )
156+ let matchStr = regVar [ ..< end]
157+ patternStr = String ( patternStr [ patternStr . index ( end, offsetBy: 4 ) ... ] )
158158
159159 // Get the regex name (e.g. "foo").
160160 let nameEnd = matchStr. range ( of: " : " )
161161 let name : String
162162 if let end = nameEnd? . lowerBound {
163- name = matchStr. substring ( to : end)
163+ name = String ( matchStr [ ..< end] )
164164 } else {
165- name = matchStr
165+ name = String ( matchStr)
166166 }
167167
168168 if name. isEmpty {
@@ -218,7 +218,7 @@ final class Pattern {
218218 self . regExPattern += " ( "
219219 curParen += 1
220220
221- let ( res, paren) = self . addRegExToRegEx ( matchStr. substring ( from : matchStr. index ( after: ne. lowerBound) ) , curParen)
221+ let ( res, paren) = self . addRegExToRegEx ( matchStr [ matchStr. index ( after: ne. lowerBound) ... ] , curParen)
222222 curParen = paren
223223 if res {
224224 return nil
@@ -230,8 +230,8 @@ final class Pattern {
230230 // Handle fixed string matches.
231231 // Find the end, which is the start of the next regex.
232232 if let fixedMatchEnd = mino ( patternStr. range ( of: " {{ " ) ? . lowerBound, patternStr. range ( of: " [[ " ) ? . lowerBound) {
233- self . regExPattern += NSRegularExpression . escapedPattern ( for: patternStr. substring ( to : fixedMatchEnd) )
234- patternStr = patternStr . substring ( from : fixedMatchEnd)
233+ self . regExPattern += NSRegularExpression . escapedPattern ( for: String ( patternStr [ ..< fixedMatchEnd] ) )
234+ patternStr = String ( patternStr [ fixedMatchEnd... ] )
235235 } else {
236236 // No more matches, time to quit.
237237 self . regExPattern += NSRegularExpression . escapedPattern ( for: patternStr)
@@ -260,13 +260,13 @@ final class Pattern {
260260 if !expr. hasPrefix ( " @LINE " ) {
261261 return nil
262262 }
263- expr = expr . substring ( from : expr. index ( expr. startIndex, offsetBy: " @LINE " . utf8. count) )
263+ expr = String ( expr [ expr . index ( expr. startIndex, offsetBy: " @LINE " . utf8. count) ... ] )
264264 guard let firstC = expr. characters. first else {
265265 return " \( self . lineNumber) "
266266 }
267267
268268 if firstC == " + " {
269- expr = expr . substring ( from : expr. index ( after: expr. startIndex) )
269+ expr = String ( expr [ expr . index ( after: expr. startIndex) ... ] )
270270 } else if firstC != " - " {
271271 return nil
272272 }
@@ -350,19 +350,15 @@ final class Pattern {
350350 var mutTable = variableTable
351351 for (v, index) in self . variableDefs {
352352 assert ( index < fullMatch. numberOfRanges, " Internal paren error " )
353- #if os(macOS)
354- let r = fullMatch. rangeAt ( index)
355- #else
356- let r = fullMatch. range ( at: index)
357- #endif
358- mutTable [ v] = buffer. substring (
359- with: Range < String . Index > (
353+ let r = fullMatch. range ( at: index)
354+ mutTable [ v] = String ( buffer [
355+ Range < String . Index > (
360356 uncheckedBounds: (
361357 buffer. index ( buffer. startIndex, offsetBy: r. location) ,
362358 buffer. index ( buffer. startIndex, offsetBy: NSMaxRange ( r) )
363359 )
364360 )
365- )
361+ ] )
366362 }
367363
368364 return ( fullMatch. range, mutTable)
@@ -386,7 +382,7 @@ final class Pattern {
386382 }
387383 if firstChar == " \\ " {
388384 // Backslash escapes the next char within regexes, so skip them both.
389- string = string . substring ( from : string. index ( string. startIndex, offsetBy: 2 ) )
385+ string = String ( string [ string . index ( string. startIndex, offsetBy: 2 ) ... ] )
390386 offset = regVar. index ( offset, offsetBy: 2 )
391387 } else {
392388 switch firstChar {
@@ -405,17 +401,17 @@ final class Pattern {
405401 default :
406402 break
407403 }
408- string = string . substring ( from : string. index ( after: string. startIndex) )
404+ string = String ( string [ string . index ( after: string. startIndex) ... ] )
409405 offset = regVar. index ( after: offset)
410406 }
411407 }
412408
413409 return nil
414410 }
415411
416- private func addRegExToRegEx( _ RS : String , _ cur : Int ) -> ( Bool , Int ) {
412+ private func addRegExToRegEx( _ RS : Substring , _ cur : Int ) -> ( Bool , Int ) {
417413 do {
418- let r = try NSRegularExpression ( pattern: RS , options: [ ] )
414+ let r = try NSRegularExpression ( pattern: String ( RS ) , options: [ ] )
419415 self . regExPattern += RS
420416 return ( false , cur + r. numberOfCaptureGroups)
421417 } catch let e {
@@ -435,7 +431,7 @@ func countNumNewlinesBetween(_ r : String) -> (Int, String.Index?) {
435431 guard let EOL = range. range ( of: " \n " ) ? . lowerBound ?? range. range ( of: " \r " ) ? . lowerBound else {
436432 return ( NumNewLines, firstNewLine)
437433 }
438- range = range . substring ( from : EOL)
434+ range = String ( range [ EOL... ] )
439435 if range. isEmpty {
440436 return ( NumNewLines, firstNewLine)
441437 }
@@ -446,7 +442,7 @@ func countNumNewlinesBetween(_ r : String) -> (Int, String.Index?) {
446442 // if Range.utf8.count > 1 && (Range.utf8[1] == '\n' || Range[1] == '\r') && (Range[0] != Range[1]) {
447443 // Range = Range.substr(1)
448444 // }
449- range = range . substring ( from : range. index ( after: range. startIndex) )
445+ range = String ( range [ range . index ( after: range. startIndex) ... ] )
450446
451447 if NumNewLines == 1 {
452448 firstNewLine = range. startIndex
0 commit comments