diff -r -N -u gcc/c-lex.c gcc-byref/c-lex.c --- gcc/c-lex.c Tue Mar 18 20:16:41 1997 +++ gcc-byref/c-lex.c Fri Mar 20 08:25:47 1998 @@ -138,6 +138,8 @@ wordlist[i].name = "inout"; else if (wordlist[i].rid == RID_BYCOPY) wordlist[i].name = "bycopy"; + else if (wordlist[i].rid == RID_BYREF) + wordlist[i].name = "byref"; else if (wordlist[i].rid == RID_ONEWAY) wordlist[i].name = "oneway"; } @@ -184,6 +186,7 @@ ridpointers[(int) RID_OUT] = get_identifier ("out"); ridpointers[(int) RID_INOUT] = get_identifier ("inout"); ridpointers[(int) RID_BYCOPY] = get_identifier ("bycopy"); + ridpointers[(int) RID_BYREF] = get_identifier ("byref"); ridpointers[(int) RID_ONEWAY] = get_identifier ("oneway"); forget_protocol_qualifiers(); diff -r -N -u gcc/c-lex.h gcc-byref/c-lex.h --- gcc/c-lex.h Tue Mar 18 20:16:41 1997 +++ gcc-byref/c-lex.h Fri Mar 20 06:22:52 1998 @@ -50,6 +50,7 @@ RID_OUT, RID_INOUT, RID_BYCOPY, + RID_BYREF, RID_ONEWAY, RID_ID, diff -r -N -u gcc/c-parse.gperf gcc-byref/c-parse.gperf --- gcc/c-parse.gperf Tue Mar 18 20:16:43 1997 +++ gcc-byref/c-parse.gperf Fri Mar 20 08:38:43 1998 @@ -45,6 +45,7 @@ auto, SCSPEC, RID_AUTO break, BREAK, NORID bycopy, TYPE_QUAL, RID_BYCOPY +byref, TYPE_QUAL, RID_BYREF case, CASE, NORID char, TYPESPEC, RID_CHAR const, TYPE_QUAL, RID_CONST diff -r -N -u gcc/objc/encoding.c gcc-byref/objc/encoding.c --- gcc/objc/encoding.c Tue Mar 18 20:19:26 1997 +++ gcc-byref/objc/encoding.c Fri Mar 20 06:18:57 1998 @@ -299,6 +299,7 @@ || *type == _C_INOUT || *type == _C_OUT || *type == _C_BYCOPY + || *type == _C_BYREF || *type == _C_ONEWAY) { type += 1; @@ -536,6 +537,7 @@ case _C_INOUT: res |= _F_INOUT; break; case _C_OUT: res |= _F_OUT; break; case _C_BYCOPY: res |= _F_BYCOPY; break; + case _C_BYREF: res |= _F_BYREF; break; case _C_ONEWAY: res |= _F_ONEWAY; break; default: flag = NO; } diff -r -N -u gcc/objc/encoding.h gcc-byref/objc/encoding.h --- gcc/objc/encoding.h Tue Mar 18 20:19:26 1997 +++ gcc-byref/objc/encoding.h Fri Mar 20 07:32:16 1998 @@ -37,6 +37,7 @@ #define _C_INOUT 'N' #define _C_OUT 'o' #define _C_BYCOPY 'O' +#define _C_BYREF 'R' #define _C_ONEWAY 'V' #define _F_CONST 0x01 @@ -44,7 +45,9 @@ #define _F_OUT 0x02 #define _F_INOUT 0x03 #define _F_BYCOPY 0x04 -#define _F_ONEWAY 0x08 +#define _F_BYREF 0x08 +#define _F_ONEWAY 0x10 + int objc_aligned_size (const char* type); diff -r -N -u gcc/objc-act.c gcc-byref/objc-act.c --- gcc/objc-act.c Tue Mar 18 20:17:57 1997 +++ gcc-byref/objc-act.c Fri Mar 20 08:21:39 1998 @@ -2734,7 +2734,7 @@ char buf[40]; tree result; - /* ONEWAY and BYCOPY, for remote object are the only method qualifiers. */ + /* ONEWAY, BYCOPY and BYREF, for remote object are the only method qualifiers. */ encode_type_qualifiers (TREE_PURPOSE (TREE_TYPE (method_decl))); /* C type. */ @@ -4460,6 +4460,7 @@ || node == ridpointers [(int) RID_OUT] || node == ridpointers [(int) RID_INOUT] || node == ridpointers [(int) RID_BYCOPY] + || node == ridpointers [(int) RID_BYREF] || node == ridpointers [(int) RID_ONEWAY])); } @@ -6341,6 +6342,8 @@ obstack_1grow (&util_obstack, 'o'); else if (ridpointers[(int) RID_BYCOPY] == TREE_VALUE (spec)) obstack_1grow (&util_obstack, 'O'); + else if (ridpointers[(int) RID_BYREF] == TREE_VALUE (spec)) + obstack_1grow (&util_obstack, 'R'); else if (ridpointers[(int) RID_ONEWAY] == TREE_VALUE (spec)) obstack_1grow (&util_obstack, 'V'); }