|
30 | 30 | #include "SourceKit/Support/UIdent.h"
|
31 | 31 | #include "SourceKit/SwiftLang/Factory.h"
|
32 | 32 |
|
33 |
| -#include "swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h" |
34 |
| -#include "swift/Basic/LLVMInitialize.h" |
35 | 33 | #include "swift/Basic/InitializeSwiftModules.h"
|
36 |
| -#include "swift/Basic/Mangler.h" |
| 34 | +#include "swift/Basic/LLVMInitialize.h" |
37 | 35 | #include "swift/Basic/Statistic.h"
|
38 | 36 | #include "swift/Basic/Version.h"
|
39 |
| -#include "swift/Demangling/Demangler.h" |
40 |
| -#include "swift/Demangling/ManglingMacros.h" |
41 | 37 |
|
42 | 38 | #include "llvm/ADT/ArrayRef.h"
|
43 | 39 | #include "llvm/ADT/IntrusiveRefCntPtr.h"
|
| 40 | +#include "llvm/ADT/STLExtras.h" |
44 | 41 | #include "llvm/ADT/SmallString.h"
|
45 | 42 | #include "llvm/ADT/StringRef.h"
|
46 |
| -#include "llvm/ADT/STLExtras.h" |
47 |
| -#include "llvm/Support/BinaryByteStream.h" |
48 | 43 | #include "llvm/Support/MemoryBuffer.h"
|
49 |
| -#include "llvm/Support/NativeFormatting.h" |
50 | 44 | #include "llvm/Support/Path.h"
|
51 | 45 | #include "llvm/Support/PrettyStackTrace.h"
|
52 | 46 | #include "llvm/Support/VirtualFileSystem.h"
|
@@ -187,12 +181,6 @@ static SourceKit::Context &getGlobalContext() {
|
187 | 181 | return *GlobalCtx;
|
188 | 182 | }
|
189 | 183 |
|
190 |
| -static sourcekitd_response_t demangleNames(ArrayRef<const char *> MangledNames, |
191 |
| - bool Simplified); |
192 |
| -
|
193 |
| -static sourcekitd_response_t |
194 |
| -mangleSimpleClassNames(ArrayRef<std::pair<StringRef, StringRef>> ModuleClassPairs); |
195 |
| -
|
196 | 184 | static sourcekitd_response_t indexSource(StringRef Filename,
|
197 | 185 | ArrayRef<const char *> Args);
|
198 | 186 |
|
@@ -620,7 +608,21 @@ static void handleRequestDemangle(const RequestDict &Req,
|
620 | 608 | }
|
621 | 609 | int64_t Simplified = false;
|
622 | 610 | Req.getInt64(KeySimplified, Simplified, /*isOptional=*/true);
|
623 |
| - return Rec(demangleNames(MangledNames, Simplified)); |
| 611 | +
|
| 612 | + LangSupport &Lang = getGlobalContext().getSwiftLangSupport(); |
| 613 | + Lang.demangleNames(MangledNames, Simplified, [Rec](auto result) { |
| 614 | + if (result.isError()) |
| 615 | + return Rec(createErrorRequestFailed(result.getError())); |
| 616 | + if (result.isCancelled()) |
| 617 | + return Rec(createErrorRequestFailed(result.getError())); |
| 618 | + ResponseBuilder RespBuilder; |
| 619 | + auto Arr = RespBuilder.getDictionary().setArray(KeyResults); |
| 620 | + for (auto demangldedName : result.value()) { |
| 621 | + auto Entry = Arr.appendDictionary(); |
| 622 | + Entry.set(KeyName, demangldedName.c_str()); |
| 623 | + } |
| 624 | + Rec(RespBuilder.createResponse()); |
| 625 | + }); |
624 | 626 | }
|
625 | 627 | }
|
626 | 628 |
|
@@ -652,7 +654,20 @@ handleRequestMangleSimpleClass(const RequestDict &Req,
|
652 | 654 | return Rec(err);
|
653 | 655 | }
|
654 | 656 |
|
655 |
| - return Rec(mangleSimpleClassNames(ModuleClassPairs)); |
| 657 | + LangSupport &Lang = getGlobalContext().getSwiftLangSupport(); |
| 658 | + Lang.mangleSimpleClassNames(ModuleClassPairs, [Rec](auto result) { |
| 659 | + if (result.isError()) |
| 660 | + return Rec(createErrorRequestFailed(result.getError())); |
| 661 | + if (result.isCancelled()) |
| 662 | + return Rec(createErrorRequestFailed(result.getError())); |
| 663 | + ResponseBuilder RespBuilder; |
| 664 | + auto Arr = RespBuilder.getDictionary().setArray(KeyResults); |
| 665 | + for (auto &mangledName : result.value()) { |
| 666 | + auto Entry = Arr.appendDictionary(); |
| 667 | + Entry.set(KeyName, mangledName.c_str()); |
| 668 | + } |
| 669 | + Rec(RespBuilder.createResponse()); |
| 670 | + }); |
656 | 671 | }
|
657 | 672 | }
|
658 | 673 |
|
@@ -2054,78 +2069,6 @@ class SKDocConsumer : public DocInfoConsumer {
|
2054 | 2069 | };
|
2055 | 2070 | } // end anonymous namespace
|
2056 | 2071 |
|
2057 |
| -static sourcekitd_response_t demangleNames(ArrayRef<const char *> MangledNames, |
2058 |
| - bool Simplified) { |
2059 |
| - swift::Demangle::DemangleOptions DemangleOptions; |
2060 |
| - if (Simplified) { |
2061 |
| - DemangleOptions = |
2062 |
| - swift::Demangle::DemangleOptions::SimplifiedUIDemangleOptions(); |
2063 |
| - } |
2064 |
| - |
2065 |
| - auto getDemangledName = [&](StringRef MangledName) -> std::string { |
2066 |
| - if (!swift::Demangle::isSwiftSymbol(MangledName)) |
2067 |
| - return std::string(); // Not a mangled name |
2068 |
| - |
2069 |
| - std::string Result = swift::Demangle::demangleSymbolAsString( |
2070 |
| - MangledName, DemangleOptions); |
2071 |
| - |
2072 |
| - if (Result == MangledName) |
2073 |
| - return std::string(); // Not a mangled name |
2074 |
| - |
2075 |
| - return Result; |
2076 |
| - }; |
2077 |
| - |
2078 |
| - ResponseBuilder RespBuilder; |
2079 |
| - auto Arr = RespBuilder.getDictionary().setArray(KeyResults); |
2080 |
| - for (auto MangledName : MangledNames) { |
2081 |
| - std::string Result = getDemangledName(MangledName); |
2082 |
| - auto Entry = Arr.appendDictionary(); |
2083 |
| - Entry.set(KeyName, Result.c_str()); |
2084 |
| - } |
2085 |
| - |
2086 |
| - return RespBuilder.createResponse(); |
2087 |
| -} |
2088 |
| - |
2089 |
| -static ManglingErrorOr<std::string> mangleSimpleClass(StringRef moduleName, |
2090 |
| - StringRef className) { |
2091 |
| - using namespace swift::Demangle; |
2092 |
| - Demangler Dem; |
2093 |
| - auto moduleNode = Dem.createNode(Node::Kind::Module, moduleName); |
2094 |
| - auto IdNode = Dem.createNode(Node::Kind::Identifier, className); |
2095 |
| - auto classNode = Dem.createNode(Node::Kind::Class); |
2096 |
| - auto typeNode = Dem.createNode(Node::Kind::Type); |
2097 |
| - auto typeManglingNode = Dem.createNode(Node::Kind::TypeMangling); |
2098 |
| - auto globalNode = Dem.createNode(Node::Kind::Global); |
2099 |
| - |
2100 |
| - classNode->addChild(moduleNode, Dem); |
2101 |
| - classNode->addChild(IdNode, Dem); |
2102 |
| - typeNode->addChild(classNode, Dem); |
2103 |
| - typeManglingNode->addChild(typeNode, Dem); |
2104 |
| - globalNode->addChild(typeManglingNode, Dem); |
2105 |
| - return mangleNode(globalNode); |
2106 |
| -} |
2107 |
| - |
2108 |
| -static sourcekitd_response_t |
2109 |
| -mangleSimpleClassNames(ArrayRef<std::pair<StringRef, StringRef>> ModuleClassPairs) { |
2110 |
| - ResponseBuilder RespBuilder; |
2111 |
| - auto Arr = RespBuilder.getDictionary().setArray(KeyResults); |
2112 |
| - for (auto &pair : ModuleClassPairs) { |
2113 |
| - auto Mangling = mangleSimpleClass(pair.first, pair.second); |
2114 |
| - if (!Mangling.isSuccess()) { |
2115 |
| - std::string message = "name mangling failed for "; |
2116 |
| - message += pair.first.str(); |
2117 |
| - message += "."; |
2118 |
| - message += pair.second.str(); |
2119 |
| - return createErrorRequestFailed(message); |
2120 |
| - } |
2121 |
| - std::string Result = Mangling.result(); |
2122 |
| - auto Entry = Arr.appendDictionary(); |
2123 |
| - Entry.set(KeyName, Result.c_str()); |
2124 |
| - } |
2125 |
| - |
2126 |
| - return RespBuilder.createResponse(); |
2127 |
| -} |
2128 |
| - |
2129 | 2072 | static sourcekitd_response_t reportDocInfo(llvm::MemoryBuffer *InputBuf,
|
2130 | 2073 | StringRef ModuleName,
|
2131 | 2074 | ArrayRef<const char *> Args) {
|
|
0 commit comments