--- gcc/objc/objc.h 2018/04/24 18:10:16 1.1.1.2 +++ gcc/objc/objc.h 2018/04/24 18:20:11 1.1.1.4 @@ -30,26 +30,34 @@ the Free Software Foundation, 675 Mass A extern "C" { #endif -#ifdef IN_GCC -#include "gstddef.h" -#else -#include "stddef.h" -#endif +#include /* ** Definition of the boolean type. */ -typedef char BOOL; +typedef unsigned char BOOL; #define YES (BOOL)1 #define NO (BOOL)0 /* -** Definition of a selector. Selectors are really of type unsigned int. -** The runtime does this mapping from SEL's to names internally in the -** sel_... operations. You should never use the fact that it is actually -** an integer, since other Objective-C implementations use other conventions. +** Definition of a selector. Selectors themselves are not unique, but +** the sel_id is a unique identifier. */ -typedef void* SEL; +typedef const struct objc_selector +{ + void *sel_id; + const char *sel_types; +} *SEL; + +inline static BOOL +sel_eq (SEL s1, SEL s2) +{ + if (s1 == 0 || s2 == 0) + return s1 == s2; + else + return s1->sel_id == s2->sel_id; +} + /* ** ObjC uses this typedef for untyped instances. @@ -123,61 +131,20 @@ typedef struct objc_protocol { struct objc_method_description_list *instance_methods, *class_methods; } Protocol; -#else - +#else /* __OBJC__ */ @class Protocol; #endif typedef void* retval_t; /* return value */ typedef void(*apply_t)(void); /* function pointer */ +typedef union { + char *arg_ptr; + char arg_regs[sizeof (char*)]; +} *arglist_t; /* argument frame */ -#if defined(REG_ARGS) || defined(STACK_ARGS) - -typedef struct { - char* arg_pointer; -#ifdef STRUCT_RETURN - void* struct_return; -#endif -#ifdef REG_ARGS - void* regs[2]; -#endif -} *arglist_t; - -#ifdef REG_ARGS -#define __objc_frame_receiver(FRAME) (FRAME)->regs[0] -#define __objc_frame_selector(FRAME) ((SEL)(FRAME)->regs[1]) - -#else -#define __objc_frame_receiver(FRAME) ((id*)(FRAME)->arg_pointer)[0] -#define __objc_frame_selector(FRAME) ((SEL*)(FRAME)->arg_pointer)[1] -#endif -#else - -typedef void* arglist_t; - -#endif - -#if defined(__OBJC__) - -#include "objc/sarray.h" - -static id nil_method(id rcv, SEL op, ...) { return rcv; } - -extern __inline__ IMP -objc_msg_lookup(id receiver, SEL op) -{ - if(receiver) - return sarray_get(receiver->class_pointer->dtable, (size_t) op); - else - return nil_method; -} - -#else IMP objc_msg_lookup(id receiver, SEL op); -#endif - #ifdef __cplusplus } #endif