apple / swift-experimental-string-processing

An early experimental general-purpose pattern matching engine for Swift.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Regex non-deterministicly fails

jasonbobier opened this issue · comments

Description
Please see the attached playground. The regex in it will work sometimes and fail other times over the same data set. It fails because it isn't greedily consuming a ZeroOrMore.

Steps to reproduce
Open the enclosed playground. Keep changing portions (to cause a recompile) until it fails.

Expected behavior
The ZeroOrMores should consume the entire matching string in the whole match. Also, the same string processed by the same regex should always either fail or not fail.

Environment

  • Swift compiler version info: swift-driver version
    1.62.15 Apple Swift version 5.7.2 (swiftlang-5.7.2.135.5 clang-1400.0.29.51)
    Target: arm64-apple-macosx13.0

  • Xcode version info:
    Xcode 14.2
    Build version 14C18

Mac.playground.zip

The playground in Xcode Version 15.0 beta (15A5160n) produces:

expression failed to parse:
error: Couldn't lookup symbols:
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>

The playground in Xcode Version 15.0 beta (15A5160n) produces:

expression failed to parse:
error: Couldn't lookup symbols:
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>
  _StringProcessing._RegexFactory.ignoreCapturesInTypedOutput<τ_0_0 where τ_0_0: _StringProcessing.RegexComponent>(τ_0_0) -> _StringProcessing.Regex<Swift.Substring>

Still seeing this error in Xcode 15 final.

@natecook1000 can you comment on this? It has been over a year and I still get a non-deterministic failure with this code.