mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Demangler: support the final mangling prefix _$s
rdar://problem/37681432
This commit is contained in:
@@ -140,7 +140,10 @@ swift::Demangle::makeSymbolicMangledNameStringRef(const char *base) {
|
|||||||
int swift::Demangle::getManglingPrefixLength(llvm::StringRef mangledName) {
|
int swift::Demangle::getManglingPrefixLength(llvm::StringRef mangledName) {
|
||||||
if (mangledName.empty()) return 0;
|
if (mangledName.empty()) return 0;
|
||||||
|
|
||||||
llvm::StringRef prefixes[] = {/*Swift 4*/ "_T0", /*Swift > 4*/ "$S", "_$S"};
|
llvm::StringRef prefixes[] = {
|
||||||
|
/*Swift 4*/ "_T0",
|
||||||
|
/*Swift 4.x*/ "$S", "_$S",
|
||||||
|
/*Swift 5+*/ "$s", "_$s"};
|
||||||
|
|
||||||
// Look for any of the known prefixes
|
// Look for any of the known prefixes
|
||||||
for (auto prefix : prefixes) {
|
for (auto prefix : prefixes) {
|
||||||
|
|||||||
@@ -82,12 +82,12 @@ _TToFC3foo3bar3basfT3zimCS_3zim_T_ ---> {T:_TFC3foo3bar3basfT3zimCS_3zim_T_,C} @
|
|||||||
_TTOFSC3fooFTSdSd_Sd ---> {T:_TFSC3fooFTSdSd_Sd} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
_TTOFSC3fooFTSdSd_Sd ---> {T:_TFSC3fooFTSdSd_Sd} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
||||||
_T03foo3barC3basyAA3zimCAE_tFTo ---> {T:_T03foo3barC3basyAA3zimCAE_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
_T03foo3barC3basyAA3zimCAE_tFTo ---> {T:_T03foo3barC3basyAA3zimCAE_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
||||||
_T0SC3fooS2d_SdtFTO ---> {T:_T0SC3fooS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
_T0SC3fooS2d_SdtFTO ---> {T:_T0SC3fooS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
||||||
__$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
_$s3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$s3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
||||||
__$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
_$sSC3fooyS2d_SdtFTO ---> {T:_$sSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
||||||
|
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
||||||
|
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
||||||
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
||||||
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
||||||
$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
|
|
||||||
$SSC3fooyS2d_SdtFTO ---> {T:$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
|
|
||||||
_TTDFC3foo3bar3basfT3zimCS_3zim_T_ ---> dynamic foo.bar.bas(zim: foo.zim) -> ()
|
_TTDFC3foo3bar3basfT3zimCS_3zim_T_ ---> dynamic foo.bar.bas(zim: foo.zim) -> ()
|
||||||
_TFC3foo3bar3basfT3zimCS_3zim_T_ ---> foo.bar.bas(zim: foo.zim) -> ()
|
_TFC3foo3bar3basfT3zimCS_3zim_T_ ---> foo.bar.bas(zim: foo.zim) -> ()
|
||||||
_TF3foooi1pFTCS_3barVS_3bas_OS_3zim ---> foo.+ infix(foo.bar, foo.bas) -> foo.zim
|
_TF3foooi1pFTCS_3barVS_3bas_OS_3zim ---> foo.+ infix(foo.bar, foo.bas) -> foo.zim
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ static int demangleSTDIN(const swift::Demangle::DemangleOptions &options) {
|
|||||||
// This doesn't handle Unicode symbols, but maybe that's okay.
|
// This doesn't handle Unicode symbols, but maybe that's okay.
|
||||||
// Also accept the future mangling prefix.
|
// Also accept the future mangling prefix.
|
||||||
// TODO: remove the "_S" as soon as MANGLING_PREFIX_STR gets "_S".
|
// TODO: remove the "_S" as soon as MANGLING_PREFIX_STR gets "_S".
|
||||||
llvm::Regex maybeSymbol("(_T|_*\\$S|" MANGLING_PREFIX_STR ")[_a-zA-Z0-9$.]+");
|
llvm::Regex maybeSymbol("(_T|_?\\$[Ss])[_a-zA-Z0-9$.]+");
|
||||||
|
|
||||||
swift::Demangle::Context DCtx;
|
swift::Demangle::Context DCtx;
|
||||||
for (std::string mangled; std::getline(std::cin, mangled);) {
|
for (std::string mangled; std::getline(std::cin, mangled);) {
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ TEST(FunctionNameDemangleTests, NewManglingPrefix) {
|
|||||||
char OutputBuffer[128];
|
char OutputBuffer[128];
|
||||||
|
|
||||||
const char *FunctionName = "$S1a10run_MatMulyySiF";
|
const char *FunctionName = "$S1a10run_MatMulyySiF";
|
||||||
|
const char *FunctionNameNew = "$s1a10run_MatMulyySiF";
|
||||||
const char *DemangledName = "a.run_MatMul(Swift.Int) -> ()";
|
const char *DemangledName = "a.run_MatMul(Swift.Int) -> ()";
|
||||||
const char *SimplifiedName = "run_MatMul(_:)";
|
const char *SimplifiedName = "run_MatMul(_:)";
|
||||||
|
|
||||||
@@ -51,6 +52,12 @@ TEST(FunctionNameDemangleTests, NewManglingPrefix) {
|
|||||||
EXPECT_STREQ(DemangledName, OutputBuffer);
|
EXPECT_STREQ(DemangledName, OutputBuffer);
|
||||||
EXPECT_EQ(Result, strlen(DemangledName));
|
EXPECT_EQ(Result, strlen(DemangledName));
|
||||||
|
|
||||||
|
Result = swift_demangle_getDemangledName(FunctionNameNew, OutputBuffer,
|
||||||
|
sizeof(OutputBuffer));
|
||||||
|
|
||||||
|
EXPECT_STREQ(DemangledName, OutputBuffer);
|
||||||
|
EXPECT_EQ(Result, strlen(DemangledName));
|
||||||
|
|
||||||
Result = swift_demangle_getSimplifiedDemangledName(FunctionName, OutputBuffer,
|
Result = swift_demangle_getSimplifiedDemangledName(FunctionName, OutputBuffer,
|
||||||
sizeof(OutputBuffer));
|
sizeof(OutputBuffer));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user