init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
This commit is contained in:
272
Telegram/ThirdParty/dispatch/os/object.h
vendored
Normal file
272
Telegram/ThirdParty/dispatch/os/object.h
vendored
Normal file
@@ -0,0 +1,272 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2014 Apple Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_APACHE_LICENSE_HEADER_START@
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_APACHE_LICENSE_HEADER_END@
|
||||
*/
|
||||
|
||||
#ifndef __OS_OBJECT__
|
||||
#define __OS_OBJECT__
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <Availability.h>
|
||||
#include <os/availability.h>
|
||||
#include <TargetConditionals.h>
|
||||
#include <os/base.h>
|
||||
#elif defined(_WIN32)
|
||||
#include <os/generic_win_base.h>
|
||||
#elif defined(__unix__)
|
||||
#include <os/generic_unix_base.h>
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* @header
|
||||
*
|
||||
* @preprocinfo
|
||||
* By default, libSystem objects such as GCD and XPC objects are declared as
|
||||
* Objective-C types when building with an Objective-C compiler. This allows
|
||||
* them to participate in ARC, in RR management by the Blocks runtime and in
|
||||
* leaks checking by the static analyzer, and enables them to be added to Cocoa
|
||||
* collections.
|
||||
*
|
||||
* NOTE: this requires explicit cancellation of dispatch sources and xpc
|
||||
* connections whose handler blocks capture the source/connection object,
|
||||
* resp. ensuring that such captures do not form retain cycles (e.g. by
|
||||
* declaring the source as __weak).
|
||||
*
|
||||
* To opt-out of this default behavior, add -DOS_OBJECT_USE_OBJC=0 to your
|
||||
* compiler flags.
|
||||
*
|
||||
* This mode requires a platform with the modern Objective-C runtime, the
|
||||
* Objective-C GC compiler option to be disabled, and at least a Mac OS X 10.8
|
||||
* or iOS 6.0 deployment target.
|
||||
*/
|
||||
|
||||
#ifndef OS_OBJECT_HAVE_OBJC_SUPPORT
|
||||
#if !defined(__OBJC__) || defined(__OBJC_GC__)
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 0
|
||||
#elif !defined(TARGET_OS_MAC) || !TARGET_OS_MAC
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 0
|
||||
#elif TARGET_OS_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 0
|
||||
#elif TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
# if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 0
|
||||
# elif defined(__i386__) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_12
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 0
|
||||
# else
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 1
|
||||
# endif
|
||||
#else
|
||||
# define OS_OBJECT_HAVE_OBJC_SUPPORT 1
|
||||
#endif
|
||||
#endif // OS_OBJECT_HAVE_OBJC_SUPPORT
|
||||
|
||||
#if OS_OBJECT_HAVE_OBJC_SUPPORT
|
||||
#if defined(__swift__) && __swift__ && !OS_OBJECT_USE_OBJC
|
||||
#define OS_OBJECT_USE_OBJC 1
|
||||
#endif
|
||||
#ifndef OS_OBJECT_USE_OBJC
|
||||
#define OS_OBJECT_USE_OBJC 1
|
||||
#endif
|
||||
#elif defined(OS_OBJECT_USE_OBJC) && OS_OBJECT_USE_OBJC
|
||||
/* Unsupported platform for OS_OBJECT_USE_OBJC=1 */
|
||||
#undef OS_OBJECT_USE_OBJC
|
||||
#define OS_OBJECT_USE_OBJC 0
|
||||
#else
|
||||
#define OS_OBJECT_USE_OBJC 0
|
||||
#endif
|
||||
|
||||
#ifndef OS_OBJECT_SWIFT3
|
||||
#if defined(SWIFT_SDK_OVERLAY_DISPATCH_EPOCH) && \
|
||||
SWIFT_SDK_OVERLAY_DISPATCH_EPOCH >= 2
|
||||
#define OS_OBJECT_SWIFT3 1
|
||||
#else
|
||||
#define OS_OBJECT_SWIFT3 0
|
||||
#endif // SWIFT_SDK_OVERLAY_DISPATCH_EPOCH >= 2
|
||||
#endif // OS_OBJECT_SWIFT3
|
||||
|
||||
#if OS_OBJECT_USE_OBJC
|
||||
#import <objc/NSObject.h>
|
||||
#if __has_attribute(objc_independent_class)
|
||||
#define OS_OBJC_INDEPENDENT_CLASS __attribute__((objc_independent_class))
|
||||
#endif // __has_attribute(objc_independent_class)
|
||||
#ifndef OS_OBJC_INDEPENDENT_CLASS
|
||||
#define OS_OBJC_INDEPENDENT_CLASS
|
||||
#endif
|
||||
#define OS_OBJECT_CLASS(name) OS_##name
|
||||
#define OS_OBJECT_DECL_PROTOCOL(name, ...) \
|
||||
@protocol OS_OBJECT_CLASS(name) __VA_ARGS__ \
|
||||
@end
|
||||
#define OS_OBJECT_CLASS_IMPLEMENTS_PROTOCOL_IMPL(name, proto) \
|
||||
@interface name () <proto> \
|
||||
@end
|
||||
#define OS_OBJECT_CLASS_IMPLEMENTS_PROTOCOL(name, proto) \
|
||||
OS_OBJECT_CLASS_IMPLEMENTS_PROTOCOL_IMPL( \
|
||||
OS_OBJECT_CLASS(name), OS_OBJECT_CLASS(proto))
|
||||
#define OS_OBJECT_DECL_IMPL(name, ...) \
|
||||
OS_OBJECT_DECL_PROTOCOL(name, __VA_ARGS__) \
|
||||
typedef NSObject<OS_OBJECT_CLASS(name)> \
|
||||
* OS_OBJC_INDEPENDENT_CLASS name##_t
|
||||
#define OS_OBJECT_DECL_BASE(name, ...) \
|
||||
@interface OS_OBJECT_CLASS(name) : __VA_ARGS__ \
|
||||
- (instancetype)init OS_SWIFT_UNAVAILABLE("Unavailable in Swift"); \
|
||||
@end
|
||||
#define OS_OBJECT_DECL_IMPL_CLASS(name, ...) \
|
||||
OS_OBJECT_DECL_BASE(name, ## __VA_ARGS__) \
|
||||
typedef OS_OBJECT_CLASS(name) \
|
||||
* OS_OBJC_INDEPENDENT_CLASS name##_t
|
||||
#define OS_OBJECT_DECL(name, ...) \
|
||||
OS_OBJECT_DECL_IMPL(name, <NSObject>)
|
||||
#define OS_OBJECT_DECL_SUBCLASS(name, super) \
|
||||
OS_OBJECT_DECL_IMPL(name, <OS_OBJECT_CLASS(super)>)
|
||||
#if __has_attribute(ns_returns_retained)
|
||||
#define OS_OBJECT_RETURNS_RETAINED __attribute__((__ns_returns_retained__))
|
||||
#else
|
||||
#define OS_OBJECT_RETURNS_RETAINED
|
||||
#endif
|
||||
#if __has_attribute(ns_consumed)
|
||||
#define OS_OBJECT_CONSUMED __attribute__((__ns_consumed__))
|
||||
#else
|
||||
#define OS_OBJECT_CONSUMED
|
||||
#endif
|
||||
#if __has_feature(objc_arc)
|
||||
#define OS_OBJECT_BRIDGE __bridge
|
||||
#define OS_WARN_RESULT_NEEDS_RELEASE
|
||||
#else
|
||||
#define OS_OBJECT_BRIDGE
|
||||
#define OS_WARN_RESULT_NEEDS_RELEASE OS_WARN_RESULT
|
||||
#endif
|
||||
#if __has_attribute(objc_runtime_visible) && \
|
||||
((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
|
||||
__MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_12) || \
|
||||
(defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \
|
||||
!defined(__TV_OS_VERSION_MIN_REQUIRED) && \
|
||||
!defined(__WATCH_OS_VERSION_MIN_REQUIRED) && \
|
||||
__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0) || \
|
||||
(defined(__TV_OS_VERSION_MIN_REQUIRED) && \
|
||||
__TV_OS_VERSION_MIN_REQUIRED < __TVOS_10_0) || \
|
||||
(defined(__WATCH_OS_VERSION_MIN_REQUIRED) && \
|
||||
__WATCH_OS_VERSION_MIN_REQUIRED < __WATCHOS_3_0))
|
||||
/*
|
||||
* To provide backward deployment of ObjC objects in Swift on pre-10.12
|
||||
* SDKs, OS_object classes can be marked as OS_OBJECT_OBJC_RUNTIME_VISIBLE.
|
||||
* When compiling with a deployment target earlier than OS X 10.12 (iOS 10.0,
|
||||
* tvOS 10.0, watchOS 3.0) the Swift compiler will only refer to this type at
|
||||
* runtime (using the ObjC runtime).
|
||||
*/
|
||||
#define OS_OBJECT_OBJC_RUNTIME_VISIBLE __attribute__((objc_runtime_visible))
|
||||
#else
|
||||
#define OS_OBJECT_OBJC_RUNTIME_VISIBLE
|
||||
#endif
|
||||
#ifndef OS_OBJECT_USE_OBJC_RETAIN_RELEASE
|
||||
#if defined(__clang_analyzer__)
|
||||
#define OS_OBJECT_USE_OBJC_RETAIN_RELEASE 1
|
||||
#elif __has_feature(objc_arc) && !OS_OBJECT_SWIFT3
|
||||
#define OS_OBJECT_USE_OBJC_RETAIN_RELEASE 1
|
||||
#else
|
||||
#define OS_OBJECT_USE_OBJC_RETAIN_RELEASE 0
|
||||
#endif
|
||||
#endif
|
||||
#if OS_OBJECT_SWIFT3
|
||||
#define OS_OBJECT_DECL_SWIFT(name) \
|
||||
OS_EXPORT OS_OBJECT_OBJC_RUNTIME_VISIBLE \
|
||||
OS_OBJECT_DECL_IMPL_CLASS(name, NSObject)
|
||||
#define OS_OBJECT_DECL_SUBCLASS_SWIFT(name, super) \
|
||||
OS_EXPORT OS_OBJECT_OBJC_RUNTIME_VISIBLE \
|
||||
OS_OBJECT_DECL_IMPL_CLASS(name, OS_OBJECT_CLASS(super))
|
||||
OS_EXPORT OS_OBJECT_OBJC_RUNTIME_VISIBLE
|
||||
OS_OBJECT_DECL_BASE(object, NSObject);
|
||||
#endif // OS_OBJECT_SWIFT3
|
||||
#else
|
||||
/*! @parseOnly */
|
||||
#define OS_OBJECT_RETURNS_RETAINED
|
||||
/*! @parseOnly */
|
||||
#define OS_OBJECT_CONSUMED
|
||||
/*! @parseOnly */
|
||||
#define OS_OBJECT_BRIDGE
|
||||
/*! @parseOnly */
|
||||
#define OS_WARN_RESULT_NEEDS_RELEASE OS_WARN_RESULT
|
||||
/*! @parseOnly */
|
||||
#define OS_OBJECT_OBJC_RUNTIME_VISIBLE
|
||||
#define OS_OBJECT_USE_OBJC_RETAIN_RELEASE 0
|
||||
#endif
|
||||
|
||||
#if OS_OBJECT_SWIFT3
|
||||
#define OS_OBJECT_DECL_CLASS(name) \
|
||||
OS_OBJECT_DECL_SUBCLASS_SWIFT(name, object)
|
||||
#elif OS_OBJECT_USE_OBJC
|
||||
#define OS_OBJECT_DECL_CLASS(name) \
|
||||
OS_OBJECT_DECL(name)
|
||||
#else
|
||||
#define OS_OBJECT_DECL_CLASS(name) \
|
||||
typedef struct name##_s *name##_t
|
||||
#endif
|
||||
|
||||
#define OS_OBJECT_GLOBAL_OBJECT(type, object) ((OS_OBJECT_BRIDGE type)&(object))
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*!
|
||||
* @function os_retain
|
||||
*
|
||||
* @abstract
|
||||
* Increment the reference count of an os_object.
|
||||
*
|
||||
* @discussion
|
||||
* On a platform with the modern Objective-C runtime this is exactly equivalent
|
||||
* to sending the object the -[retain] message.
|
||||
*
|
||||
* @param object
|
||||
* The object to retain.
|
||||
*
|
||||
* @result
|
||||
* The retained object.
|
||||
*/
|
||||
API_AVAILABLE(macos(10.10), ios(8.0))
|
||||
OS_EXPORT OS_SWIFT_UNAVAILABLE("Can't be used with ARC")
|
||||
void*
|
||||
os_retain(void *object);
|
||||
#if OS_OBJECT_USE_OBJC
|
||||
#undef os_retain
|
||||
#define os_retain(object) [object retain]
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* @function os_release
|
||||
*
|
||||
* @abstract
|
||||
* Decrement the reference count of a os_object.
|
||||
*
|
||||
* @discussion
|
||||
* On a platform with the modern Objective-C runtime this is exactly equivalent
|
||||
* to sending the object the -[release] message.
|
||||
*
|
||||
* @param object
|
||||
* The object to release.
|
||||
*/
|
||||
API_AVAILABLE(macos(10.10), ios(8.0))
|
||||
OS_EXPORT
|
||||
void OS_SWIFT_UNAVAILABLE("Can't be used with ARC")
|
||||
os_release(void *object);
|
||||
#if OS_OBJECT_USE_OBJC
|
||||
#undef os_release
|
||||
#define os_release(object) [object release]
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user