Skip to content

Commit 391d8d1

Browse files
committed
Fix SourceKit files to work with a compiler that doesn't support blocks
1 parent 7d5ac5e commit 391d8d1

File tree

10 files changed

+100
-55
lines changed

10 files changed

+100
-55
lines changed

tools/SourceKit/tools/sourcekitd/bin/InProc/sourcekitdInProc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ std::string sourcekitd::getRuntimeLibPath() {
9595
}
9696

9797
void sourcekitd::set_interrupted_connection_handler(
98-
sourcekitd_interrupted_connection_handler_t handler) {
98+
llvm::function_ref<void()> handler) {
9999
}
100100

101101
//===----------------------------------------------------------------------===//

tools/SourceKit/tools/sourcekitd/include/sourcekitd/CompactArray.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,11 @@ struct CompactVariantFuncs {
158158
return SOURCEKITD_VARIANT_TYPE_DICTIONARY;
159159
}
160160

161-
static bool dictionary_apply(
162-
sourcekitd_variant_t dict,
163-
sourcekitd_variant_dictionary_applier_t applier) {
164-
void *Buf = (void*)dict.data[1];
161+
static bool
162+
dictionary_apply(sourcekitd_variant_t dict,
163+
llvm::function_ref<bool(sourcekitd_uid_t,
164+
sourcekitd_variant_t)> applier) {
165+
void *Buf = (void *)dict.data[1];
165166
size_t Index = dict.data[2];
166167
return T::dictionary_apply(Buf, Index, applier);
167168
}

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ namespace SourceKit {
3434
class UIdent;
3535
}
3636

37+
SOURCEKITD_PUBLIC SOURCEKITD_NONNULL_ALL bool
38+
sourcekitd_variant_dictionary_apply_impl(
39+
sourcekitd_variant_t dict,
40+
llvm::function_ref<bool(sourcekitd_uid_t, sourcekitd_variant_t)> applier);
41+
42+
SOURCEKITD_PUBLIC SOURCEKITD_NONNULL_ALL bool
43+
sourcekitd_variant_array_apply_impl(
44+
sourcekitd_variant_t array,
45+
llvm::function_ref<bool(size_t, sourcekitd_variant_t)> applier);
46+
3747
namespace sourcekitd {
3848

3949
using llvm::Optional;
@@ -138,8 +148,7 @@ class RequestDict {
138148

139149
void initialize();
140150
void shutdown();
141-
void set_interrupted_connection_handler(
142-
sourcekitd_interrupted_connection_handler_t handler);
151+
void set_interrupted_connection_handler(llvm::function_ref<void()> handler);
143152

144153
typedef std::function<void(sourcekitd_response_t)> ResponseReceiver;
145154

@@ -187,15 +196,19 @@ static inline sourcekitd_variant_t makeUIDVariant(sourcekitd_uid_t value) {
187196
/// sourcekitd_variant_t contains a pointer to such a structure.
188197
struct VariantFunctions {
189198
sourcekitd_variant_type_t (*get_type)(sourcekitd_variant_t obj);
190-
bool (*array_apply)(sourcekitd_variant_t array, sourcekitd_variant_array_applier_t applier);
199+
bool (*array_apply)(
200+
sourcekitd_variant_t array,
201+
llvm::function_ref<bool(size_t, sourcekitd_variant_t)> applier);
191202
bool (*array_get_bool)(sourcekitd_variant_t array, size_t index);
192203
size_t (*array_get_count)(sourcekitd_variant_t array);
193204
int64_t (*array_get_int64)(sourcekitd_variant_t array, size_t index);
194205
const char *(*array_get_string)(sourcekitd_variant_t array, size_t index);
195206
sourcekitd_uid_t (*array_get_uid)(sourcekitd_variant_t array, size_t index);
196207
sourcekitd_variant_t (*array_get_value)(sourcekitd_variant_t array, size_t index);
197208
bool (*bool_get_value)(sourcekitd_variant_t obj);
198-
bool (*dictionary_apply)(sourcekitd_variant_t dict, sourcekitd_variant_dictionary_applier_t applier);
209+
bool (*dictionary_apply)(
210+
sourcekitd_variant_t dict,
211+
llvm::function_ref<bool(sourcekitd_uid_t, sourcekitd_variant_t)> applier);
199212
bool (*dictionary_get_bool)(sourcekitd_variant_t dict, sourcekitd_uid_t key);
200213
int64_t (*dictionary_get_int64)(sourcekitd_variant_t dict, sourcekitd_uid_t key);
201214
const char *(*dictionary_get_string)(sourcekitd_variant_t dict, sourcekitd_uid_t key);

tools/SourceKit/tools/sourcekitd/lib/API/CodeCompletionResultsArray.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,11 @@ class CodeCompletionResultsArray {
9090
sourcekitd_uid_t,
9191
uint8_t> CompactArrayReaderTy;
9292

93-
static bool dictionary_apply(void *Buf, size_t Index,
94-
sourcekitd_variant_dictionary_applier_t applier) {
93+
94+
static bool
95+
dictionary_apply(void *Buf, size_t Index,
96+
llvm::function_ref<bool(sourcekitd_uid_t,
97+
sourcekitd_variant_t)> applier) {
9598
CompactArrayReaderTy Reader(Buf);
9699

97100
sourcekitd_uid_t Kind;

tools/SourceKit/tools/sourcekitd/lib/API/DocStructureArray.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ struct ElementReader {
392392

393393
static bool
394394
dictionary_apply(void *buffer, size_t index,
395-
sourcekitd_variant_dictionary_applier_t applier) {
395+
llvm::function_ref<bool(sourcekitd_uid_t,
396+
sourcekitd_variant_t)> applier) {
396397

397398
CompactArrayReaderTy reader(buffer);
398399
sourcekitd_uid_t kind;
@@ -411,7 +412,8 @@ struct InheritedTypeReader {
411412

412413
static bool
413414
dictionary_apply(void *buffer, size_t index,
414-
sourcekitd_variant_dictionary_applier_t applier) {
415+
llvm::function_ref<bool(sourcekitd_uid_t,
416+
sourcekitd_variant_t)> applier) {
415417

416418
CompactArrayReaderTy reader(buffer);
417419
const char *value = nullptr;
@@ -427,7 +429,8 @@ struct AttributesReader {
427429

428430
static bool
429431
dictionary_apply(void *buffer, size_t index,
430-
sourcekitd_variant_dictionary_applier_t applier) {
432+
llvm::function_ref<bool(sourcekitd_uid_t,
433+
sourcekitd_variant_t)> applier) {
431434

432435
CompactArrayReaderTy reader(buffer);
433436
sourcekitd_uid_t value;
@@ -440,7 +443,8 @@ struct AttributesReader {
440443
struct DocStructureReader {
441444
static bool
442445
dictionary_apply(void *buffer, size_t index,
443-
sourcekitd_variant_dictionary_applier_t applier) {
446+
llvm::function_ref<bool(sourcekitd_uid_t,
447+
sourcekitd_variant_t)> applier) {
444448
auto reader = DocStructureArrayReader(buffer);
445449
auto node = reader.readStructure(index);
446450

tools/SourceKit/tools/sourcekitd/lib/API/DocSupportAnnotationArray.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ class DocSupportAnnotationArray {
6666
unsigned,
6767
unsigned> CompactArrayReaderTy;
6868

69-
static bool dictionary_apply(void *Buf, size_t Index,
70-
sourcekitd_variant_dictionary_applier_t applier) {
69+
static bool
70+
dictionary_apply(void *Buf, size_t Index,
71+
llvm::function_ref<bool(sourcekitd_uid_t,
72+
sourcekitd_variant_t)> applier) {
7173
CompactArrayReaderTy Reader(Buf);
7274

7375
sourcekitd_uid_t Kind;

tools/SourceKit/tools/sourcekitd/lib/API/TokenAnnotationsArray.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ class TokenAnnotationsArray {
8585
unsigned Offset,
8686
unsigned Length,
8787
bool IsSystem,
88-
sourcekitd_variant_dictionary_applier_t applier) {
88+
llvm::function_ref<bool(sourcekitd_uid_t,
89+
sourcekitd_variant_t)> applier) {
8990

9091
#define APPLY(K, Ty, Field) \
9192
do { \
@@ -161,9 +162,11 @@ struct CompactVariantFuncs<TokenAnnotationsArray> {
161162

162163
return Fn(key, Kind, Offset, Length, IsSystem);
163164
}
164-
165-
static bool dictionary_apply(sourcekitd_variant_t dict,
166-
sourcekitd_variant_dictionary_applier_t applier) {
165+
166+
static bool
167+
dictionary_apply(sourcekitd_variant_t dict,
168+
llvm::function_ref<bool(sourcekitd_uid_t,
169+
sourcekitd_variant_t)> applier) {
167170
void *Buf = (void*)dict.data[1];
168171
size_t Index = dict.data[2];
169172

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

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -285,11 +285,12 @@ class VariantVisitor {
285285
case SOURCEKITD_VARIANT_TYPE_DICTIONARY: {
286286
DictMap Dict;
287287
DictMap &DictRef = Dict;
288-
sourcekitd_variant_dictionary_apply(Obj, ^(sourcekitd_uid_t key,
289-
sourcekitd_variant_t value) {
290-
DictRef.push_back({ UIdentFromSKDUID(key), value });
291-
return true;
292-
});
288+
sourcekitd_variant_dictionary_apply_impl(
289+
Obj,
290+
[&](sourcekitd_uid_t key, sourcekitd_variant_t value) {
291+
DictRef.push_back({UIdentFromSKDUID(key), value});
292+
return true;
293+
});
293294
std::sort(Dict.begin(), Dict.end(), compKeys);
294295
return static_cast<ImplClass*>(this)->visitDictionary(Dict);
295296
}
@@ -541,15 +542,15 @@ sourcekitd_variant_dictionary_get_value(sourcekitd_variant_t dict,
541542

542543
// Default implementation:
543544
// Linear search for the key/value pair via sourcekitd_variant_dictionary_apply.
544-
__block sourcekitd_variant_t result = makeNullVariant();
545-
sourcekitd_variant_dictionary_apply(dict,
546-
^bool(sourcekitd_uid_t curr_key, sourcekitd_variant_t curr_value) {
547-
if (curr_key == key) {
548-
result = curr_value;
549-
return false;
550-
}
551-
return true;
552-
});
545+
sourcekitd_variant_t result = makeNullVariant();
546+
sourcekitd_variant_dictionary_apply_impl(
547+
dict, [&](sourcekitd_uid_t curr_key, sourcekitd_variant_t curr_value) {
548+
if (curr_key == key) {
549+
result = curr_value;
550+
return false;
551+
}
552+
return true;
553+
});
553554

554555
return result;
555556
}
@@ -602,9 +603,18 @@ sourcekitd_variant_dictionary_get_uid(sourcekitd_variant_t dict,
602603
sourcekitd_variant_dictionary_get_value(dict, key));
603604
}
604605

606+
#if SOURCEKITD_HAS_BLOCKS
605607
bool
606608
sourcekitd_variant_dictionary_apply(sourcekitd_variant_t dict,
607609
sourcekitd_variant_dictionary_applier_t applier) {
610+
return sourcekitd_variant_dictionary_apply_impl(dict, applier);
611+
}
612+
#endif
613+
614+
bool
615+
sourcekitd_variant_dictionary_apply_impl(
616+
sourcekitd_variant_t dict,
617+
llvm::function_ref<bool(sourcekitd_uid_t, sourcekitd_variant_t)> applier) {
608618
if (auto fn = VAR_FN(dict, dictionary_apply))
609619
return fn(dict, applier);
610620

@@ -617,10 +627,11 @@ bool
617627
sourcekitd_variant_dictionary_apply_f(sourcekitd_variant_t dict,
618628
sourcekitd_variant_dictionary_applier_f_t applier,
619629
void *context) {
620-
return sourcekitd_variant_dictionary_apply(dict,
621-
^bool(sourcekitd_uid_t key, sourcekitd_variant_t value) {
622-
return applier(key, value, context);
623-
});
630+
return sourcekitd_variant_dictionary_apply_impl(
631+
dict,
632+
[&](sourcekitd_uid_t key, sourcekitd_variant_t value) {
633+
return applier(key, value, context);
634+
});
624635
}
625636

626637
size_t
@@ -685,9 +696,18 @@ sourcekitd_variant_array_get_uid(sourcekitd_variant_t array, size_t index) {
685696
sourcekitd_variant_array_get_value(array, index));
686697
}
687698

699+
#if SOURCEKITD_HAS_BLOCKS
688700
bool
689701
sourcekitd_variant_array_apply(sourcekitd_variant_t array,
690702
sourcekitd_variant_array_applier_t applier) {
703+
return sourcekitd_variant_array_apply_impl(array, applier);
704+
}
705+
#endif
706+
707+
SOURCEKITD_PUBLIC SOURCEKITD_NONNULL_ALL bool
708+
sourcekitd_variant_array_apply_impl(
709+
sourcekitd_variant_t array,
710+
llvm::function_ref<bool(size_t, sourcekitd_variant_t)> applier) {
691711
if (auto fn = VAR_FN(array, array_apply))
692712
return fn(array, applier);
693713

@@ -701,14 +721,13 @@ sourcekitd_variant_array_apply(sourcekitd_variant_t array,
701721
return true;
702722
}
703723

704-
bool
705-
sourcekitd_variant_array_apply_f(sourcekitd_variant_t array,
706-
sourcekitd_variant_array_applier_f_t applier,
707-
void *context) {
708-
return sourcekitd_variant_array_apply(array,
709-
^bool(size_t index, sourcekitd_variant_t value) {
710-
return applier(index, value, context);
711-
});
724+
bool sourcekitd_variant_array_apply_f(
725+
sourcekitd_variant_t array, sourcekitd_variant_array_applier_f_t applier,
726+
void *context) {
727+
return sourcekitd_variant_array_apply_impl(
728+
array, [&](size_t index, sourcekitd_variant_t value) {
729+
return applier(index, value, context);
730+
});
712731
}
713732

714733
int64_t

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -787,8 +787,8 @@ static sourcekitd_variant_type_t SKDVar_get_type(sourcekitd_variant_t var) {
787787
}
788788

789789
static bool SKDVar_array_apply(
790-
sourcekitd_variant_t array,
791-
sourcekitd_variant_array_applier_t applier) {
790+
sourcekitd_variant_t array,
791+
llvm::function_ref<bool(size_t, sourcekitd_variant_t)> applier) {
792792
return dyn_cast<SKDArray>(SKD_OBJ(array))->apply([&](size_t Index,
793793
SKDObjectRef Object){
794794
return applier(Index, variantFromSKDObject(Object));
@@ -827,8 +827,8 @@ static bool SKDVar_bool_get_value(sourcekitd_variant_t obj) {
827827
}
828828

829829
static bool SKDVar_dictionary_apply(
830-
sourcekitd_variant_t dict,
831-
sourcekitd_variant_dictionary_applier_t applier) {
830+
sourcekitd_variant_t dict,
831+
llvm::function_ref<bool(sourcekitd_uid_t, sourcekitd_variant_t)> applier) {
832832
return dyn_cast<SKDDictionary>(SKD_OBJ(dict))->apply([&](sourcekitd_uid_t Key,
833833
SKDObjectRef Object){
834834
return applier(Key, variantFromSKDObject(Object));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,8 @@ static sourcekitd_variant_type_t XPCVar_get_type(sourcekitd_variant_t var) {
606606
}
607607

608608
static bool XPCVar_array_apply(
609-
sourcekitd_variant_t array,
610-
sourcekitd_variant_array_applier_t applier) {
609+
sourcekitd_variant_t array,
610+
llvm::function_ref<bool(size_t, sourcekitd_variant_t)> applier) {
611611
return xpc_array_apply(XPC_OBJ(array),
612612
^(size_t index, xpc_object_t obj) {
613613
return applier(index, variantFromXPCObject(obj));
@@ -645,8 +645,8 @@ static bool XPCVar_bool_get_value(sourcekitd_variant_t obj) {
645645
}
646646

647647
static bool XPCVar_dictionary_apply(
648-
sourcekitd_variant_t dict,
649-
sourcekitd_variant_dictionary_applier_t applier) {
648+
sourcekitd_variant_t dict,
649+
llvm::function_ref<bool(sourcekitd_uid_t, sourcekitd_variant_t)> applier) {
650650
return xpc_dictionary_apply(XPC_OBJ(dict),
651651
^(const char *key, xpc_object_t obj) {
652652
return applier(sourcekitd_uid_get_from_cstr(key),variantFromXPCObject(obj));

0 commit comments

Comments
 (0)