Regex literal runtime plumbing.

- Frontend: Implicitly import `_StringProcessing` when frontend flag `-enable-experimental-string-processing` is set.
- Type checker: Set a regex literal expression's type as `_StringProcessing.Regex<(Substring, DynamicCaptures)>`. `(Substring, DynamicCaptures)` is a temporary `Match` type that will help get us to an end-to-end working system. This will be replaced by actual type inference based a regex's pattern in a follow-up patch (soon).
- SILGen: Lower a regex literal expression to a call to `_StringProcessing.Regex.init(_regexString:)`.
- String processing runtime: Add `Regex`, `DynamicCaptures` (matching actual APIs in apple/swift-experimental-string-processing), and `Regex(_regexString:)`.

Upcoming:
- Build `_MatchingEngine` and `_StringProcessing` modules with sources from apple/swift-experimental-string-processing.
- Replace `DynamicCaptures` with inferred capture types.
This commit is contained in:
Richard Wei
2021-12-06 19:10:07 -08:00
parent 2d12fab618
commit 05363cd55a
25 changed files with 164 additions and 102 deletions

View File

@@ -1,8 +1,10 @@
import Swift
import _MatchingEngine
public struct DummyRegex<Match> {
public init() {
fatalError("Unimplemented")
}
@frozen
public struct Regex<Match> {
@usableFromInline
init(_regexString: String) {}
}
public enum DynamicCaptures {}