Annotation of GNUtools/cc/objc/objc.h, revision 1.1.1.1

1.1       root        1: /* Basic data types for Objective C.
                      2:    Copyright (C) 1993 Free Software Foundation, Inc.
                      3: 
                      4: This file is part of GNU CC.
                      5: 
                      6: GNU CC is free software; you can redistribute it and/or modify
                      7: it under the terms of the GNU General Public License as published by
                      8: the Free Software Foundation; either version 2, or (at your option)
                      9: any later version.
                     10: 
                     11: GNU CC is distributed in the hope that it will be useful,
                     12: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14: GNU General Public License for more details.
                     15: 
                     16: You should have received a copy of the GNU General Public License
                     17: along with GNU CC; see the file COPYING.  If not, write to
                     18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
                     19: 
                     20: /* As a special exception, if you link this library with files
                     21:    compiled with GCC to produce an executable, this does not cause
                     22:    the resulting executable to be covered by the GNU General Public License.
                     23:    This exception does not however invalidate any other reasons why
                     24:    the executable file might be covered by the GNU General Public License.  */
                     25: 
                     26: #ifndef __objc_INCLUDE_GNU
                     27: #define __objc_INCLUDE_GNU
                     28: 
                     29: #ifdef __cplusplus
                     30: extern "C" {
                     31: #endif
                     32: 
                     33: #ifdef IN_GCC
                     34: #include "gstddef.h"
                     35: #else
                     36: #include "stddef.h"
                     37: #endif
                     38: 
                     39: /*
                     40: ** Definition of the boolean type.  
                     41: */
                     42: typedef char  BOOL;
                     43: #define YES   (BOOL)1
                     44: #define NO    (BOOL)0
                     45: 
                     46: /*
                     47: ** Definition of a selector.  Selectors are really of type unsigned int.
                     48: ** The runtime does this mapping from SEL's to names internally in the
                     49: ** sel_... operations.  You should never use the fact that it is actually
                     50: ** an integer, since other Objective-C implementations use other conventions.
                     51: */
                     52: typedef void* SEL;
                     53: 
                     54: /*
                     55: ** ObjC uses this typedef for untyped instances.
                     56: */
                     57: typedef struct objc_object {
                     58:   struct objc_class*  class_pointer;
                     59: } *id;
                     60: 
                     61: /*
                     62: ** Definition of method type.  When retrieving the implementation of a
                     63: ** method, this is type of the pointer returned
                     64: */
                     65: typedef id (*IMP)(id, SEL, ...); 
                     66: 
                     67: /*
                     68: ** More simple types...
                     69: */
                     70: #define nil (id)0                               /* id of Nil instance */
                     71: #define Nil (Class*)0                          /* id of Nil class */
                     72: typedef char *STR;                              /* String alias */
                     73: 
                     74: /*
                     75: ** The compiler generates one of these structures for each class.  
                     76: ** 
                     77: ** This structure is the definition for classes. 
                     78: ** 
                     79: ** This structure is generated by the compiler in the executable and used by
                     80: ** the run-time during normal messaging operations.  Therefore some members
                     81: ** change type. The compiler generates "char* const" and places a string in
                     82: ** the following member variables:  super_class. 
                     83: */
                     84: typedef struct objc_class MetaClass;
                     85: typedef struct objc_class Class;
                     86: struct objc_class {     
                     87:   MetaClass*         class_pointer;          /* Pointer to the class's
                     88:                                                 meta class. */
                     89:   struct objc_class*  super_class;            /* Pointer to the super 
                     90:                                                 class. NULL for class 
                     91:                                                 Object. */
                     92:   const char*         name;                   /* Name of the class. */
                     93:   long                version;                /* Unknown. */
                     94:   unsigned long       info;                   /* Bit mask.  See class masks 
                     95:                                                 defined above. */
                     96:   long                instance_size;          /* Size in bytes of the class.  
                     97:                                                 The sum of the class definition 
                     98:                                                 and all super class 
                     99:                                                 definitions. */
                    100:   struct objc_ivar_list* ivars;               /* Pointer to a structure that
                    101:                                                 describes the instance 
                    102:                                                 variables in the class
                    103:                                                 definition.  NULL indicates
                    104:                                                 no instance variables.  Does
                    105:                                                 not include super class
                    106:                                                 variables. */
                    107:   struct objc_method_list*  methods;          /* Linked list of instance
                    108:                                                 methods defined for the 
                    109:                                                 class. */
                    110:   struct sarray *    dtable;                  /* Pointer to instance 
                    111:                                                 method dispatch table. */  
                    112:   struct objc_class* subclass_list;           /* Subclasses */
                    113:   struct objc_class* sibling_class;
                    114: 
                    115:   struct objc_protocol_list *protocols;              /* Protocols conformed to */
                    116: };
                    117: 
                    118: #ifndef __OBJC__
                    119: typedef struct objc_protocol {
                    120:   struct objc_class* class_pointer;
                    121:   char *protocol_name;
                    122:   struct objc_protocol_list *protocol_list;
                    123:   struct objc_method_description_list *instance_methods, *class_methods; 
                    124: } Protocol; 
                    125: 
                    126: #else /* __OBJC__ */
                    127: @class Protocol;
                    128: #endif 
                    129: 
                    130: typedef void* retval_t;                /* return value */
                    131: typedef void(*apply_t)(void);  /* function pointer */
                    132: typedef union {
                    133:   char *arg_ptr;
                    134:   char arg_regs[sizeof (char*)];
                    135: } *arglist_t;                  /* argument frame */
                    136: 
                    137: 
                    138: #if defined(__OBJC__) 
                    139: #include "objc/sarray.h"
                    140: 
                    141: /*
                    142:   This is the function called when messages are send to nil.  You may
                    143:   set a breakpoint in your debugger at this function to catch messages
                    144:   too nil.
                    145: */
                    146: extern id nil_method(id rcv, SEL op, ...);
                    147: 
                    148: /*
                    149:   The messager is inlined, thus it is defined here directly.  The
                    150:   inlining is quite time-consuming when optimizing.  This will be
                    151:   taken care of later by hand-coding the messager in the compiler.
                    152: */
                    153: extern __inline__ IMP
                    154: objc_msg_lookup(id receiver, SEL op)
                    155: {
                    156:   if(receiver)
                    157:     return sarray_get(receiver->class_pointer->dtable, (size_t)(op));
                    158:   else
                    159:     return nil_method;
                    160: }
                    161: 
                    162: #else
                    163: 
                    164: IMP objc_msg_lookup(id receiver, SEL op);
                    165: 
                    166: #endif
                    167: 
                    168: #ifdef __cplusplus
                    169: }
                    170: #endif
                    171: 
                    172: #endif /* not __objc_INCLUDE_GNU */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.