diff --git a/include/swift/APIDigester/ModuleAnalyzerNodes.h b/include/swift/APIDigester/ModuleAnalyzerNodes.h index a6b29b7e65901..3dec92837f356 100644 --- a/include/swift/APIDigester/ModuleAnalyzerNodes.h +++ b/include/swift/APIDigester/ModuleAnalyzerNodes.h @@ -360,13 +360,12 @@ class SDKNodeDecl: public SDKNode { Optional FixedBinaryOrder; PlatformIntroVersion introVersions; StringRef ObjCName; - mutable Optional demangledName; + protected: SDKNodeDecl(SDKNodeInitInfo Info, SDKNodeKind Kind); virtual ~SDKNodeDecl() = default; public: StringRef getUsr() const { return Usr; } - StringRef getDemangledName() const; StringRef getLocation() const { return Location; } StringRef getModuleName() const {return ModuleName;} StringRef getHeaderName() const; diff --git a/include/swift/AST/USRGeneration.h b/include/swift/AST/USRGeneration.h index c2962957922ab..5f799a06abd02 100644 --- a/include/swift/AST/USRGeneration.h +++ b/include/swift/AST/USRGeneration.h @@ -63,11 +63,8 @@ bool printExtensionUSR(const ExtensionDecl *ED, raw_ostream &OS); /// \returns true if it failed, false on success. bool printDeclUSR(const Decl *D, raw_ostream &OS); -/// Get mangled name from a USR. -std::string getMangledNameFromUSR(StringRef usr); - -/// Demangle a mangled name to a human readable name. -std::string demangleMangledName(StringRef mangled); +/// Demangle a mangle-name-based USR to a human readable name. +std::string demangleUSR(StringRef mangled); } // namespace ide } // namespace swift diff --git a/lib/APIDigester/ModuleAnalyzerNodes.cpp b/lib/APIDigester/ModuleAnalyzerNodes.cpp index 9cf4fc435b9f0..b74dbc0d34b53 100644 --- a/lib/APIDigester/ModuleAnalyzerNodes.cpp +++ b/lib/APIDigester/ModuleAnalyzerNodes.cpp @@ -817,19 +817,6 @@ static bool hasSameParameterFlags(const SDKNodeType *Left, const SDKNodeType *Ri return true; } -StringRef SDKNodeDecl::getDemangledName() const { - if (demangledName.hasValue()) { - return *demangledName; - } - std::string mangled = MangledName.str(); - if (mangled.empty()) { - mangled = getMangledNameFromUSR(Usr); - } - demangledName = Ctx.buffer(demangleMangledName(mangled)); - assert(demangledName.hasValue()); - return *demangledName; -} - static bool isSDKNodeEqual(SDKContext &Ctx, const SDKNode &L, const SDKNode &R) { auto *LeftAlias = dyn_cast(&L); auto *RightAlias = dyn_cast(&R); @@ -961,7 +948,7 @@ static bool isSDKNodeEqual(SDKContext &Ctx, const SDKNode &L, const SDKNode &R) if (Left->getFixedBinaryOrder() != Right->getFixedBinaryOrder()) return false; } - if (Left->getDemangledName() != Right->getDemangledName()) + if (Left->getUsr() != Right->getUsr()) return false; LLVM_FALLTHROUGH; } @@ -2595,10 +2582,9 @@ void swift::ide::api::SDKNodeDecl::diagnose(SDKNode *Right) { emitDiag(Loc, diag::decl_reorder, getFixedBinaryOrder(), RD->getFixedBinaryOrder()); } - { - // diagnose mangled name change. - auto left = getDemangledName(); - auto right = RD->getDemangledName(); + if (getUsr() != RD->getUsr()) { + auto left = demangleUSR(getUsr()); + auto right = demangleUSR(RD->getUsr()); if (left != right) { emitDiag(Loc, diag::demangled_name_changed, left, right); } diff --git a/lib/AST/USRGeneration.cpp b/lib/AST/USRGeneration.cpp index 8393532c9d53c..5a02175895e8f 100644 --- a/lib/AST/USRGeneration.cpp +++ b/lib/AST/USRGeneration.cpp @@ -256,23 +256,16 @@ swift::USRGenerationRequest::evaluate(Evaluator &evaluator, return NewMangler.mangleDeclAsUSR(D, getUSRSpacePrefix()); } -std::string ide::getMangledNameFromUSR(StringRef usr) { - if (usr.startswith(getUSRSpacePrefix())) { - usr = usr.substr(getUSRSpacePrefix().size()); +std::string ide::demangleUSR(StringRef mangled) { + if (mangled.startswith(getUSRSpacePrefix())) { + mangled = mangled.substr(getUSRSpacePrefix().size()); } SmallString<128> buffer; buffer += "$s"; - buffer += usr; - return buffer.str().str(); -} - -std::string ide::demangleMangledName(StringRef mangled) { + buffer += mangled; + mangled = buffer.str(); Demangler Dem; - std::string result = nodeToString(Dem.demangleSymbol(mangled)); - if (result.empty()) { - return mangled.str(); - } - return result; + return nodeToString(Dem.demangleSymbol(mangled)); } std::string diff --git a/test/api-digester/Inputs/cake_baseline/cake.swift b/test/api-digester/Inputs/cake_baseline/cake.swift index 5366204e3d18b..63604ca8c1553 100644 --- a/test/api-digester/Inputs/cake_baseline/cake.swift +++ b/test/api-digester/Inputs/cake_baseline/cake.swift @@ -232,6 +232,3 @@ open class AddingNewDesignatedInit { print(foo) } } - -@_silgen_name("sil_name_before") -public func silGenNameGiven() {} diff --git a/test/api-digester/Inputs/cake_current/cake.swift b/test/api-digester/Inputs/cake_current/cake.swift index 0b9e1549df015..f6c3d365a404b 100644 --- a/test/api-digester/Inputs/cake_current/cake.swift +++ b/test/api-digester/Inputs/cake_current/cake.swift @@ -252,6 +252,3 @@ public extension Float { } infix operator <==> : AssignmentPrecedence - -@_silgen_name("sil_name_after") -public func silGenNameGiven() {} diff --git a/test/api-digester/Outputs/Cake-abi.txt b/test/api-digester/Outputs/Cake-abi.txt index e04b88c60efb4..7010f162d7149 100644 --- a/test/api-digester/Outputs/Cake-abi.txt +++ b/test/api-digester/Outputs/Cake-abi.txt @@ -10,7 +10,6 @@ cake: Func S1.foo5(x:y:) has mangled name changing from 'cake.S1.foo5(x: Swift.I cake: Func Somestruct2.foo1(_:) has mangled name changing from 'static cake.Somestruct2.foo1(cake.C3) -> ()' to 'static cake.NSSomestruct2.foo1(cake.C1) -> ()' cake: Func ownershipChange(_:_:) has mangled name changing from 'cake.ownershipChange(inout Swift.Int, __shared Swift.Int) -> ()' to 'cake.ownershipChange(Swift.Int, __owned Swift.Int) -> ()' cake: Func returnFunctionTypeOwnershipChange() has mangled name changing from 'cake.returnFunctionTypeOwnershipChange() -> (cake.C1) -> ()' to 'cake.returnFunctionTypeOwnershipChange() -> (__owned cake.C1) -> ()' -cake: Func silGenNameGiven() has mangled name changing from 'sil_name_before' to 'sil_name_after' cake: Protocol P3 has generic signature change from to cake: Struct Somestruct2 has mangled name changing from 'cake.Somestruct2' to 'cake.NSSomestruct2'