93 lines
2.9 KiB
C
93 lines
2.9 KiB
C
/* GNU Objective C Runtime messaging declarations
|
|
Copyright (C) 1993, 1995, 1996, 2004, 2009,
|
|
2010 Free Software Foundation, Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3, or (at your option)
|
|
any later version.
|
|
|
|
GCC is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef __objc_message_INCLUDE_GNU
|
|
#define __objc_message_INCLUDE_GNU
|
|
|
|
#include "objc.h"
|
|
#include "objc-decls.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* This file includes declarations of the messaging functions and
|
|
types.
|
|
*/
|
|
|
|
/* Compatibility note: the messaging function is one area where the
|
|
GNU runtime and the Apple/NeXT runtime differ significantly. If
|
|
you can, it is recommended that you use higher-level facilities
|
|
(provided by a Foundation library such as GNUstep Base) to perform
|
|
forwarding or other advanced messaging tricks.
|
|
*/
|
|
|
|
typedef void* retval_t; /* return value */
|
|
typedef void(*apply_t)(void); /* function pointer */
|
|
typedef union arglist {
|
|
char *arg_ptr;
|
|
char arg_regs[sizeof (char*)];
|
|
} *arglist_t; /* argument frame */
|
|
|
|
objc_EXPORT IMP objc_msg_lookup(id receiver, SEL op);
|
|
|
|
/*
|
|
* Structure used when a message is send to a class's super class.
|
|
* The compiler generates one of these structures and passes it to
|
|
* objc_msg_lookup_super.
|
|
*/
|
|
typedef struct objc_super {
|
|
id self; /* Id of the object sending the message. */
|
|
#ifdef __cplusplus
|
|
/* The new version of the API will always use 'super_class'. */
|
|
Class super_class;
|
|
#else
|
|
Class class; /* Object's super class. */
|
|
#endif
|
|
} Super, *Super_t;
|
|
|
|
objc_EXPORT IMP objc_msg_lookup_super(Super_t super, SEL sel);
|
|
|
|
objc_EXPORT retval_t objc_msg_sendv(id, SEL, arglist_t);
|
|
|
|
/*
|
|
* Hooks for method forwarding. This makes it easy to substitute a
|
|
* library, such as ffcall, that implements closures, thereby avoiding
|
|
* gcc's __builtin_apply problems. __objc_msg_forward2's result will
|
|
* be preferred over that of __objc_msg_forward if both are set and
|
|
* return non-NULL.
|
|
*
|
|
* TODO: The API should define objc_set_msg_forward_handler () or
|
|
* similar instead of these hooks.
|
|
*/
|
|
objc_EXPORT IMP (*__objc_msg_forward)(SEL);
|
|
objc_EXPORT IMP (*__objc_msg_forward2)(id, SEL);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* not __objc_message_INCLUDE_GNU */
|