Skip to content

Commit aeac681

Browse files
committed
[SourceKit] Make the SourceKit plugin infrastructure buildable on Linux and Windows
1 parent 40b91aa commit aeac681

File tree

5 files changed

+290
-39
lines changed

5 files changed

+290
-39
lines changed

lib/Basic/LoadDynamicLibrary.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define NOMINMAX
1818
#include "llvm/Support/ConvertUTF.h"
1919
#include "llvm/Support/Windows/WindowsSupport.h"
20+
#include "swift/Basic/LLVM.h"
2021
#include <windows.h>
2122
#else
2223
#include <dlfcn.h>

tools/SourceKit/tools/sourcekitd/include/sourcekitd/Internal.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ using SourceKit::SourceKitCancellationToken;
4848
static const unsigned ProtocolMajorVersion = 1;
4949
static const unsigned ProtocolMinorVersion = 0;
5050

51-
enum class CustomBufferKind {
51+
enum class CustomBufferKind : size_t {
5252
TokenAnnotationsArray,
5353
DeclarationsArray,
5454
DocSupportAnnotationArray,
@@ -259,6 +259,8 @@ struct PluginInitParams {
259259

260260
void loadPlugins(llvm::ArrayRef<std::string> registeredPlugins,
261261
PluginInitParams &pluginParams);
262+
263+
VariantFunctions *getPluginVariantFunctions(size_t BufKind);
262264
}
263265

264266
#endif

tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ void YAMLRequestParser::initError(StringRef Desc, llvm::yaml::Node *Node,
896896
sourcekitd_variant_functions_t sourcekitd_variant_functions_create() {
897897
auto *vfuncs = new VariantFunctions();
898898
// Zero-initialize.
899-
bzero(vfuncs, sizeof(VariantFunctions));
899+
memset(vfuncs, 0, sizeof(VariantFunctions));
900900
return vfuncs;
901901
}
902902

@@ -1133,3 +1133,30 @@ PluginInitParams::PluginInitParams(
11331133
};
11341134
this->opaqueIDEInspectionInstance = opaqueIDEInspectionInstance;
11351135
}
1136+
1137+
// MARK: Plugin variant functions
1138+
1139+
// Note: only modified during plugin loading.
1140+
static std::vector<VariantFunctions *> PluginVariantFunctions;
1141+
1142+
VariantFunctions *sourcekitd::getPluginVariantFunctions(size_t BufKind) {
1143+
size_t index = BufKind - (size_t)CustomBufferKind::CustomBufferKind_End;
1144+
if (index >= PluginVariantFunctions.size() ||
1145+
PluginVariantFunctions[index] == nullptr) {
1146+
llvm::report_fatal_error(
1147+
"unknown custom buffer kind; possible plugin loading failure");
1148+
}
1149+
return PluginVariantFunctions[index];
1150+
}
1151+
1152+
void sourcekitd::pluginRegisterCustomBufferKind(
1153+
uint64_t kind, sourcekitd_variant_functions_t funcs) {
1154+
auto index = kind - (uint64_t)CustomBufferKind::CustomBufferKind_End;
1155+
if (index < PluginVariantFunctions.size()) {
1156+
assert(PluginVariantFunctions[index] == nullptr &&
1157+
"overwriting existing buffer");
1158+
} else {
1159+
PluginVariantFunctions.resize(index + 1);
1160+
}
1161+
PluginVariantFunctions[index] = static_cast<VariantFunctions *>(funcs);
1162+
}

0 commit comments

Comments
 (0)