#ifndef __OBJC_LOADER_H_INCLUDED #define __OBJC_LOADER_H_INCLUDED #include "category.h" #include "method_list.h" #include "module.h" #include "class.h" #include "protocol.h" /** * Checks whether it is safe to load a module with the specified version and * module size. This depends on whether another module with an incompatible * ABI has already been loaded. */ BOOL objc_check_abi_version(struct objc_module_abi_8 *module); /** * Initializes a protocol list, uniquing the protocols in the list. */ void objc_init_protocols(struct objc_protocol_list *protocols); /** * Registers a set of selectors from a method list. */ void objc_register_selectors_from_list(struct objc_method_list *l); /** * Register all of the (unregistered) selectors that are used in a class. */ void objc_register_selectors_from_class(Class class); /** * Registers all of the selectors in an array. */ void objc_register_selector_array(SEL selectors, unsigned long count); /** * Loads a class into the runtime system. If possible, the class is resolved * (inserted into the class tree) immediately. If its superclass is not yet * resolved, it is enqueued for later resolution. */ void objc_load_class(struct objc_class *class); /** * Resolves classes that have not yet been resolved, if their superclasses have * subsequently been loaded. */ void objc_resolve_class_links(void); /** * Attaches a category to its class, if the class is already loaded. Buffers * it for future resolution if not. */ void objc_try_load_category(struct objc_category *cat); /** * Tries to load all of the categories that could not previously be loaded * because their classes were not yet loaded. */ void objc_load_buffered_categories(void); /** * Updates the dispatch table for a class. */ void objc_update_dtable_for_class(Class cls); /** * Initialises a list of static object instances belonging to the same class if * possible, or defers initialisation until the class has been loaded it not. */ void objc_init_statics(struct objc_static_instance_list *statics); /** * Tries again to initialise static instances which could not be initialised * earlier. */ void objc_init_buffered_statics(void); #endif //__OBJC_LOADER_H_INCLUDED