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

@@ -0,0 +1,7 @@
// RUN: %target-typecheck-verify-swift -enable-experimental-string-processing
// REQUIRES: libswift
let s = '\\'' // expected-error {{unterminated regex literal}}
// expected-error@+1 {{unterminated regex literal}}
var unterminated = 'xy