Skip to content

Commit 30875af

Browse files
committed
WIP: Update for main, some tests failing
1 parent eb6a39c commit 30875af

File tree

4 files changed

+32
-10
lines changed

4 files changed

+32
-10
lines changed

Sources/_StringProcessing/CharacterClass.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,13 @@ extension DSLTree.CustomCharacterClass {
477477
lhs: .characterClass(lhs),
478478
op: .symmetricDifference,
479479
rhs: .characterClass(rhs)))
480+
481+
case let .quotedLiteral(s):
482+
// Decompose quoted literal into literal characters.
483+
result += s.map { .character($0) }
484+
485+
case .trivia:
486+
break
480487
}
481488
}
482489
let cc = CharacterClass.custom(result)

Sources/_StringProcessing/ConsumerInterface.swift

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,9 @@ struct Unsupported: Error, CustomStringConvertible {
3737
func unsupported(
3838
_ s: String,
3939
file: StaticString = #file,
40-
line: Int = #line
40+
line: UInt = #line
4141
) -> Unsupported {
42-
return Unsupported(
43-
message: s, file: String(describing: file), line: line)
42+
return Unsupported(s, file: file, line: line)
4443
}
4544

4645
struct Unreachable: Error, CustomStringConvertible {
@@ -289,6 +288,19 @@ extension DSLTree.CustomCharacterClass.Member {
289288
}
290289
return rhs(input, bounds)
291290
}
291+
case .quotedLiteral(let s):
292+
return { input, bounds in
293+
guard input[bounds].starts(with: s) else {
294+
return nil
295+
}
296+
// TODO: Don't double count
297+
return input.index(bounds.lowerBound, offsetBy: s.count)
298+
}
299+
case .trivia:
300+
// TODO: Should probably strip this earlier...
301+
return { _, bounds in
302+
return bounds.lowerBound
303+
}
292304
}
293305

294306
}

Sources/_StringProcessing/PrintAsPattern.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,12 @@ extension PrettyPrinter {
197197
} else {
198198
print(" // TODO: Atom \(a) ")
199199
}
200-
case .quote(let q):
201-
print("// TODO: quote \(q.literal._quoted) in custom character classes (should we split it?)")
200+
case .quotedLiteral(let s):
201+
print("// TODO: quote \(s._quoted) in custom character classes (should we split it?)")
202202
case .trivia(let t):
203203
// TODO: We might want to output comments...
204204
_ = t
205-
case .symmetricDifference, .intersection, .subtraction:
205+
case .symmetricDifference, .intersection, .subtraction:
206206
print("// TODO: Set operation: \(member)")
207207
}
208208
}

Sources/_StringProcessing/RegexDSL/DSLTree.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ extension DSLTree {
9999
case range(Atom, Atom)
100100
case custom(CustomCharacterClass)
101101

102+
case quotedLiteral(String)
103+
104+
case trivia(String)
105+
102106
indirect case intersection(CustomCharacterClass, CustomCharacterClass)
103107
indirect case subtraction(CustomCharacterClass, CustomCharacterClass)
104108
indirect case symmetricDifference(CustomCharacterClass, CustomCharacterClass)
@@ -321,10 +325,7 @@ extension AST.CustomCharacterClass {
321325
return .atom(a.dslTreeAtom)
322326

323327
case let .quote(q):
324-
// TODO: Probably should flatten instead of nest
325-
return .custom(.init(
326-
members: q.literal.map { .atom(.char($0)) },
327-
isInverted: false))
328+
return .quotedLiteral(q.literal)
328329

329330
case let .setOperation(lhs, op, rhs):
330331
let lhs = DSLTree.CustomCharacterClass(
@@ -342,6 +343,8 @@ extension AST.CustomCharacterClass {
342343
case .symmetricDifference:
343344
return .symmetricDifference(lhs, rhs)
344345
}
346+
case let .trivia(t):
347+
return .trivia(t.contents)
345348
}
346349
}
347350

0 commit comments

Comments
 (0)