ObjFW  Diff

Differences From Artifact [57debffc40]:

To Artifact [f5a125315c]:


29
30
31
32
33
34
35

36
37
38

39
40
41
42
43
44
45
46
47
# define SEL_MAX 0xFFFFFF
# define SEL_SIZE 3
#else
# define SEL_MAX 0xFFFF
# define SEL_SIZE 2
#endif


static struct objc_hashtable *selectors = NULL;
static uint32_t selectors_cnt = 0;
static struct objc_sparsearray *selector_names = NULL;

static void **free_list = NULL;
static size_t free_list_cnt = 0;

void
objc_register_selector(struct objc_abi_selector *sel)
{
	struct objc_selector *rsel;
	const char *name;








>
|
|
|
>
|
<







29
30
31
32
33
34
35
36
37
38
39
40
41

42
43
44
45
46
47
48
# define SEL_MAX 0xFFFFFF
# define SEL_SIZE 3
#else
# define SEL_MAX 0xFFFF
# define SEL_SIZE 2
#endif

#import "globals.h"
#define selectors objc_globals.selectors
#define selectors_cnt objc_globals.selectors_cnt
#define selector_names objc_globals.selector_names
#define ptrs_to_free objc_globals.ptrs_to_free
#define ptrs_to_free_cnt objc_globals.ptrs_to_free_cnt


void
objc_register_selector(struct objc_abi_selector *sel)
{
	struct objc_selector *rsel;
	const char *name;

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
		OBJC_ERROR("Not enough memory to allocate selector!");

	if ((sel->name = of_strdup(name)) == NULL)
		OBJC_ERROR("Not enough memory to allocate selector!");

	sel->types = NULL;

	if ((free_list = realloc(free_list,
	    sizeof(void *) * (free_list_cnt + 2))) == NULL)
		OBJC_ERROR("Not enough memory to allocate selector!");

	free_list[free_list_cnt++] = sel;
	free_list[free_list_cnt++] = (char *)sel->name;

	objc_register_selector(sel);

	objc_global_mutex_unlock();
	return (SEL)sel;
}








|
|


|
|







86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
		OBJC_ERROR("Not enough memory to allocate selector!");

	if ((sel->name = of_strdup(name)) == NULL)
		OBJC_ERROR("Not enough memory to allocate selector!");

	sel->types = NULL;

	if ((ptrs_to_free = realloc(ptrs_to_free,
	    sizeof(void *) * (ptrs_to_free_cnt + 2))) == NULL)
		OBJC_ERROR("Not enough memory to allocate selector!");

	ptrs_to_free[ptrs_to_free_cnt++] = sel;
	ptrs_to_free[ptrs_to_free_cnt++] = (char *)sel->name;

	objc_register_selector(sel);

	objc_global_mutex_unlock();
	return (SEL)sel;
}

134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153

void
objc_unregister_all_selectors(void)
{
	objc_hashtable_free(selectors);
	objc_sparsearray_free(selector_names);

	if (free_list != NULL) {
		for (size_t i = 0; i < free_list_cnt; i++)
			free(free_list[i]);

		free(free_list);
	}

	selectors = NULL;
	selectors_cnt = 0;
	selector_names = NULL;
	free_list = NULL;
	free_list_cnt = 0;
}







|
|
|

|





|
|

135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154

void
objc_unregister_all_selectors(void)
{
	objc_hashtable_free(selectors);
	objc_sparsearray_free(selector_names);

	if (ptrs_to_free != NULL) {
		for (size_t i = 0; i < ptrs_to_free_cnt; i++)
			free(ptrs_to_free[i]);

		free(ptrs_to_free);
	}

	selectors = NULL;
	selectors_cnt = 0;
	selector_names = NULL;
	ptrs_to_free = NULL;
	ptrs_to_free_cnt = 0;
}