--- gcc/objc/objc.h 2018/04/24 18:13:36 1.1.1.3 +++ gcc/objc/objc.h 2018/04/24 18:26:47 1.1.1.5 @@ -1,5 +1,5 @@ /* Basic data types for Objective C. - Copyright (C) 1993 Free Software Foundation, Inc. + Copyright (C) 1993, 1995 Free Software Foundation, Inc. This file is part of GNU CC. @@ -15,7 +15,8 @@ GNU General Public License for more deta You should have received a copy of the GNU General Public License along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with files compiled with GCC to produce an executable, this does not cause @@ -30,26 +31,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. @@ -68,7 +77,7 @@ typedef id (*IMP)(id, SEL, ...); ** More simple types... */ #define nil (id)0 /* id of Nil instance */ -#define Nil (Class*)0 /* id of Nil class */ +#define Nil (Class)0 /* id of Nil class */ typedef char *STR; /* String alias */ /* @@ -81,10 +90,10 @@ typedef char *STR; ** change type. The compiler generates "char* const" and places a string in ** the following member variables: super_class. */ -typedef struct objc_class MetaClass; -typedef struct objc_class Class; +typedef struct objc_class *MetaClass; +typedef struct objc_class *Class; struct objc_class { - MetaClass* class_pointer; /* Pointer to the class's + MetaClass class_pointer; /* Pointer to the class's meta class. */ struct objc_class* super_class; /* Pointer to the super class. NULL for class @@ -135,36 +144,8 @@ typedef union { } *arglist_t; /* argument frame */ -#if defined(__OBJC__) -#include "objc/sarray.h" - -/* - This is the function called when messages are send to nil. You may - set a breakpoint in your debugger at this function to catch messages - too nil. -*/ -extern id nil_method(id rcv, SEL op, ...); - -/* - The messager is inlined, thus it is defined here directly. The - inlining is quite time-consuming when optimizing. This will be - taken care of later by hand-coding the messager in the compiler. -*/ -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