Skip to content

Commit 65cb15b

Browse files
committed
Hook up char class models
1 parent b7074e4 commit 65cb15b

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

Sources/_StringProcessing/CharacterClass.swift

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ extension DSLTree.Node {
330330
return ccc.modelCharacterClass
331331
case let .atom(a):
332332
return a.characterClass
333-
case let .characterPredicate(p):
333+
case .characterPredicate:
334334
// FIXME: Do we make one from this?
335335
return nil
336336
default:
@@ -417,8 +417,8 @@ extension AST.Atom.EscapedBuiltin {
417417
}
418418

419419
extension DSLTree.CustomCharacterClass {
420+
// TODO: Refactor a bit, and... can we drop this type?
420421
var modelCharacterClass: CharacterClass? {
421-
422422
var result =
423423
Array<CharacterClass.CharacterSetComponent>()
424424
for m in members {
@@ -445,8 +445,38 @@ extension DSLTree.CustomCharacterClass {
445445
}
446446
result.append(.characterClass(cc))
447447

448-
case .intersection, .subtraction, .symmetricDifference:
449-
fatalError("TODO")
448+
case let .intersection(lhs, rhs):
449+
guard let lhs = lhs.modelCharacterClass,
450+
let rhs = rhs.modelCharacterClass
451+
else {
452+
return nil
453+
}
454+
result.append(.setOperation(
455+
lhs: .characterClass(lhs),
456+
op: .intersection,
457+
rhs: .characterClass(rhs)))
458+
459+
case let .subtraction(lhs, rhs):
460+
guard let lhs = lhs.modelCharacterClass,
461+
let rhs = rhs.modelCharacterClass
462+
else {
463+
return nil
464+
}
465+
result.append(.setOperation(
466+
lhs: .characterClass(lhs),
467+
op: .subtraction,
468+
rhs: .characterClass(rhs)))
469+
470+
case let .symmetricDifference(lhs, rhs):
471+
guard let lhs = lhs.modelCharacterClass,
472+
let rhs = rhs.modelCharacterClass
473+
else {
474+
return nil
475+
}
476+
result.append(.setOperation(
477+
lhs: .characterClass(lhs),
478+
op: .symmetricDifference,
479+
rhs: .characterClass(rhs)))
450480
}
451481
}
452482
let cc = CharacterClass.custom(result)

0 commit comments

Comments
 (0)