multi-demangle 2.0.1__tar.gz → 2.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/Cargo.lock +1 -1
  2. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/Cargo.toml +1 -1
  3. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/PKG-INFO +12 -4
  4. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/README.md +11 -3
  5. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/build.rs +1 -1
  6. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/pyproject.toml +1 -1
  7. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/scripts/collect-swift-corpus.sh +15 -1
  8. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/scripts/swift-corpus-fixture.swift +63 -0
  9. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/scripts/sync-swift.sh +1 -1
  10. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/lib.rs +1 -1
  11. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/structured/swift.rs +3 -2
  12. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/MANIFEST.txt +1 -1
  13. multi_demangle-2.1.0/vendor/swift/SYNC.md +62 -0
  14. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/Hashing.h +1 -1
  15. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/StringRef.h +2 -0
  16. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/AST/Ownership.h +1 -1
  17. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/Demangle.h +1 -0
  18. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/DemangleNodes.def +4 -2
  19. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/Demangler.h +2 -0
  20. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Strings.h +4 -0
  21. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/Demangler.cpp +66 -8
  22. multi_demangle-2.0.1/vendor/swift/lib/Demangling/Errors.cpp → multi_demangle-2.1.0/vendor/swift/lib/Demangling/DemanglingErrorHandling.cpp +1 -1
  23. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/NodePrinter.cpp +20 -6
  24. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/Remangler.cpp +36 -8
  25. multi_demangle-2.0.1/vendor/swift/SYNC.md +0 -35
  26. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/.github/workflows/CI.yml +0 -0
  27. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/.github/workflows/swift-sync-reminder.yml +0 -0
  28. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/.gitignore +0 -0
  29. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/LICENSE +0 -0
  30. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/benches/batch.rs +0 -0
  31. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/README.md +0 -0
  32. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/collect-corpus.sh +0 -0
  33. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/docker/gnu-toolchains.Dockerfile +0 -0
  34. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/docker/kotlin-native.Dockerfile +0 -0
  35. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/ada/corpus-child.adb +0 -0
  36. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/ada/corpus-child.ads +0 -0
  37. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/ada/corpus.adb +0 -0
  38. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/ada/corpus.ads +0 -0
  39. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/ada/main.adb +0 -0
  40. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/dlang/corpus.d +0 -0
  41. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/fortran/corpus.f90 +0 -0
  42. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/fixtures/kotlin/corpus.kt +0 -0
  43. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/scripts/emit-kotlin-symbols.sh +0 -0
  44. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/scripts/emit-symbols.sh +0 -0
  45. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/scripts/gen_dlang_symbols.py +0 -0
  46. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/contrib/scripts/update-corpus-expectations.sh +0 -0
  47. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/python/multi_demangle/__init__.py +0 -0
  48. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/python/multi_demangle/__init__.pyi +0 -0
  49. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/python/multi_demangle/multi_demangle.pyi +0 -0
  50. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/python/tests/test_demangle.py +0 -0
  51. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/python/tests/test_structured.py +0 -0
  52. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/scripts/collect-corpus.sh +0 -0
  53. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/ada.rs +0 -0
  54. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/dlang.rs +0 -0
  55. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/fortran.rs +0 -0
  56. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/hygiene.rs +0 -0
  57. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/kotlin_native.rs +0 -0
  58. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/main.rs +0 -0
  59. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/structured/mod.rs +0 -0
  60. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/structured/msvc.rs +0 -0
  61. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/src/swiftdemangle.cpp +0 -0
  62. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/Cargo.toml +0 -0
  63. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/Cargo.toml.orig +0 -0
  64. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/PATCH.md +0 -0
  65. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/README.md +0 -0
  66. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/dem.rs +0 -0
  67. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/dem_arg.rs +0 -0
  68. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/dem_arg_list.rs +0 -0
  69. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/dem_namespace.rs +0 -0
  70. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/dem_template.rs +0 -0
  71. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/demangle_config.rs +0 -0
  72. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/demangle_error.rs +0 -0
  73. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/demangler.rs +0 -0
  74. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/lib.rs +0 -0
  75. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/option_display.rs +0 -0
  76. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/remainer.rs +0 -0
  77. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/gnuv2_demangle/src/str_cutter.rs +0 -0
  78. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/Cargo.toml +0 -0
  79. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/Cargo.toml.orig +0 -0
  80. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/LICENSE.LLVM +0 -0
  81. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/LICENSE.MIT +0 -0
  82. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/PATCH.md +0 -0
  83. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/README.md +0 -0
  84. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/msvc-demangler/src/lib.rs +0 -0
  85. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/scala-native-demangle/Cargo.toml +0 -0
  86. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/scala-native-demangle/Cargo.toml.orig +0 -0
  87. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/scala-native-demangle/PATCH.md +0 -0
  88. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/scala-native-demangle/README.md +0 -0
  89. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/scala-native-demangle/src/lib.rs +0 -0
  90. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/LICENSE.txt +0 -0
  91. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/LICENSE_LLVM.txt +0 -0
  92. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/README.md +0 -0
  93. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/ADL.h +0 -0
  94. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/DenseMapInfo.h +0 -0
  95. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/PointerIntPair.h +0 -0
  96. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/STLExtras.h +0 -0
  97. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/STLForwardCompat.h +0 -0
  98. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/STLFunctionalExtras.h +0 -0
  99. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/StringSwitch.h +0 -0
  100. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/bit.h +0 -0
  101. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/iterator.h +0 -0
  102. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/ADT/iterator_range.h +0 -0
  103. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Config/abi-breaking.h +0 -0
  104. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Config/llvm-config.h +0 -0
  105. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/Casting.h +0 -0
  106. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/Compiler.h +0 -0
  107. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/DataTypes.h +0 -0
  108. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/ErrorHandling.h +0 -0
  109. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/PointerLikeTypeTraits.h +0 -0
  110. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/SwapByteOrder.h +0 -0
  111. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm/Support/type_traits.h +0 -0
  112. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/llvm-c/DataTypes.h +0 -0
  113. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/ABI/InvertibleProtocols.def +0 -0
  114. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/AST/ReferenceStorage.def +0 -0
  115. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Basic/InlineBitfield.h +0 -0
  116. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Basic/LLVM.h +0 -0
  117. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Basic/MacroRoles.def +0 -0
  118. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Basic/STLExtras.h +0 -0
  119. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/Errors.h +0 -0
  120. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/ManglingFlavor.h +0 -0
  121. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/ManglingMacros.h +0 -0
  122. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/ManglingUtils.h +0 -0
  123. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/NamespaceMacros.h +0 -0
  124. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/Punycode.h +0 -0
  125. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/StandardTypesMangling.def +0 -0
  126. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/include/swift/Demangling/ValueWitnessMangling.def +0 -0
  127. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/Context.cpp +0 -0
  128. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/DemanglerAssert.h +0 -0
  129. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/ManglingUtils.cpp +0 -0
  130. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/NodeDumper.cpp +0 -0
  131. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/Punycode.cpp +0 -0
  132. {multi_demangle-2.0.1 → multi_demangle-2.1.0}/vendor/swift/lib/Demangling/RemanglerBase.h +0 -0
@@ -359,7 +359,7 @@ dependencies = [
359
359
 
360
360
  [[package]]
361
361
  name = "multi-demangle"
362
- version = "2.0.1"
362
+ version = "2.1.0"
363
363
  dependencies = [
364
364
  "cc",
365
365
  "clap",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "multi-demangle"
3
- version = "2.0.1"
3
+ version = "2.1.0"
4
4
  license = "MIT"
5
5
  authors = [
6
6
  "Team AppThreat <cloud@appthreat.com>"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-demangle
3
- Version: 2.0.1
3
+ Version: 2.1.0
4
4
  License-File: LICENSE
5
5
  Summary: A library to demangle symbols from various languages and compilers.
6
6
  Keywords: demangler,binary
@@ -22,7 +22,7 @@ Currently supported languages are:
22
22
  | C++ | Itanium ABI (GCC, Clang), GNU v2, CodeWarrior, and MSVC | `cpp`, `gnuv2`, `codewarrior`, `msvc` |
23
23
  | Rust | Both `legacy` and `v0` schemes | `rust` |
24
24
  | Scala Native | Via the unknown-language fallback (symbols prefixed `_SM`) | `scala-native` |
25
- | Swift | Up to Swift 6.3.3, using a vendored Swift demangler | `swift` |
25
+ | Swift | Up to Swift 6.4.0, using a vendored Swift demangler | `swift` |
26
26
  | D | D ABI mangling (`_D…`), incl. function types and templates | `dlang` |
27
27
  | Fortran | gfortran `mod_MOD_proc`, Intel `mod_mp_proc_`, and the plain g77 `name_` form — **explicit request only** (see below) | `fortran` |
28
28
  | Kotlin/Native | `_kfun:` symbols with parameter types | `kotlin-native` |
@@ -607,8 +607,16 @@ The supported-version claim above is backed by per-toolchain corpus snapshots:
607
607
  `scripts/collect-swift-corpus.sh` compiles a fixture with a concrete Swift
608
608
  toolchain (pass its `swiftc` to represent another one) into
609
609
  `tests/corpus/swift/<version>/`, and the `swift_corpus` test pins the exact
610
- rendering. After a sync that changes output, regenerate snapshots deliberately
611
- and review the diff — downstream consumers (blint) match on these strings:
610
+ rendering. The fixture exercises the constructs whose manglings drift between
611
+ toolchains; Swift 6.4 additions (SE-0507 borrow/mutate accessors, SE-0521
612
+ optional opaque types, SE-0474 yielding accessors) are guarded with
613
+ `#if compiler(>=6.4)`, and the script retries the compile with
614
+ `-enable-experimental-feature CoroutineAccessors` when the toolchain gates the
615
+ yielding accessors (recorded in the corpus `provenance.txt`). After a sync
616
+ that changes output, regenerate snapshots deliberately and review the diff —
617
+ downstream consumers (blint) match on these strings. Note that Swift 6.4
618
+ renamed the rendering of the coroutine accessors: symbols that printed as
619
+ `.read2`/`.modify2` now print as `.yielding_borrow`/`.yielding_mutate`.
612
620
 
613
621
  ```
614
622
  MULTI_DEMANGLE_UPDATE_SNAPSHOTS=1 cargo test --all-features --test test_swift_corpus
@@ -12,7 +12,7 @@ Currently supported languages are:
12
12
  | C++ | Itanium ABI (GCC, Clang), GNU v2, CodeWarrior, and MSVC | `cpp`, `gnuv2`, `codewarrior`, `msvc` |
13
13
  | Rust | Both `legacy` and `v0` schemes | `rust` |
14
14
  | Scala Native | Via the unknown-language fallback (symbols prefixed `_SM`) | `scala-native` |
15
- | Swift | Up to Swift 6.3.3, using a vendored Swift demangler | `swift` |
15
+ | Swift | Up to Swift 6.4.0, using a vendored Swift demangler | `swift` |
16
16
  | D | D ABI mangling (`_D…`), incl. function types and templates | `dlang` |
17
17
  | Fortran | gfortran `mod_MOD_proc`, Intel `mod_mp_proc_`, and the plain g77 `name_` form — **explicit request only** (see below) | `fortran` |
18
18
  | Kotlin/Native | `_kfun:` symbols with parameter types | `kotlin-native` |
@@ -597,8 +597,16 @@ The supported-version claim above is backed by per-toolchain corpus snapshots:
597
597
  `scripts/collect-swift-corpus.sh` compiles a fixture with a concrete Swift
598
598
  toolchain (pass its `swiftc` to represent another one) into
599
599
  `tests/corpus/swift/<version>/`, and the `swift_corpus` test pins the exact
600
- rendering. After a sync that changes output, regenerate snapshots deliberately
601
- and review the diff — downstream consumers (blint) match on these strings:
600
+ rendering. The fixture exercises the constructs whose manglings drift between
601
+ toolchains; Swift 6.4 additions (SE-0507 borrow/mutate accessors, SE-0521
602
+ optional opaque types, SE-0474 yielding accessors) are guarded with
603
+ `#if compiler(>=6.4)`, and the script retries the compile with
604
+ `-enable-experimental-feature CoroutineAccessors` when the toolchain gates the
605
+ yielding accessors (recorded in the corpus `provenance.txt`). After a sync
606
+ that changes output, regenerate snapshots deliberately and review the diff —
607
+ downstream consumers (blint) match on these strings. Note that Swift 6.4
608
+ renamed the rendering of the coroutine accessors: symbols that printed as
609
+ `.read2`/`.modify2` now print as `.yielding_borrow`/`.yielding_mutate`.
602
610
 
603
611
  ```
604
612
  MULTI_DEMANGLE_UPDATE_SNAPSHOTS=1 cargo test --all-features --test test_swift_corpus
@@ -13,7 +13,7 @@ fn main() {
13
13
  "vendor/swift/lib/Demangling/NodePrinter.cpp",
14
14
  "vendor/swift/lib/Demangling/Punycode.cpp",
15
15
  "vendor/swift/lib/Demangling/Remangler.cpp",
16
- "vendor/swift/lib/Demangling/Errors.cpp",
16
+ "vendor/swift/lib/Demangling/DemanglingErrorHandling.cpp",
17
17
  ];
18
18
 
19
19
  cc::Build::new()
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "multi-demangle"
7
- version = "2.0.1"
7
+ version = "2.1.0"
8
8
  description = "A library to demangle symbols from various languages and compilers."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -64,7 +64,20 @@ trap 'rm -rf "$TMP"' EXIT
64
64
  # Internal (non-public) symbols are exactly what the demangler sees in real
65
65
  # binaries' symtabs, so no visibility gymnastics are needed; -parse-as-library
66
66
  # keeps top-level code out of the way of actors/global-actor isolation.
67
- "$SWIFTC" -c -parse-as-library -o "$TMP/fixture.o" "$FIXTURE"
67
+ # Swift 6.4 gates the fixture's yielding accessors (SE-0474) behind an
68
+ # experimental feature flag; when the plain compile rejects them, retry with
69
+ # the flag and record it in the provenance so the corpus stays reproducible.
70
+ EXTRA_FLAGS=""
71
+ if ! "$SWIFTC" -c -parse-as-library -o "$TMP/fixture.o" "$FIXTURE" 2>"$TMP/compile.log"; then
72
+ if "$SWIFTC" -c -parse-as-library \
73
+ -enable-experimental-feature CoroutineAccessors \
74
+ -o "$TMP/fixture.o" "$FIXTURE" 2>"$TMP/compile-flag.log"; then
75
+ EXTRA_FLAGS="-enable-experimental-feature CoroutineAccessors"
76
+ else
77
+ cat "$TMP/compile-flag.log" >&2
78
+ exit 1
79
+ fi
80
+ fi
68
81
 
69
82
  # Collect into the temp dir and only publish a corpus that passed the checks
70
83
  # below: writing straight to $OUT_DIR would truncate the committed snapshot
@@ -92,6 +105,7 @@ COUNT="$(grep -c '' < "$TMP/symbols.txt")"
92
105
  echo "target: $("$SWIFTC" -print-target-info 2>/dev/null \
93
106
  | sed -n 's/.*"unversionedTriple"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -1)"
94
107
  echo "source: scripts/swift-corpus-fixture.swift compiled with $SWIFTC"
108
+ [ -z "$EXTRA_FLAGS" ] || echo "flags: $EXTRA_FLAGS"
95
109
  } > "$TMP/provenance.txt"
96
110
 
97
111
  mv "$TMP/symbols.txt" "$OUT_DIR/symbols.txt"
@@ -7,6 +7,14 @@
7
7
  // between toolchains: generics and associated types, closures (escaping,
8
8
  // autoclosure, @Sendable), async/await and throw, actors and global-actor
9
9
  // isolation, property wrappers, subscripts, and specialization attributes.
10
+ //
11
+ // Swift 6.4 additions (SE-0507 borrow/mutate accessors, SE-0521 optional
12
+ // opaque/existential types, SE-0474 yielding accessors, SE-0493/SE-0504
13
+ // async-defer and cancellation shielding) are guarded with
14
+ // `#if compiler(>=6.4)` so the fixture still compiles with the 6.3.x
15
+ // toolchains that back the older corpora. The yielding accessors additionally
16
+ // need `-enable-experimental-feature CoroutineAccessors`, which
17
+ // collect-swift-corpus.sh passes automatically when the toolchain accepts it.
10
18
 
11
19
  import Foundation
12
20
 
@@ -149,3 +157,58 @@ extension Packet: CustomStringConvertible {
149
157
 
150
158
  @discardableResult
151
159
  func discardable(_ flag: Bool) -> Int { flag ? 1 : 0 }
160
+
161
+ // --- Swift 6.4 ---
162
+
163
+ #if compiler(>=6.4)
164
+ // nonisolated(nonsending) parameter isolation: the closure type mangles with
165
+ // the NonIsolatedCallerFunctionType marker ('C').
166
+ actor Queue {
167
+ func enqueue(_ op: nonisolated(nonsending) () async -> Void) async {
168
+ await op()
169
+ }
170
+ }
171
+ // SE-0507 borrow/mutate accessors on a Copyable type: the accessors mangle
172
+ // with the borrow ('b') and mutate ('z') accessor letters.
173
+ struct Gauge64 {
174
+ private var backing: Int = 7
175
+ var direct: Int {
176
+ borrow { backing }
177
+ mutate { &backing }
178
+ }
179
+ }
180
+
181
+ // SE-0507 accessors on a ~Copyable type (the proposal's motivating form).
182
+ struct Rigid<Element: ~Copyable>: ~Copyable {
183
+ var _element: Element
184
+ var element: Element {
185
+ borrow {
186
+ return _element
187
+ }
188
+ mutate {
189
+ return &_element
190
+ }
191
+ }
192
+ }
193
+
194
+ // SE-0521: optional opaque and existential types without parentheses.
195
+ func optionalOpaque64(_ p: Packet) -> some Payload? { p }
196
+ func optionalAny64(_ p: (any Payload)?) -> any Payload? { p }
197
+
198
+ // SE-0474 yielding accessors (experimental in 6.4): the coroutine accessors
199
+ // mangle as YieldingBorrowAccessor ('y') / YieldingMutateAccessor ('x').
200
+ struct Yielder {
201
+ private var storage: [Int] = [1, 2, 3]
202
+ var current: Int {
203
+ yielding borrow { yield storage[0] }
204
+ yielding mutate { yield &storage[0] }
205
+ }
206
+ }
207
+
208
+ // SE-0493: defer in async code runs (and is awaited) before the function
209
+ // exits. No dedicated mangling, but it exercises 6.4 codegen for the corpus.
210
+ func deferredAsync(_ flag: Bool) async -> Int {
211
+ defer { print("exiting") }
212
+ return flag ? 1 : 0
213
+ }
214
+ #endif
@@ -48,7 +48,7 @@ LLVM_SPARSE=(
48
48
 
49
49
  # build.rs compiles these lib/Demangling translation units; CrashReporter.cpp
50
50
  # is intentionally omitted (SWIFT_RUNTIME_NO_CRASH_REPORTER).
51
- BUILD_CPP="Context.cpp Demangler.cpp ManglingUtils.cpp NodeDumper.cpp NodePrinter.cpp Punycode.cpp Remangler.cpp Errors.cpp"
51
+ BUILD_CPP="Context.cpp Demangler.cpp ManglingUtils.cpp NodeDumper.cpp NodePrinter.cpp Punycode.cpp Remangler.cpp DemanglingErrorHandling.cpp"
52
52
 
53
53
  FORCE=0
54
54
  TAG=""
@@ -5,7 +5,7 @@
5
5
  //! - C++ (Itanium, GNU v2, CodeWarrior, and MSVC) (`features = ["cpp", "gnuv2", "codewarrior", "msvc"]`)
6
6
  //! - Rust (both `legacy` and `v0`) (`features = ["rust"]`)
7
7
  //! - Scala Native via the unknown-language fallback (`features = ["scala-native"]`)
8
- //! - Swift (up to Swift 6.3.3) (`features = ["swift"]`)
8
+ //! - Swift (up to Swift 6.4.0) (`features = ["swift"]`)
9
9
  //! - D (`features = ["dlang"]`)
10
10
  //! - Fortran, gfortran and Intel module symbols plus the plain g77 `name_`
11
11
  //! form — explicit-request-only (`features = ["fortran"]`)
@@ -55,9 +55,10 @@ const ACCESSOR_KINDS: &[&str] = &[
55
55
  "Setter",
56
56
  "MaterializeForSet",
57
57
  "ModifyAccessor",
58
- "Modify2Accessor",
58
+ // Renamed from Modify2Accessor/Read2Accessor at Swift 6.4 (SE-0474).
59
+ "YieldingMutateAccessor",
59
60
  "ReadAccessor",
60
- "Read2Accessor",
61
+ "YieldingBorrowAccessor",
61
62
  "WillSet",
62
63
  "DidSet",
63
64
  "OwningAddressor",
@@ -56,7 +56,7 @@ include/swift/Strings.h
56
56
  lib/Demangling/Context.cpp
57
57
  lib/Demangling/Demangler.cpp
58
58
  lib/Demangling/DemanglerAssert.h
59
- lib/Demangling/Errors.cpp
59
+ lib/Demangling/DemanglingErrorHandling.cpp
60
60
  lib/Demangling/ManglingUtils.cpp
61
61
  lib/Demangling/NodeDumper.cpp
62
62
  lib/Demangling/NodePrinter.cpp
@@ -0,0 +1,62 @@
1
+ # Swift vendor sync log
2
+
3
+ Records of every `vendor/swift` sync from upstream Swift, produced by
4
+ `scripts/sync-swift.sh <swift-tag>` (run it rather than editing by hand).
5
+ Each entry lists the upstream refs, what changed in the vendored subset,
6
+ the diffstat, and the validation results. The `sync-metadata` block at the
7
+ bottom always describes the most recent sync; the monthly CI reminder
8
+ workflow parses it to list upstream commits since the last sync.
9
+
10
+ ## 2026-08-29 — swift-6.3.3-RELEASE
11
+
12
+ - Swift ref: swift-6.3.3-RELEASE (064859e41d68596f486c5d724401cb370f260409)
13
+ - LLVM ref: swift-6.3.3-RELEASE (82cdc19fa54d566969527b56f587ea8ea30bef51)
14
+ - Headers added to the manifest: none
15
+ - Manifest files missing upstream: none
16
+ - Diffstat: 18 files changed, 3023 insertions(+), 1481 deletions(-)
17
+ - New files:
18
+ vendor/swift/SYNC.md
19
+ vendor/swift/include/llvm-c/
20
+ vendor/swift/include/llvm/ADT/ADL.h
21
+ vendor/swift/include/llvm/ADT/DenseMapInfo.h
22
+ vendor/swift/include/llvm/ADT/STLForwardCompat.h
23
+ vendor/swift/include/llvm/ADT/STLFunctionalExtras.h
24
+ vendor/swift/include/llvm/ADT/bit.h
25
+ vendor/swift/include/llvm/Config/
26
+ vendor/swift/include/llvm/Support/DataTypes.h
27
+ - Validation: cargo test --all-features PASS; pytest PASS; ASan/UBSan corpus PASS
28
+
29
+
30
+ ## 2026-09-15 — swift-6.4.0-RELEASE
31
+
32
+ - Swift ref: swift-6.4.0-RELEASE (b8189d766d86ad7fc8106787d6ce9e402f38dd72)
33
+ - LLVM ref: swift-6.4.0-RELEASE (903b9faaae5c43ecc9b7e33f8db9c94c7429374a)
34
+ - Headers added to the manifest: none
35
+ - Manifest files missing upstream: lib/Demangling/Errors.cpp — renamed upstream
36
+ to lib/Demangling/DemanglingErrorHandling.cpp (byte-identical modulo the
37
+ header comment); vendored under the new name, dropped the old one, and
38
+ updated build.rs/scripts accordingly
39
+ - Diffstat: 10 files changed, 137 insertions(+), 26 deletions(-)
40
+ - Mangling changes: Read2Accessor/Modify2Accessor renamed to
41
+ YieldingBorrowAccessor/YieldingMutateAccessor (printed `yielding_borrow`/
42
+ `yielding_mutate`, SE-0474); new BuiltinBorrow node (`BW`, SE-0507);
43
+ new ImplNonisolatedNonsendingIsolation impl-function-type flag (`N`,
44
+ printed `@caller_isolated`); new EscapingClosureProp function-signature
45
+ specialization parameter (`E`); inverse requirements on associated types
46
+ (`j`/`J`)
47
+ - New files:
48
+ vendor/swift/lib/Demangling/DemanglingErrorHandling.cpp
49
+ - Validation: cargo test --all-features PASS; pytest PASS (run after the
50
+ sync — the script skipped it because the venv lacked maturin at the time);
51
+ ASan/UBSan corpus PASS (including the new tests/corpus/swift/6.4.0 corpus);
52
+ added per-toolchain corpus tests/corpus/swift/6.4.0 (Apple Swift 6.4.0,
53
+ arm64-apple-macosx, with -enable-experimental-feature CoroutineAccessors
54
+ for the fixture's SE-0474 accessors)
55
+
56
+ <!-- sync-metadata
57
+ swift-ref: swift-6.4.0-RELEASE
58
+ swift-commit: b8189d766d86ad7fc8106787d6ce9e402f38dd72
59
+ llvm-ref: swift-6.4.0-RELEASE
60
+ llvm-commit: 903b9faaae5c43ecc9b7e33f8db9c94c7429374a
61
+ date: 2026-09-15
62
+ -->
@@ -329,7 +329,7 @@ struct hash_state {
329
329
  /// This variable can be set using the \see llvm::set_fixed_execution_seed
330
330
  /// function. See that function for details. Do not, under any circumstances,
331
331
  /// set or read this variable.
332
- extern uint64_t fixed_seed_override;
332
+ LLVM_ABI extern uint64_t fixed_seed_override;
333
333
 
334
334
  inline uint64_t get_execution_seed() {
335
335
  // FIXME: This needs to be a per-execution seed. This is just a placeholder
@@ -38,6 +38,8 @@ namespace llvm {
38
38
  LLVM_ABI bool getAsSignedInteger(StringRef Str, unsigned Radix,
39
39
  long long &Result);
40
40
 
41
+ LLVM_ABI unsigned getAutoSenseRadix(StringRef &Str);
42
+
41
43
  LLVM_ABI bool consumeUnsignedInteger(StringRef &Str, unsigned Radix,
42
44
  unsigned long long &Result);
43
45
  LLVM_ABI bool consumeSignedInteger(StringRef &Str, unsigned Radix,
@@ -153,7 +153,7 @@ ValueOwnership asValueOwnership(ParameterOwnership o);
153
153
  static inline llvm::StringRef getOwnershipSpelling(ValueOwnership ownership) {
154
154
  switch (ownership) {
155
155
  case ValueOwnership::Default:
156
- return "";
156
+ return "default";
157
157
  case ValueOwnership::InOut:
158
158
  return "inout";
159
159
  case ValueOwnership::Shared:
@@ -118,6 +118,7 @@ enum class FunctionSigSpecializationParamKind : unsigned {
118
118
  ConstantPropKeyPath = 9,
119
119
  ConstantPropStruct = 10,
120
120
  ClosurePropPreviousArg = 11,
121
+ EscapingClosureProp = 12,
121
122
 
122
123
  // Option Set Flags use bits 6-31. This gives us 26 bits to use for option
123
124
  // flags.
@@ -47,6 +47,7 @@ NODE(BoundGenericFunction)
47
47
  NODE(BuiltinTypeName)
48
48
  NODE(BuiltinTupleType)
49
49
  NODE(BuiltinFixedArray)
50
+ NODE(BuiltinBorrow)
50
51
  NODE(CFunctionPointer)
51
52
  NODE(ClangType)
52
53
  CONTEXT_NODE(Class)
@@ -134,6 +135,7 @@ CONTEXT_NODE(IVarDestroyer)
134
135
  NODE(ImplEscaping)
135
136
  NODE(ImplConvention)
136
137
  NODE(ImplDifferentiabilityKind)
138
+ NODE(ImplNonisolatedNonsendingIsolation)
137
139
  NODE(ImplErasedIsolation)
138
140
  NODE(ImplSendingResult)
139
141
  NODE(ImplParameterResultDifferentiability)
@@ -186,7 +188,7 @@ NODE(ObjCMetadataUpdateFunction)
186
188
  NODE(ObjCResilientClassStub)
187
189
  NODE(FullObjCResilientClassStub)
188
190
  CONTEXT_NODE(ModifyAccessor)
189
- CONTEXT_NODE(Modify2Accessor)
191
+ CONTEXT_NODE(YieldingMutateAccessor)
190
192
  CONTEXT_NODE(Module)
191
193
  CONTEXT_NODE(NativeOwningAddressor)
192
194
  CONTEXT_NODE(NativeOwningMutableAddressor)
@@ -240,7 +242,7 @@ NODE(ReabstractionThunkHelper)
240
242
  NODE(ReabstractionThunkHelperWithSelf)
241
243
  NODE(ReabstractionThunkHelperWithGlobalActor)
242
244
  CONTEXT_NODE(ReadAccessor)
243
- CONTEXT_NODE(Read2Accessor)
245
+ CONTEXT_NODE(YieldingBorrowAccessor)
244
246
  NODE(RelatedEntityDeclName)
245
247
  NODE(RetroactiveConformance)
246
248
  NODE(ReturnType)
@@ -496,6 +496,7 @@ protected:
496
496
  Vector<NodePointer> NodeStack;
497
497
  Vector<NodePointer> Substitutions;
498
498
  int NumWords;
499
+ StringRef Words[MaxNumWords];
499
500
  StringRef Text;
500
501
  size_t Pos;
501
502
  std::function<SymbolicReferenceResolver_t> SymbolicReferenceResolver;
@@ -592,6 +593,7 @@ protected:
592
593
 
593
594
  NodePointer popAssocTypeName();
594
595
  NodePointer popAssocTypePath();
596
+ NodePointer popAssociatedConformanceWitnessAccessorSubject();
595
597
  NodePointer getDependentGenericParamType(int depth, int index);
596
598
  NodePointer demangleGenericParamIndex();
597
599
  NodePointer popProtocolConformance();
@@ -37,6 +37,8 @@ constexpr static const StringLiteral SWIFT_STRING_PROCESSING_NAME = "_StringProc
37
37
  constexpr static const StringLiteral SWIFT_SHIMS_NAME = "SwiftShims";
38
38
  /// The name of the CxxShim module, which contains a cxx casting utility.
39
39
  constexpr static const StringLiteral CXX_SHIM_NAME = "CxxShim";
40
+ /// The name of the CxxStdlibShim module, which contains utilities for the C++ stdlib overlay.
41
+ constexpr static const StringLiteral CXX_STDLIB_SHIM_NAME = "CxxStdlibShim";
40
42
  /// The name of the Cxx module, which contains C++ interop helper protocols.
41
43
  constexpr static const StringLiteral CXX_MODULE_NAME = "Cxx";
42
44
  /// The name of the Builtin module, which contains Builtin functions.
@@ -178,6 +180,8 @@ constexpr static BuiltinNameStringLiteral BUILTIN_TYPE_NAME_VEC = {
178
180
  "Builtin.Vec"};
179
181
  constexpr static BuiltinNameStringLiteral BUILTIN_TYPE_NAME_FIXEDARRAY = {
180
182
  "Builtin.FixedArray"};
183
+ constexpr static BuiltinNameStringLiteral BUILTIN_TYPE_NAME_BORROW = {
184
+ "Builtin.Borrow"};
181
185
  /// The name of the Builtin type for SILToken
182
186
  constexpr static BuiltinNameStringLiteral BUILTIN_TYPE_NAME_SILTOKEN = {
183
187
  "Builtin.SILToken"};
@@ -14,7 +14,6 @@
14
14
  //
15
15
  //===----------------------------------------------------------------------===//
16
16
 
17
- #include "llvm/Support/Compiler.h"
18
17
  #include "swift/Demangling/Demangler.h"
19
18
  #include "DemanglerAssert.h"
20
19
  #include "swift/Demangling/ManglingMacros.h"
@@ -301,6 +300,20 @@ static bool isProtocolNode(Demangle::NodePointer Node) {
301
300
  assert(0 && "unknown node kind");
302
301
  }
303
302
 
303
+ static bool isGenericParamType(Demangle::NodePointer Node) {
304
+ if (!Node)
305
+ return false;
306
+ switch (Node->getKind()) {
307
+ case Demangle::Node::Kind::Type:
308
+ return isGenericParamType(Node->getChild(0));
309
+ case Demangle::Node::Kind::DependentGenericParamType:
310
+ return true;
311
+ default:
312
+ return false;
313
+ }
314
+ assert(0 && "unknown node kind");
315
+ }
316
+
304
317
  bool swift::Demangle::isProtocol(llvm::StringRef mangledName) {
305
318
  Demangle::Demangler Dem;
306
319
  return isProtocolNode(Dem.demangleType(dropSwiftManglingPrefix(mangledName)));
@@ -722,6 +735,7 @@ Demangler::DemangleInitRAII::DemangleInitRAII(Demangler &Dem,
722
735
  NumWords(Dem.NumWords), Text(Dem.Text), Pos(Dem.Pos),
723
736
  SymbolicReferenceResolver(std::move(Dem.SymbolicReferenceResolver))
724
737
  {
738
+ std::copy(Dem.Words, Dem.Words + MaxNumWords, Words);
725
739
  // Reset the demangler state for a nested job.
726
740
  Dem.NodeStack.init(Dem, 16);
727
741
  Dem.Substitutions.init(Dem, 16);
@@ -736,6 +750,7 @@ Demangler::DemangleInitRAII::~DemangleInitRAII() {
736
750
  Dem.NodeStack = NodeStack;
737
751
  Dem.Substitutions = Substitutions;
738
752
  Dem.NumWords = NumWords;
753
+ std::copy(Words, Words + MaxNumWords, Dem.Words);
739
754
  Dem.Text = Text;
740
755
  Dem.Pos = Pos;
741
756
  Dem.SymbolicReferenceResolver = std::move(SymbolicReferenceResolver);
@@ -1510,6 +1525,14 @@ NodePointer Demangler::demangleBuiltinType() {
1510
1525
  Ty->addChild(element, *this);
1511
1526
  break;
1512
1527
  }
1528
+ case 'W': {
1529
+ NodePointer referent = popNode(Node::Kind::Type);
1530
+ if (!referent)
1531
+ return nullptr;
1532
+ Ty = createNode(Node::Kind::BuiltinBorrow);
1533
+ Ty->addChild(referent, *this);
1534
+ break;
1535
+ }
1513
1536
  case 'O':
1514
1537
  Ty = createNode(Node::Kind::BuiltinTypeName,
1515
1538
  BUILTIN_TYPE_NAME_UNKNOWNOBJECT);
@@ -2402,6 +2425,10 @@ NodePointer Demangler::demangleImplFunctionType() {
2402
2425
  if (nextIf('A'))
2403
2426
  type->addChild(createNode(Node::Kind::ImplErasedIsolation), *this);
2404
2427
 
2428
+ if (nextIf('N'))
2429
+ type->addChild(createNode(Node::Kind::ImplNonisolatedNonsendingIsolation),
2430
+ *this);
2431
+
2405
2432
  switch ((MangledDifferentiabilityKind)peekChar()) {
2406
2433
  case MangledDifferentiabilityKind::Normal: // 'd'
2407
2434
  case MangledDifferentiabilityKind::Linear: // 'l'
@@ -2905,6 +2932,16 @@ NodePointer Demangler::popProtocolConformance() {
2905
2932
  return Conf;
2906
2933
  }
2907
2934
 
2935
+ NodePointer Demangler::popAssociatedConformanceWitnessAccessorSubject() {
2936
+ if (auto type = popNode(Node::Kind::Type)) {
2937
+ if (isGenericParamType(type))
2938
+ return type;
2939
+
2940
+ pushNode(type);
2941
+ }
2942
+ return popAssocTypePath();
2943
+ }
2944
+
2908
2945
  NodePointer Demangler::demangleThunkOrSpecialization() {
2909
2946
  switch (char c = nextChar()) {
2910
2947
  // Thunks that are from a thunk inst. We take the TT namespace.
@@ -3080,19 +3117,19 @@ NodePointer Demangler::demangleThunkOrSpecialization() {
3080
3117
 
3081
3118
  case 'n': {
3082
3119
  NodePointer requirementTy = popProtocol();
3083
- NodePointer conformingType = popAssocTypePath();
3120
+ NodePointer subject = popAssociatedConformanceWitnessAccessorSubject();
3084
3121
  NodePointer protoTy = popNode(Node::Kind::Type);
3085
3122
  return createWithChildren(Node::Kind::AssociatedConformanceDescriptor,
3086
- protoTy, conformingType, requirementTy);
3123
+ protoTy, subject, requirementTy);
3087
3124
  }
3088
3125
 
3089
3126
  case 'N': {
3090
3127
  NodePointer requirementTy = popProtocol();
3091
- auto assocTypePath = popAssocTypePath();
3128
+ NodePointer subject = popAssociatedConformanceWitnessAccessorSubject();
3092
3129
  NodePointer protoTy = popNode(Node::Kind::Type);
3093
3130
  return createWithChildren(
3094
3131
  Node::Kind::DefaultAssociatedConformanceAccessor,
3095
- protoTy, assocTypePath, requirementTy);
3132
+ protoTy, subject, requirementTy);
3096
3133
  }
3097
3134
 
3098
3135
  case 'b': {
@@ -3403,7 +3440,8 @@ NodePointer Demangler::demangleFunctionSpecialization() {
3403
3440
 
3404
3441
  auto ParamKind = (FunctionSigSpecializationParamKind)KindNd->getIndex();
3405
3442
  switch (ParamKind) {
3406
- case FunctionSigSpecializationParamKind::ClosureProp: {
3443
+ case FunctionSigSpecializationParamKind::ClosureProp:
3444
+ case FunctionSigSpecializationParamKind::EscapingClosureProp: {
3407
3445
  while (NodePointer Ty = popNode(Node::Kind::Type)) {
3408
3446
  paramToAdd = addChild(paramToAdd, Ty);
3409
3447
  }
@@ -3445,6 +3483,12 @@ NodePointer Demangler::demangleFuncSpecParam(Node::Kind Kind) {
3445
3483
  return addChild(Param, createNode(
3446
3484
  Node::Kind::FunctionSignatureSpecializationParamKind,
3447
3485
  uint64_t(FunctionSigSpecializationParamKind::ClosureProp)));
3486
+ case 'E':
3487
+ // Like 'c', but for escaping closures. Consumes an identifier and
3488
+ // multiple type parameters. The parameters will be added later.
3489
+ return addChild(Param, createNode(
3490
+ Node::Kind::FunctionSignatureSpecializationParamKind,
3491
+ uint64_t(FunctionSigSpecializationParamKind::EscapingClosureProp)));
3448
3492
  case 'C': {
3449
3493
  // Consumes an identifier and multiple type parameters.
3450
3494
  // The parameters will be added later.
@@ -4123,9 +4167,9 @@ NodePointer Demangler::demangleAccessor(NodePointer ChildNode) {
4123
4167
  case 'w': Kind = Node::Kind::WillSet; break;
4124
4168
  case 'W': Kind = Node::Kind::DidSet; break;
4125
4169
  case 'r': Kind = Node::Kind::ReadAccessor; break;
4126
- case 'y': Kind = Node::Kind::Read2Accessor; break;
4170
+ case 'y': Kind = Node::Kind::YieldingBorrowAccessor; break;
4127
4171
  case 'M': Kind = Node::Kind::ModifyAccessor; break;
4128
- case 'x': Kind = Node::Kind::Modify2Accessor; break;
4172
+ case 'x': Kind = Node::Kind::YieldingMutateAccessor; break;
4129
4173
  case 'i': Kind = Node::Kind::InitAccessor; break;
4130
4174
  case 'b':
4131
4175
  Kind = Node::Kind::BorrowAccessor;
@@ -4397,6 +4441,20 @@ NodePointer Demangler::demangleGenericRequirement() {
4397
4441
  if (!inverseKind)
4398
4442
  return nullptr;
4399
4443
  break;
4444
+ case 'j':
4445
+ ConstraintKind = Inverse;
4446
+ TypeKind = Assoc;
4447
+ inverseKind = demangleIndexAsNode();
4448
+ if (!inverseKind)
4449
+ return nullptr;
4450
+ break;
4451
+ case 'J':
4452
+ ConstraintKind = Inverse;
4453
+ TypeKind = CompoundAssoc;
4454
+ inverseKind = demangleIndexAsNode();
4455
+ if (!inverseKind)
4456
+ return nullptr;
4457
+ break;
4400
4458
  default: ConstraintKind = Protocol; TypeKind = Generic; pushBack(); break;
4401
4459
  }
4402
4460
 
@@ -1,4 +1,4 @@
1
- //===--- Errors.cpp - Demangling library error handling ---------*- C++ -*-===//
1
+ //===-- DemanglingErrorHandling.cpp - Demangling library error handling ---===//
2
2
  //
3
3
  // This source file is part of the Swift.org open source project
4
4
  //