Artifact 4d94664fb8bcd3310653187b32da9c983583b6cd9138986f15472eab71d3adee:
- File
src/runtime/globals.h
— part of check-in
[79011c5f56]
at
2017-06-07 21:38:21
on branch trunk
— runtime: Move all globals into a single struct
This is required to create a .library on MorphOS. (user: js, size: 2238) [annotate] [blame] [check-ins using]
/* * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 * Jonathan Schleifer <js@heap.zone> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "runtime-private.h" #ifdef OF_HAVE_THREADS # import "threading.h" #endif /* All globals used by the runtime */ struct objc_globals { /* arc.m */ struct objc_hashtable *weak_refs; #ifdef OF_HAVE_THREADS of_spinlock_t weak_refs_lock; #endif /* category.m */ struct objc_hashtable *categories; /* class.m */ struct objc_hashtable *classes; unsigned classes_cnt; Class *load_queue; size_t load_queue_cnt; struct objc_dtable *empty_dtable; unsigned lookups_till_fast_path; struct objc_sparsearray *fast_path; /* dtable.m */ struct objc_dtable_level2 *empty_dtable_level2; #ifdef OF_SELUID24 struct objc_dtable_level3 *empty_dtable_level3; #endif /* lookup.m */ IMP forward_handler; IMP forward_handler_stret; /* misc.m */ objc_enumeration_mutation_handler enumeration_mutation_handler; /* property.m */ #ifdef OF_HAVE_THREADS # define NUM_PROPERTY_LOCKS 8 /* needs to be a power of 2 */ of_spinlock_t property_locks[NUM_PROPERTY_LOCKS]; #endif /* selector.m */ struct objc_hashtable *selectors; uint32_t selectors_cnt; struct objc_sparsearray *selector_names; void **ptrs_to_free; size_t ptrs_to_free_cnt; /* static-instances.m */ struct objc_abi_static_instances **static_instances; size_t static_instances_cnt; /* synchronized.m */ #ifdef OF_HAVE_THREADS struct synchronized_lock { id object; int count; of_rmutex_t rmutex; struct synchronized_lock *next; } *synchronized_locks; of_mutex_t synchronized_locks_lock; #endif /* threading.m */ #ifdef OF_HAVE_THREADS of_rmutex_t global_mutex; of_once_t global_once_control; #endif }; extern struct objc_globals objc_globals;