mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
#ifndef TEST_INTEROP_C_INPUTS_FOREIGN_REFERENCE_H
|
|
#define TEST_INTEROP_C_INPUTS_FOREIGN_REFERENCE_H
|
|
|
|
#include <stdlib.h>
|
|
|
|
#if __has_feature(nullability)
|
|
// Provide macros to temporarily suppress warning about the use of
|
|
// _Nullable and _Nonnull.
|
|
# define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS \
|
|
_Pragma("clang diagnostic push") \
|
|
_Pragma("clang diagnostic ignored \"-Wnullability-extension\"") \
|
|
_Pragma("clang assume_nonnull begin")
|
|
# define SWIFT_END_NULLABILITY_ANNOTATIONS \
|
|
_Pragma("clang diagnostic pop") \
|
|
_Pragma("clang assume_nonnull end")
|
|
|
|
#else
|
|
// #define _Nullable and _Nonnull to nothing if we're not being built
|
|
// with a compiler that supports them.
|
|
# define _Nullable
|
|
# define _Nonnull
|
|
# define _Null_unspecified
|
|
# define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS
|
|
# define SWIFT_END_NULLABILITY_ANNOTATIONS
|
|
#endif
|
|
|
|
SWIFT_BEGIN_NULLABILITY_ANNOTATIONS
|
|
|
|
struct
|
|
__attribute__((swift_attr("import_as_ref")))
|
|
__attribute__((swift_attr("retain:LCRetain")))
|
|
__attribute__((swift_attr("release:LCRelease")))
|
|
LocalCount {
|
|
int value;
|
|
};
|
|
|
|
static inline struct LocalCount *createLocalCount() {
|
|
struct LocalCount *ptr = malloc(sizeof(struct LocalCount));
|
|
ptr->value = 1;
|
|
return ptr;
|
|
}
|
|
|
|
static inline void LCRetain(struct LocalCount *x) { x->value++; }
|
|
static inline void LCRelease(struct LocalCount *x) { x->value--; }
|
|
|
|
static int globalCount = 0;
|
|
|
|
struct
|
|
__attribute__((swift_attr("import_as_ref")))
|
|
__attribute__((swift_attr("retain:GCRetain")))
|
|
__attribute__((swift_attr("release:GCRelease")))
|
|
GlobalCount {};
|
|
|
|
static inline struct GlobalCount *createGlobalCount() {
|
|
globalCount++;
|
|
return malloc(sizeof(struct GlobalCount));
|
|
}
|
|
|
|
static inline void GCRetain(struct GlobalCount *x) { globalCount++; }
|
|
static inline void GCRelease(struct GlobalCount *x) { globalCount--; }
|
|
|
|
SWIFT_END_NULLABILITY_ANNOTATIONS
|
|
|
|
#endif // TEST_INTEROP_C_INPUTS_FOREIGN_REFERENCE_H
|