@@ -35,6 +35,12 @@ struct Delimiter: Hashable {
3535 return false
3636 }
3737 }
38+
39+ /// The delimiters which are currently enabled.
40+ static var enabledDelimiters : [ Kind ] { [ . forwardSlash] }
41+
42+ /// All known delimiters.
43+ static var allDelimiters : [ Kind ] { Kind . allCases }
3844}
3945
4046extension Delimiter {
@@ -106,11 +112,15 @@ fileprivate struct DelimiterLexer {
106112 var firstNewline : UnsafeRawPointer ?
107113 var isMultiline : Bool { firstNewline != nil }
108114
109- init ( start: UnsafeRawPointer , end: UnsafeRawPointer ) {
115+ let delimiters : [ Delimiter . Kind ]
116+
117+ init ( start: UnsafeRawPointer , end: UnsafeRawPointer ,
118+ delimiters: [ Delimiter . Kind ] ) {
110119 precondition ( start <= end)
111120 self . start = start
112121 self . cursor = start
113122 self . end = end
123+ self . delimiters = delimiters
114124 }
115125
116126 func ascii( _ s: Unicode . Scalar ) -> UInt8 {
@@ -337,7 +347,7 @@ fileprivate struct DelimiterLexer {
337347 }
338348
339349 mutating func tryLexOpeningDelimiter( poundCount: Int ) -> Delimiter ? {
340- for kind in Delimiter . Kind . allCases {
350+ for kind in delimiters {
341351 // If the delimiter allows extended pound syntax, or there are no pounds,
342352 // we just need to lex it.
343353 let opening = kind. opening. utf8
@@ -435,7 +445,7 @@ func droppingRegexDelimiters(_ str: String) -> (String, Delimiter) {
435445 precondition ( result. utf8. elementsEqual ( slice) )
436446 return ( result, delim)
437447 }
438- for kind in Delimiter . Kind . allCases {
448+ for kind in Delimiter . allDelimiters {
439449 if let ( contents, d) = stripDelimiter ( kind) {
440450 return ( contents, d)
441451 }
@@ -446,8 +456,9 @@ func droppingRegexDelimiters(_ str: String) -> (String, Delimiter) {
446456/// Attempt to lex a regex literal between `start` and `end`, returning either
447457/// the contents and pointer from which to resume lexing, or an error.
448458func lexRegex(
449- start: UnsafeRawPointer , end: UnsafeRawPointer
459+ start: UnsafeRawPointer , end: UnsafeRawPointer ,
460+ delimiters: [ Delimiter . Kind ] = Delimiter . enabledDelimiters
450461) throws -> ( contents: String , Delimiter , end: UnsafeRawPointer ) {
451- var lexer = DelimiterLexer ( start: start, end: end)
462+ var lexer = DelimiterLexer ( start: start, end: end, delimiters : delimiters )
452463 return try lexer. lex ( )
453464}
0 commit comments