summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorkrab <krab@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-29 07:06:18 +0000
committerkrab <krab@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-29 07:06:18 +0000
commited8f362cb67244283757f72c0de1306c3a1c01c0 (patch)
tree27c4942270eafa937f27b4bf99262cc3bfe8cd85 /gcc
parent9aff9cf4329f032f05e166e61e4463c42cc2427b (diff)
downloadgcc-ed8f362cb67244283757f72c0de1306c3a1c01c0.tar.gz
Uninstalled argframe macros
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@4270 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/objc/Makefile.in18
-rw-r--r--gcc/objc/Object.h10
-rw-r--r--gcc/objc/Object.m4
-rw-r--r--gcc/objc/misc.c2
-rw-r--r--gcc/objc/objc.h32
-rw-r--r--gcc/objc/sendmsg.c11
6 files changed, 53 insertions, 24 deletions
diff --git a/gcc/objc/Makefile.in b/gcc/objc/Makefile.in
index e4b3bbd5952..585b8129c66 100644
--- a/gcc/objc/Makefile.in
+++ b/gcc/objc/Makefile.in
@@ -60,12 +60,9 @@ libobjc.a: $(OBJC_O)
$(AR) rc libobjc.a $(OBJC_O)
# ranlib is run in the parent directory's makefile.
-ARGFRAME_H = argframe.h af-sparc.h
-
OBJC_H = hash.h list.h sarray.h objc.h \
objc-api.h cache.h \
- Object.h Protocol.h mutex.h \
- $(ARGFRAME_H)
+ Object.h Protocol.h mutex.h
# copy objc headers to installation include directory
copy-headers: $(OBJC_H)
@@ -77,6 +74,19 @@ copy-headers: $(OBJC_H)
chmod a+r $(incinstalldir)/objc; \
done
+sendmsg.o: sendmsg.c fflags
+ $(GCC_FOR_TARGET) `cat fflags` -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $(srcdir)/objc/sendmsg.c
+
+## Next to are for heuristics on forwarding mechanism...
+_forward: _forward.c
+ -$(GCC_FOR_TARGET) -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $(srcdir)/objc/_forward.c
+ -$(GCC_FOR_TARGET) ./_forward.o -o _forward
+ if [ ! -f ./_forward ]; then touch ./_forward; fi
+
+fflags: _forward
+ -rm -f fflags
+ -if [ -s ./_forward ]; then ./_forward > fflags; else touch fflags; fi
+
mostlyclean:
-rm -f *.o libobjc.a _forward fflags
clean: mostlyclean
diff --git a/gcc/objc/Object.h b/gcc/objc/Object.h
index 53f0253e8c5..6ef6e879fa4 100644
--- a/gcc/objc/Object.h
+++ b/gcc/objc/Object.h
@@ -52,14 +52,10 @@ typedef char *STR; /* String alias */
@class Protocol;
typedef struct objc_typed_stream TypedStream;
+typedef void* arglist_t;
#endif /* not __objc_INCLUDE_GNU */
-#ifndef __AF_FRAME
-typedef struct __gnuc_af_frame *af_frame;
-#define __AF_FRAME
-#endif
-
/*
* All classes are derived from Object. As such,
* this is the overhead tacked onto those objects.
@@ -123,8 +119,8 @@ typedef struct __gnuc_af_frame *af_frame;
- perform:(SEL)aSel with:anObject1 with:anObject2;
/* Forwarding */
-- forward:(SEL)aSel :(af_frame)argFrame;
-- performv:(SEL)aSel :(af_frame)argFrame;
+- forward:(SEL)aSel :(arglist_t)argFrame;
+- performv:(SEL)aSel :(arglist_t)argFrame;
/* Posing */
+ poseAs:(Class*)aClassObject;
diff --git a/gcc/objc/Object.m b/gcc/objc/Object.m
index 3a524dc7bb0..5f35bd39df9 100644
--- a/gcc/objc/Object.m
+++ b/gcc/objc/Object.m
@@ -245,12 +245,12 @@ extern int errno;
return (*msg)(self, aSel, anObject1, anObject2);
}
-- forward:(SEL)aSel :(af_frame)argFrame
+- forward:(SEL)aSel :(arglist_t)argFrame
{
return [self doesNotRecognize: aSel];
}
-- performv:(SEL)aSel :(af_frame)argFrame
+- performv:(SEL)aSel :(arglist_t)argFrame
{
return objc_msg_sendv(self, aSel, method_get_argsize(0), argFrame);
}
diff --git a/gcc/objc/misc.c b/gcc/objc/misc.c
index 915e29dd28b..b9b64ac273c 100644
--- a/gcc/objc/misc.c
+++ b/gcc/objc/misc.c
@@ -26,6 +26,8 @@ You should have received a copy of the GNU General Public License along with
#include "runtime.h"
+void objc_error(id object, const char* fmt, va_list);
+
void (*_objc_error)(id, const char*, va_list) = objc_error;
/* id (*_objc_object_alloc)(Class*) = 0; */
/* id (*_objc_object_dispose)(id) = 0; */
diff --git a/gcc/objc/objc.h b/gcc/objc/objc.h
index 569693781cc..d5eace390cb 100644
--- a/gcc/objc/objc.h
+++ b/gcc/objc/objc.h
@@ -440,12 +440,36 @@ IMP objc_msg_lookup_super(Super_t super, SEL sel);
typedef void* retval_t; /* return value */
typedef void(*apply_t)(void); /* function pointer */
-#ifndef __AF_FRAME
-typedef struct __gnuc_af_frame *af_frame;
-#define __AF_FRAME
+#ifndef __object_INCLUDE_GNU
+
+#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
+#endif /* not __object_INCLUDE_GNU */
-retval_t objc_msg_sendv(id, SEL, size_t, af_frame);
+retval_t objc_msg_sendv(id, SEL, size_t, arglist_t);
#ifdef __OBJC__
diff --git a/gcc/objc/sendmsg.c b/gcc/objc/sendmsg.c
index 1c5c6631829..b8ffed626d5 100644
--- a/gcc/objc/sendmsg.c
+++ b/gcc/objc/sendmsg.c
@@ -25,7 +25,6 @@ You should have received a copy of the GNU General Public License along with
covered by the GNU General Public License. */
#include "runtime.h"
-#include "argframe.h"
#ifdef OBJC_SPARSE_LOOKUP
const char* __objc_sparse_lookup_id = "Method lookup uses sparse arrays";
@@ -111,13 +110,11 @@ objc_msg_lookup_super (Super_t super, SEL sel)
}
retval_t
-objc_msg_sendv(id object, SEL op, size_t frame_size, af_frame arg_frame)
+objc_msg_sendv(id object, SEL op, size_t frame_size, arglist_t arg_frame)
{
-#ifndef __ARGFRAME_DOES_NOT_WORK
- af_cum cum;
- af_start (cum, arg_frame);
- af_put (arg_frame, cum, id, object);
- af_put (arg_frame, cum, SEL, op);
+#ifdef __objc_frame_receiver
+ __objc_frame_receiver(arg_frame) = object;
+ __objc_frame_selector(arg_frame) = op;
return __builtin_apply((apply_t)get_imp(object->class_pointer, op),
arg_frame,
frame_size);