ObjFW  Check-in [126298a6ee]

Overview
Comment:runtime: Use _Nonnull / _Nullable directly

Instead of using OBJC_NONNULL and OBJC_NULLABLE, define _Nonnull and
_Nullable to nothing if they are not defined.

Same for __unsafe_unretained.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 126298a6ee9616c9bcaf001ff901b3aa10f8bf4decda51bc4e1b033f3e49f33d
User & Date: js on 2017-07-16 17:09:01
Other Links: manifest | tags
Context
2017-07-16
18:28
Update buildsys check-in: 56c695ac5f user: js tags: trunk
17:09
runtime: Use _Nonnull / _Nullable directly check-in: 126298a6ee user: js tags: trunk
14:32
runtime: Add .fd and generate ppcinline.h check-in: 8f01f20891 user: js tags: trunk
Changes

Modified src/runtime/ObjFW-RT.h from [134f947253] to [8f35574758].

32
33
34
35
36
37
38
39
40


41
42
43
44



45
46
47
48


49
50
51
52
53

54
55
56

57
58
59
60
61
62
63
64
65
66
67
68
69
70



71
72
73
74
75



76
77
78
79
80
81
82
83
84
85







86
87
88


89
90
91
92
93
94
95
96
97
98
99
100
101
102

103
104
105
106
107

108
109
110
111
112


113
114
115
116
117

118
119
120
121

122
123
124
125
126
127
128
129
130
131





132
133
134
135
136


137
138
139
140
141
142
143
32
33
34
35
36
37
38


39
40




41
42
43




44
45


46
47

48



49
50
51
52
53
54
55
56
57
58
59
60



61
62
63
64
65



66
67
68
69
70
71







72
73
74
75
76
77
78
79


80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

95
96
97
98
99

100
101
102
103


104
105
106
107
108
109

110
111
112
113

114
115
116
117
118
119





120
121
122
123
124
125
126
127


128
129
130
131
132
133
134
135
136







-
-
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
-
-


-
+
-
-
-
+











-
-
-
+
+
+


-
-
-
+
+
+



-
-
-
-
-
-
-
+
+
+
+
+
+
+

-
-
+
+













-
+




-
+



-
-
+
+




-
+



-
+





-
-
-
-
-
+
+
+
+
+



-
-
+
+







# define __has_feature(x) 0
#endif

#ifndef __has_attribute
# define __has_attribute(x) 0
#endif

#if __has_feature(objc_arc)
# define OBJC_UNSAFE_UNRETAINED __unsafe_unretained
#if !__has_feature(nullability)
# ifndef _Nonnull
#else
# define OBJC_UNSAFE_UNRETAINED
#endif

#  define _Nonnull
# endif
# ifndef _Nullable
#if __has_feature(nullability)
# define OBJC_NONNULL _Nonnull
# define OBJC_NULLABLE _Nullable
#else
#  define _Nullable
# endif
# define OBJC_NONNULL
# define OBJC_NULLABLE
#endif

#if __has_attribute(__objc_root_class__)
#if !__has_feature(objc_arc) && !defined(__unsafe_unretained)
# define OBJC_ROOT_CLASS __attribute__((__objc_root_class__))
#else
# define OBJC_ROOT_CLASS
# define __unsafe_unretained
#endif

#define Nil (Class)0
#define nil (id)0
#define YES (BOOL)1
#define NO  (BOOL)0

typedef struct objc_class *Class;
typedef struct objc_object *id;
typedef const struct objc_selector *SEL;
typedef signed char BOOL;
typedef id OBJC_NULLABLE (*IMP)(id OBJC_NONNULL, SEL OBJC_NONNULL, ...);
typedef void (*objc_uncaught_exception_handler)(id OBJC_NULLABLE);
typedef void (*objc_enumeration_mutation_handler)(id OBJC_NONNULL);
typedef id _Nullable (*IMP)(id _Nonnull, SEL _Nonnull, ...);
typedef void (*objc_uncaught_exception_handler)(id _Nullable);
typedef void (*objc_enumeration_mutation_handler)(id _Nonnull);

struct objc_class {
	Class OBJC_NONNULL isa;
	Class OBJC_NULLABLE superclass;
	const char *OBJC_NONNULL name;
	Class _Nonnull isa;
	Class _Nullable superclass;
	const char *_Nonnull name;
	unsigned long version;
	unsigned long info;
	long instance_size;
	struct objc_ivar_list *OBJC_NULLABLE ivars;
	struct objc_method_list *OBJC_NULLABLE methodlist;
	struct objc_dtable *OBJC_NULLABLE dtable;
	Class OBJC_NONNULL *OBJC_NULLABLE subclass_list;
	void *OBJC_NULLABLE sibling_class;
	struct objc_protocol_list *OBJC_NULLABLE protocols;
	void *OBJC_NULLABLE gc_object_type;
	struct objc_ivar_list *_Nullable ivars;
	struct objc_method_list *_Nullable methodlist;
	struct objc_dtable *_Nullable dtable;
	Class _Nonnull *_Nullable subclass_list;
	void *_Nullable sibling_class;
	struct objc_protocol_list *_Nullable protocols;
	void *_Nullable gc_object_type;
	unsigned long abi_version;
	int32_t *OBJC_NONNULL *OBJC_NULLABLE ivar_offsets;
	struct objc_property_list *OBJC_NULLABLE properties;
	int32_t *_Nonnull *_Nullable ivar_offsets;
	struct objc_property_list *_Nullable properties;
};

enum objc_class_info {
	OBJC_CLASS_INFO_CLASS	    = 0x001,
	OBJC_CLASS_INFO_METACLASS   = 0x002,
	OBJC_CLASS_INFO_NEW_ABI	    = 0x010,
	OBJC_CLASS_INFO_SETUP	    = 0x100,
	OBJC_CLASS_INFO_LOADED	    = 0x200,
	OBJC_CLASS_INFO_DTABLE	    = 0x400,
	OBJC_CLASS_INFO_INITIALIZED = 0x800
};

struct objc_object {
	Class OBJC_NONNULL isa;
	Class _Nonnull isa;
};

struct objc_selector {
	uintptr_t uid;
	const char *OBJC_NULLABLE types;
	const char *_Nullable types;
};

struct objc_super {
	id OBJC_UNSAFE_UNRETAINED OBJC_NULLABLE self;
	Class OBJC_NONNULL cls;
	id __unsafe_unretained _Nullable self;
	Class _Nonnull cls;
};

struct objc_method {
	struct objc_selector sel;
	IMP OBJC_NONNULL imp;
	IMP _Nonnull imp;
};

struct objc_method_list {
	struct objc_method_list *OBJC_NULLABLE next;
	struct objc_method_list *_Nullable next;
	unsigned int count;
	struct objc_method methods[1];
};

struct objc_category {
	const char *OBJC_NONNULL category_name;
	const char *OBJC_NONNULL class_name;
	struct objc_method_list *OBJC_NULLABLE instance_methods;
	struct objc_method_list *OBJC_NULLABLE class_methods;
	struct objc_protocol_list *OBJC_NULLABLE protocols;
	const char *_Nonnull category_name;
	const char *_Nonnull class_name;
	struct objc_method_list *_Nullable instance_methods;
	struct objc_method_list *_Nullable class_methods;
	struct objc_protocol_list *_Nullable protocols;
};

struct objc_ivar {
	const char *OBJC_NONNULL name;
	const char *OBJC_NONNULL type;
	const char *_Nonnull name;
	const char *_Nonnull type;
	unsigned int offset;
};

struct objc_ivar_list {
	unsigned int count;
	struct objc_ivar ivars[1];
};
160
161
162
163
164
165
166
167

168
169
170
171


172
173
174
175
176
177

178
179
180
181
182



183
184
185
186
187
188
189
190
191
192
193





194
195
196
197
198
199
200
201
202

203
204

205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220











221
222
223
224
225
226
227





228
229
230
231
232
233
234
235
236
237
238
239
240
241













242
243
244
245
246




247
248
249

250
251
252
253



254
255
256
257
258
259
260
261
262
263
264



265
266
267
268
269
270
271
272
273
274
275
276
277












278
279

280
281

282
283

284
285
286
287
288
289
290
291
292
293
153
154
155
156
157
158
159

160
161
162


163
164
165
166
167
168
169

170
171
172
173
174

175
176
177
178
179
180
181
182
183





184
185
186
187
188
189
190
191
192
193
194
195
196

197
198

199
200
201
202
203
204











205
206
207
208
209
210
211
212
213
214
215







216
217
218
219
220














221
222
223
224
225
226
227
228
229
230
231
232
233





234
235
236
237

238

239
240



241
242
243
244
245
246
247
248
249
250
251



252
253
254













255
256
257
258
259
260
261
262
263
264
265
266
267

268
269

270
271

272
273
274
275
276





277







-
+


-
-
+
+





-
+




-
+
+
+






-
-
-
-
-
+
+
+
+
+








-
+

-
+





-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-

-
+

-
-
-
+
+
+








-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
+

-
+




-
-
-
-
-

	OBJC_PROPERTY_ATOMIC		=  0x4,
	OBJC_PROPERTY_WEAK		=  0x8,
	OBJC_PROPERTY_STRONG		= 0x10,
	OBJC_PROPERTY_UNSAFE_UNRETAINED = 0x20
};

struct objc_property {
	const char *OBJC_NONNULL name;
	const char *_Nonnull name;
	unsigned char attributes, extended_attributes;
	struct {
		const char *OBJC_NULLABLE name;
		const char *OBJC_NULLABLE type;
		const char *_Nullable name;
		const char *_Nullable type;
	} getter, setter;
};

struct objc_property_list {
	unsigned int count;
	struct objc_property_list *OBJC_NULLABLE next;
	struct objc_property_list *_Nullable next;
	struct objc_property properties[1];
};

#ifdef __OBJC__
OBJC_ROOT_CLASS
# if __has_attribute(__objc_root_class__)
__attribute__((__objc_root_class__))
# endif
@interface Protocol
{
@public
#else
typedef struct {
#endif
	Class OBJC_NONNULL isa;
	const char *OBJC_NONNULL name;
	struct objc_protocol_list *OBJC_NULLABLE protocol_list;
	struct objc_abi_method_description_list *OBJC_NULLABLE instance_methods;
	struct objc_abi_method_description_list *OBJC_NULLABLE class_methods;
	Class _Nonnull isa;
	const char *_Nonnull name;
	struct objc_protocol_list *_Nullable protocol_list;
	struct objc_abi_method_description_list *_Nullable instance_methods;
	struct objc_abi_method_description_list *_Nullable class_methods;
#ifdef __OBJC__
}
@end
#else
} Protocol;
#endif

struct objc_protocol_list {
	struct objc_protocol_list *OBJC_NULLABLE next;
	struct objc_protocol_list *_Nullable next;
	long count;
	Protocol *OBJC_UNSAFE_UNRETAINED OBJC_NONNULL list[1];
	Protocol *__unsafe_unretained _Nonnull list[1];
};

#ifdef __cplusplus
extern "C" {
#endif
extern SEL OBJC_NONNULL sel_registerName(const char *OBJC_NONNULL);
extern const char *OBJC_NONNULL sel_getName(SEL OBJC_NONNULL);
extern bool sel_isEqual(SEL OBJC_NONNULL, SEL OBJC_NONNULL);
extern Class OBJC_NONNULL objc_allocateClassPair(Class OBJC_NULLABLE,
    const char *OBJC_NONNULL, size_t);
extern void objc_registerClassPair(Class OBJC_NONNULL);
extern id OBJC_NULLABLE objc_lookUpClass(const char *OBJC_NONNULL);
extern id OBJC_NULLABLE objc_getClass(const char *OBJC_NONNULL);
extern id OBJC_NONNULL objc_getRequiredClass(const char *OBJC_NONNULL);
extern unsigned int objc_getClassList(Class OBJC_NONNULL *OBJC_NULLABLE,
    unsigned int);
extern SEL _Nonnull sel_registerName(const char *_Nonnull);
extern const char *_Nonnull sel_getName(SEL _Nonnull);
extern bool sel_isEqual(SEL _Nonnull, SEL _Nonnull);
extern Class _Nonnull objc_allocateClassPair(Class _Nullable,
    const char *_Nonnull, size_t);
extern void objc_registerClassPair(Class _Nonnull);
extern id _Nullable objc_lookUpClass(const char *_Nonnull);
extern id _Nullable objc_getClass(const char *_Nonnull);
extern id _Nonnull objc_getRequiredClass(const char *_Nonnull);
extern unsigned int objc_getClassList(Class _Nonnull *_Nullable, unsigned int);
extern Class _Nonnull *_Nonnull objc_copyClassList(unsigned int *_Nullable);
extern Class OBJC_NONNULL *OBJC_NONNULL objc_copyClassList(
    unsigned int *OBJC_NULLABLE);
extern bool class_isMetaClass(Class OBJC_NULLABLE);
extern const char *OBJC_NONNULL class_getName(Class OBJC_NULLABLE);
extern Class OBJC_NULLABLE class_getSuperclass(Class OBJC_NULLABLE);
extern unsigned long class_getInstanceSize(Class OBJC_NULLABLE);
extern bool class_respondsToSelector(Class OBJC_NULLABLE, SEL OBJC_NONNULL);
extern bool class_isMetaClass(Class _Nullable);
extern const char *_Nullable class_getName(Class _Nullable);
extern Class _Nullable class_getSuperclass(Class _Nullable);
extern unsigned long class_getInstanceSize(Class _Nullable);
extern bool class_respondsToSelector(Class _Nullable, SEL _Nonnull);
extern bool class_conformsToProtocol(Class OBJC_NULLABLE,
    Protocol *OBJC_NONNULL);
extern IMP OBJC_NULLABLE class_getMethodImplementation(Class OBJC_NULLABLE,
    SEL OBJC_NONNULL);
extern IMP OBJC_NULLABLE class_getMethodImplementation_stret(
    Class OBJC_NULLABLE, SEL OBJC_NONNULL);
extern const char *OBJC_NULLABLE class_getMethodTypeEncoding(
    Class OBJC_NULLABLE, SEL OBJC_NONNULL);
extern bool class_addMethod(Class OBJC_NONNULL, SEL OBJC_NONNULL,
    IMP OBJC_NONNULL, const char *OBJC_NULLABLE);
extern IMP OBJC_NULLABLE class_replaceMethod(Class OBJC_NONNULL,
    SEL OBJC_NONNULL, IMP OBJC_NONNULL, const char *OBJC_NULLABLE);
extern Class OBJC_NULLABLE object_getClass(id OBJC_NULLABLE);
extern Class OBJC_NULLABLE object_setClass(id OBJC_NULLABLE,
extern bool class_conformsToProtocol(Class _Nullable, Protocol *_Nonnull);
extern IMP _Nullable class_getMethodImplementation(Class _Nullable,
    SEL _Nonnull);
extern IMP _Nullable class_getMethodImplementation_stret(Class _Nullable,
    SEL _Nonnull);
extern const char *_Nullable class_getMethodTypeEncoding(Class _Nullable,
    SEL _Nonnull);
extern bool class_addMethod(Class _Nonnull, SEL _Nonnull, IMP _Nonnull,
    const char *_Nullable);
extern IMP _Nullable class_replaceMethod(Class _Nonnull, SEL _Nonnull,
    IMP _Nonnull, const char *_Nullable);
extern Class _Nullable object_getClass(id _Nullable);
extern Class _Nullable object_setClass(id _Nullable, Class _Nonnull);
    Class OBJC_NONNULL);
extern const char *OBJC_NONNULL object_getClassName(id OBJC_NULLABLE);
extern const char *OBJC_NONNULL protocol_getName(Protocol *OBJC_NONNULL);
extern bool protocol_isEqual(Protocol *OBJC_NONNULL, Protocol *OBJC_NONNULL);
extern bool protocol_conformsToProtocol(Protocol *OBJC_NONNULL,
extern const char *_Nonnull object_getClassName(id _Nullable);
extern const char *_Nonnull protocol_getName(Protocol *_Nonnull);
extern bool protocol_isEqual(Protocol *_Nonnull, Protocol *_Nonnull);
extern bool protocol_conformsToProtocol(Protocol *_Nonnull, Protocol *_Nonnull);
    Protocol *OBJC_NONNULL);
extern void objc_exit(void);
extern OBJC_NULLABLE objc_uncaught_exception_handler
extern _Nullable objc_uncaught_exception_handler
    objc_setUncaughtExceptionHandler(
    objc_uncaught_exception_handler OBJC_NULLABLE);
extern void objc_setForwardHandler(IMP OBJC_NULLABLE, IMP OBJC_NULLABLE);
extern void objc_zero_weak_references(id OBJC_NONNULL);
    objc_uncaught_exception_handler _Nullable);
extern void objc_setForwardHandler(IMP _Nullable, IMP _Nullable);
extern void objc_zero_weak_references(id _Nonnull);

/*
 * Used by the compiler, but can also be called manually.
 *
 * These declarations are also required to prevent Clang's implicit
 * declarations which include __declspec(dllimport) on Windows.
 */
struct objc_abi_module;
extern void __objc_exec_class(void *OBJC_NONNULL);
extern IMP OBJC_NONNULL objc_msg_lookup(id OBJC_NULLABLE, SEL OBJC_NONNULL);
extern IMP OBJC_NONNULL objc_msg_lookup_stret(id OBJC_NULLABLE,
extern void __objc_exec_class(void *_Nonnull);
extern IMP _Nonnull objc_msg_lookup(id _Nullable, SEL _Nonnull);
extern IMP _Nonnull objc_msg_lookup_stret(id _Nullable, SEL _Nonnull);
    SEL OBJC_NONNULL);
extern IMP OBJC_NONNULL objc_msg_lookup_super(struct objc_super *OBJC_NONNULL,
    SEL OBJC_NONNULL);
extern IMP OBJC_NONNULL objc_msg_lookup_super_stret(
    struct objc_super *OBJC_NONNULL, SEL OBJC_NONNULL);
extern void objc_exception_throw(id OBJC_NULLABLE);
extern int objc_sync_enter(id OBJC_NULLABLE);
extern int objc_sync_exit(id OBJC_NULLABLE);
extern id OBJC_NULLABLE objc_getProperty(id OBJC_NONNULL, SEL OBJC_NONNULL,
    ptrdiff_t, BOOL);
extern void objc_setProperty(id OBJC_NONNULL, SEL OBJC_NONNULL, ptrdiff_t,
    id OBJC_NULLABLE, BOOL, signed char);
extern void objc_getPropertyStruct(void *OBJC_NONNULL, const void *OBJC_NONNULL,
extern IMP _Nonnull objc_msg_lookup_super(struct objc_super *_Nonnull,
    SEL _Nonnull);
extern IMP _Nonnull objc_msg_lookup_super_stret(struct objc_super *_Nonnull,
    SEL _Nonnull);
extern void objc_exception_throw(id _Nullable);
extern int objc_sync_enter(id _Nullable);
extern int objc_sync_exit(id _Nullable);
extern id _Nullable objc_getProperty(id _Nonnull, SEL _Nonnull, ptrdiff_t,
    BOOL);
extern void objc_setProperty(id _Nonnull, SEL _Nonnull, ptrdiff_t, id _Nullable,
    BOOL, signed char);
extern void objc_getPropertyStruct(void *_Nonnull, const void *_Nonnull,
    ptrdiff_t, BOOL, BOOL);
extern void objc_setPropertyStruct(void *OBJC_NONNULL, const void *OBJC_NONNULL,
extern void objc_setPropertyStruct(void *_Nonnull, const void *_Nonnull,
    ptrdiff_t, BOOL, BOOL);
extern void objc_enumerationMutation(id OBJC_NONNULL);
extern void objc_enumerationMutation(id _Nonnull);
extern void objc_setEnumerationMutationHandler(
    objc_enumeration_mutation_handler OBJC_NULLABLE);
    objc_enumeration_mutation_handler _Nullable);
#ifdef __cplusplus
}
#endif

#undef OBJC_NONNULL
#undef OBJC_NULLABLE
#undef OBJC_UNSAFE_UNRETAINED
#undef OBJC_ROOT_CLASS

#endif