ObjFW  Check-in [3ed710dc03]

Overview
Comment:runtime: Add ARC methods to headers and Amiga lib
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 3ed710dc03463627ba2a39bf950b06f0e66118696f7685f73b0431ca4989d1bf
User & Date: js on 2018-05-06 18:42:35
Other Links: manifest | tags
Context
2018-05-06
21:39
runtime: Make Amiga library work with -fbaserel check-in: 482698c5be user: js tags: trunk
18:42
runtime: Add ARC methods to headers and Amiga lib check-in: 3ed710dc03 user: js tags: trunk
02:16
Update buildsys check-in: 8498ed3446 user: js tags: trunk
Changes

Modified src/runtime/ObjFW_RT.h from [48418839dd] to [e761c23ace].

328
329
330
331
332
333
334




















335
336
337
338
339
extern void objc_setPropertyStruct(void *_Nonnull dest,
    const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong);
extern void objc_enumerationMutation(id _Nonnull object);
# ifndef OBJC_NO_PERSONALITY_DECLARATION
extern int __gnu_objc_personality_v0(int version, int actions,
    uint64_t ex_class, void *_Nonnull ex, void *_Nonnull ctx);
# endif




















#ifdef __cplusplus
}
#endif

#endif







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>





328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
extern void objc_setPropertyStruct(void *_Nonnull dest,
    const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong);
extern void objc_enumerationMutation(id _Nonnull object);
# ifndef OBJC_NO_PERSONALITY_DECLARATION
extern int __gnu_objc_personality_v0(int version, int actions,
    uint64_t ex_class, void *_Nonnull ex, void *_Nonnull ctx);
# endif
extern id _Nullable objc_retain(id _Nullable object);
extern id _Nullable objc_retainBlock(id _Nullable block);
extern id _Nullable objc_retainAutorelease(id _Nullable object);
extern void objc_release(id _Nullable object);
extern id _Nullable objc_autorelease(id _Nullable object);
extern id _Nullable objc_autoreleaseReturnValue(id _Nullable object);
extern id _Nullable objc_retainAutoreleaseReturnValue(id _Nullable object);
extern id _Nullable objc_retainAutoreleasedReturnValue(id _Nullable object);
extern id _Nullable objc_storeStrong(id _Nullable *_Nonnull object,
    id _Nullable value);
extern id _Nullable objc_storeWeak(id _Nullable *_Nonnull object,
    id _Nullable value);
extern id _Nullable objc_loadWeakRetained(id _Nullable *_Nonnull object);
extern id objc_initWeak(id _Nullable *_Nonnull object, id _Nullable value);
extern void objc_destroyWeak(id _Nullable *_Nonnull object);
extern id _Nullable objc_loadWeak(id _Nullable *_Nonnull object);
extern void objc_copyWeak(id _Nullable *_Nonnull dest,
    id _Nullable *_Nonnull src);
extern void objc_moveWeak(id _Nullable *_Nonnull dest,
    id _Nullable *_Nonnull src);
#ifdef __cplusplus
}
#endif

#endif

Modified src/runtime/ObjFW_RT.sfd from [7051c536a2] to [ea9196920a].

21
22
23
24
25
26
27
















28
29
30
31
32
33
34
int glue_objc_sync_exit(id _Nullable object)(a0)
id glue_objc_getProperty(id _Nonnull self, SEL _Nonnull _cmd, ptrdiff_t offset, bool atomic)(a0,a1,d0,d1)
void glue_objc_setProperty(id _Nonnull self, SEL _Nonnull _cmd, ptrdiff_t offset, id value, bool atomic, signed char copy)(a0,a1,d0,a2,d1,d2)
void glue_objc_getPropertyStruct(void *_Nonnull dest, const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong)(a0,a1,d0,d1,d2)
void glue_objc_setPropertyStruct(void *_Nonnull dest, const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong)(a0,a1,d0,d1,d2)
void glue_objc_enumerationMutation(id _Nonnull obj)(a0)
int glue___gnu_objc_personality_v0(int version, int actions, uint64_t *_Nonnull ex_class, void *_Nonnull ex, void *_Nonnull ctx)(d0,d1,d2,a0,a1)
















* Functions declared in ObjFW_RT.h
SEL _Nonnull sel_registerName(const char *_Nonnull name)(a0)
const char *_Nonnull sel_getName(SEL _Nonnull sel)(a0)
bool sel_isEqual(SEL _Nonnull sel1, SEL _Nonnull sel2)(a0,a1)
Class _Nonnull objc_allocateClassPair(Class _Nullable superclass, const char *_Nonnull name, size_t extra_bytes)(a0,a1,d0)
void objc_registerClassPair(Class _Nonnull cls)(a0)
unsigned int objc_getClassList(Class _Nonnull *_Nullable buf, unsigned int count)(a0,d0)







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int glue_objc_sync_exit(id _Nullable object)(a0)
id glue_objc_getProperty(id _Nonnull self, SEL _Nonnull _cmd, ptrdiff_t offset, bool atomic)(a0,a1,d0,d1)
void glue_objc_setProperty(id _Nonnull self, SEL _Nonnull _cmd, ptrdiff_t offset, id value, bool atomic, signed char copy)(a0,a1,d0,a2,d1,d2)
void glue_objc_getPropertyStruct(void *_Nonnull dest, const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong)(a0,a1,d0,d1,d2)
void glue_objc_setPropertyStruct(void *_Nonnull dest, const void *_Nonnull src, ptrdiff_t size, bool atomic, bool strong)(a0,a1,d0,d1,d2)
void glue_objc_enumerationMutation(id _Nonnull obj)(a0)
int glue___gnu_objc_personality_v0(int version, int actions, uint64_t *_Nonnull ex_class, void *_Nonnull ex, void *_Nonnull ctx)(d0,d1,d2,a0,a1)
id _Nullable glue_objc_retain(id _Nullable object)(a0)
id _Nullable glue_objc_retainBlock(id _Nullable block)(a0)
id _Nullable glue_objc_retainAutorelease(id _Nullable object)(a0)
void glue_objc_release(id _Nullable object)(a0)
id _Nullable glue_objc_autorelease(id _Nullable object)(a0)
id _Nullable glue_objc_autoreleaseReturnValue(id _Nullable object)(a0)
id _Nullable glue_objc_retainAutoreleaseReturnValue(id _Nullable object)(a0)
id _Nullable glue_objc_retainAutoreleasedReturnValue(id _Nullable object)(a0)
id _Nullable glue_objc_storeStrong(id _Nullable *_Nonnull object, id _Nullable value)(a0/a1)
id _Nullable glue_objc_storeWeak(id _Nullable *_Nonnull object, id _Nullable value)(a0,a1)
id _Nullable glue_objc_loadWeakRetained(id _Nullable *_Nonnull object)(a0)
id glue_objc_initWeak(id _Nullable *_Nonnull object, id _Nullable value)(a0,a1)
void glue_objc_destroyWeak(id _Nullable *_Nonnull object)(a0)
id _Nullable glue_objc_loadWeak(id _Nullable *_Nonnull object)(a0)
void glue_objc_copyWeak(id _Nullable *_Nonnull dest, id _Nullable *_Nonnull src)(a0,a1)
void glue_objc_moveWeak(id _Nullable *_Nonnull dest, id _Nullable *_Nonnull src)(a0,a1)
* Functions declared in ObjFW_RT.h
SEL _Nonnull sel_registerName(const char *_Nonnull name)(a0)
const char *_Nonnull sel_getName(SEL _Nonnull sel)(a0)
bool sel_isEqual(SEL _Nonnull sel1, SEL _Nonnull sel2)(a0,a1)
Class _Nonnull objc_allocateClassPair(Class _Nullable superclass, const char *_Nonnull name, size_t extra_bytes)(a0,a1,d0)
void objc_registerClassPair(Class _Nonnull cls)(a0)
unsigned int objc_getClassList(Class _Nonnull *_Nullable buf, unsigned int count)(a0,d0)

Modified src/runtime/amiga-glue.m from [01ae4542a3] to [25dbff61eb].

144
145
146
147
148
149
150










































































































int
glue___gnu_objc_personality_v0(int version OBJC_M68K_REG("d0"),
    int actions OBJC_M68K_REG("d1"), uint64_t *ex_class OBJC_M68K_REG("d2"),
    void *ex OBJC_M68K_REG("a0"), void *ctx OBJC_M68K_REG("a1"))
{
	return __gnu_objc_personality_v0(version, actions, *ex_class, ex, ctx);
}

















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
144
145
146
147
148
149
150
151
152
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
int
glue___gnu_objc_personality_v0(int version OBJC_M68K_REG("d0"),
    int actions OBJC_M68K_REG("d1"), uint64_t *ex_class OBJC_M68K_REG("d2"),
    void *ex OBJC_M68K_REG("a0"), void *ctx OBJC_M68K_REG("a1"))
{
	return __gnu_objc_personality_v0(version, actions, *ex_class, ex, ctx);
}

id
_Nullable glue_objc_retain(id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_retain(object);
}

id
_Nullable glue_objc_retainBlock(id _Nullable block OBJC_M68K_REG("a0"))
{
	return objc_retainBlock(block);
}

id
_Nullable glue_objc_retainAutorelease(id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_retainAutorelease(object);
}

void
glue_objc_release(id _Nullable object OBJC_M68K_REG("a0"))
{
	objc_release(object);
}

id
_Nullable glue_objc_autorelease(id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_autorelease(object);
}

id
_Nullable glue_objc_autoreleaseReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_autoreleaseReturnValue(object);
}

id
_Nullable glue_objc_retainAutoreleaseReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_retainAutoreleaseReturnValue(object);
}

id
_Nullable glue_objc_retainAutoreleasedReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"))
{
	return objc_retainAutoreleasedReturnValue(object);
}

id
_Nullable glue_objc_storeStrong(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"))
{
	return objc_storeStrong(object, value);
}

id
_Nullable glue_objc_storeWeak(id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"))
{
	return objc_storeWeak(object, value);
}

id
_Nullable glue_objc_loadWeakRetained(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"))
{
	return objc_loadWeakRetained(object);
}

id
glue_objc_initWeak(id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"))
{
	return objc_initWeak(object, value);
}

void
glue_objc_destroyWeak(id _Nullable *_Nonnull object OBJC_M68K_REG("a0"))
{
	objc_destroyWeak(object);
}

id
_Nullable glue_objc_loadWeak(id _Nullable *_Nonnull object OBJC_M68K_REG("a0"))
{
	return objc_loadWeak(object);
}

void
glue_objc_copyWeak(id _Nullable *_Nonnull dest OBJC_M68K_REG("a0"),
    id _Nullable *_Nonnull src OBJC_M68K_REG("a1"))
{
	objc_copyWeak(dest, src);
}

void
glue_objc_moveWeak(id _Nullable *_Nonnull dest OBJC_M68K_REG("a0"),
    id _Nullable *_Nonnull src OBJC_M68K_REG("a1"))
{
	objc_moveWeak(dest, src);
}

Modified src/runtime/arc.m from [13e9a659c3] to [82272ab977].

196
197
198
199
200
201
202

203
204
205
206
207
208
209
210
	struct weak_ref *ref;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_lock(&spinlock))
		OBJC_ERROR("Failed to lock spinlock!")
#endif


	if ((ref = objc_hashtable_get(hashtable, *object)) != NULL)
		value = *object;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_unlock(&spinlock))
		OBJC_ERROR("Failed to unlock spinlock!")
#endif








>
|







196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
	struct weak_ref *ref;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_lock(&spinlock))
		OBJC_ERROR("Failed to lock spinlock!")
#endif

	if (*object != nil &&
	    (ref = objc_hashtable_get(hashtable, *object)) != NULL)
		value = *object;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_unlock(&spinlock))
		OBJC_ERROR("Failed to unlock spinlock!")
#endif

246
247
248
249
250
251
252

253
254
255
256
257
258
259
260
	struct weak_ref *ref;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_lock(&spinlock))
		OBJC_ERROR("Failed to lock spinlock!")
#endif


	if ((ref = objc_hashtable_get(hashtable, *src)) != NULL) {
		for (size_t i = 0; i < ref->count; i++) {
			if (ref->locations[i] == src) {
				ref->locations[i] = dest;
				break;
			}
		}
	}







>
|







247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
	struct weak_ref *ref;

#ifdef OF_HAVE_THREADS
	if (!of_spinlock_lock(&spinlock))
		OBJC_ERROR("Failed to lock spinlock!")
#endif

	if (*src != nil &&
	    (ref = objc_hashtable_get(hashtable, *src)) != NULL) {
		for (size_t i = 0; i < ref->count; i++) {
			if (ref->locations[i] == src) {
				ref->locations[i] = dest;
				break;
			}
		}
	}

Modified src/runtime/private.h from [86b6d19cbd] to [b79f584910].

209
210
211
212
213
214
215
































216
217
218
219
220
221
222
    bool strong OBJC_M68K_REG("d2"));
extern void glue_objc_enumerationMutation(id _Nonnull obj OBJC_M68K_REG("a0"));
extern int glue___gnu_objc_personality_v0(int version OBJC_M68K_REG("d0"),
    int actions OBJC_M68K_REG("d1"),
    uint64_t *_Nonnull ex_class OBJC_M68K_REG("d2"),
    void *_Nonnull ex OBJC_M68K_REG("a0"),
    void *_Nonnull ctx OBJC_M68K_REG("a1"));
































#endif

extern void objc_register_all_categories(struct objc_abi_symtab *_Nonnull);
extern struct objc_category *_Nullable *_Nullable
    objc_categories_for_class(Class _Nonnull);
extern void objc_unregister_all_categories(void);
extern void objc_initialize_class(Class _Nonnull);







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
    bool strong OBJC_M68K_REG("d2"));
extern void glue_objc_enumerationMutation(id _Nonnull obj OBJC_M68K_REG("a0"));
extern int glue___gnu_objc_personality_v0(int version OBJC_M68K_REG("d0"),
    int actions OBJC_M68K_REG("d1"),
    uint64_t *_Nonnull ex_class OBJC_M68K_REG("d2"),
    void *_Nonnull ex OBJC_M68K_REG("a0"),
    void *_Nonnull ctx OBJC_M68K_REG("a1"));
extern id _Nullable glue_objc_retain(id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_retainBlock(
    id _Nullable block OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_retainAutorelease(
    id _Nullable object OBJC_M68K_REG("a0"));
extern void glue_objc_release(id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_autorelease(
    id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_autoreleaseReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_retainAutoreleaseReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_retainAutoreleasedReturnValue(
    id _Nullable object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_storeStrong(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"));
extern id _Nullable glue_objc_storeWeak(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"));
extern id _Nullable glue_objc_loadWeakRetained(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"));
extern id glue_objc_initWeak(id _Nullable *_Nonnull object OBJC_M68K_REG("a0"),
    id _Nullable value OBJC_M68K_REG("a1"));
extern void glue_objc_destroyWeak(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"));
extern id _Nullable glue_objc_loadWeak(
    id _Nullable *_Nonnull object OBJC_M68K_REG("a0"));
extern void glue_objc_copyWeak(id _Nullable *_Nonnull dest OBJC_M68K_REG("a0"),
    id _Nullable *_Nonnull src OBJC_M68K_REG("a1"));
extern void glue_objc_moveWeak(id _Nullable *_Nonnull dest OBJC_M68K_REG("a0"),
    id _Nullable *_Nonnull src OBJC_M68K_REG("a1"));
#endif

extern void objc_register_all_categories(struct objc_abi_symtab *_Nonnull);
extern struct objc_category *_Nullable *_Nullable
    objc_categories_for_class(Class _Nonnull);
extern void objc_unregister_all_categories(void);
extern void objc_initialize_class(Class _Nonnull);