From c1c5187c9ee27bbf60a5c237ecbd3667b35bf544 Mon Sep 17 00:00:00 2001 From: Ziemowit Laski Date: Tue, 2 Jul 2002 21:59:34 +0000 Subject: [PATCH] c-parse.in (designator): Enable designated initializers if ObjC. 2002-07-02 Ziemowit Laski * c-parse.in (designator): Enable designated initializers if ObjC. (objcmessageexpr): Remove references to objc_receiver_context. * objc/objc-act.h (objc_receiver_context): Remove decl. * objc/objc-act.c (objc_receiver_context): Remove. (lookup_objc_ivar): Test objc_method_context instead of objc_receiver_context. 2002-07-02 Ziemowit Laski * objc.dg/desig-init-1.m: New test. From-SVN: r55192 --- gcc/ChangeLog | 9 +++++++ gcc/c-parse.in | 17 +++--------- gcc/objc/objc-act.c | 6 ++--- gcc/objc/objc-act.h | 2 -- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/objc.dg/desig-init-1.m | 40 ++++++++++++++++++++++++++++ 6 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/objc.dg/desig-init-1.m diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7a81de4c6a..18bbcdbfd07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-07-02 Ziemowit Laski + + * c-parse.in (designator): Enable designated initializers if ObjC. + (objcmessageexpr): Remove references to objc_receiver_context. + * objc/objc-act.h (objc_receiver_context): Remove decl. + * objc/objc-act.c (objc_receiver_context): Remove. + (lookup_objc_ivar): Test objc_method_context instead of + objc_receiver_context. + Tue Jul 2 18:45:45 2002 J"orn Rennecke * sh.c (print_operand, case 'N'): Allow zero vector. diff --git a/gcc/c-parse.in b/gcc/c-parse.in index 2a58668e0aa..6ce9a2e9516 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -29,7 +29,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA written by AT&T, but I have never seen it. */ ifobjc -%expect 31 /* shift/reduce conflicts, and 1 reduce/reduce conflict. */ +%expect 32 /* shift/reduce conflicts, and 1 reduce/reduce conflict. */ end ifobjc ifc %expect 10 /* shift/reduce conflicts, and no reduce/reduce conflicts. */ @@ -1566,17 +1566,12 @@ designator_list: designator: '.' identifier { set_init_label ($2); } - /* These are for labeled elements. The syntax for an array element - initializer conflicts with the syntax for an Objective-C message, - so don't include these productions in the Objective-C grammar. */ -ifc | '[' expr_no_commas ELLIPSIS expr_no_commas ']' { set_init_index ($2, $4); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); } | '[' expr_no_commas ']' { set_init_index ($2, NULL_TREE); } -end ifc ; nested_function: @@ -3223,14 +3218,8 @@ receiver: ; objcmessageexpr: - '[' - { objc_receiver_context = 1; } - receiver - { objc_receiver_context = 0; } - messageargs ']' - { - $$ = build_tree_list ($3, $5); - } + '[' receiver messageargs ']' + { $$ = build_tree_list ($2, $3); } ; selectorarg: diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 3909e0ca16f..c0db5993d56 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -341,8 +341,6 @@ static const char *default_constant_string_class_name; /* The OCTI_... enumeration itself is in objc/objc-act.h. */ tree objc_global_trees[OCTI_MAX]; -int objc_receiver_context; - static void handle_impent PARAMS ((struct imp_entry *)); struct imp_entry *imp_list = 0; @@ -8311,8 +8309,8 @@ lookup_objc_ivar (id) { tree decl; - if (objc_receiver_context && !strcmp (IDENTIFIER_POINTER (id), "super")) - /* we have a message to super */ + if (objc_method_context && !strcmp (IDENTIFIER_POINTER (id), "super")) + /* We have a message to super. */ return get_super_receiver (); else if (objc_method_context && (decl = is_ivar (objc_ivar_chain, id))) { diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index 17e5bd58c4d..13b3e63de1f 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -64,8 +64,6 @@ void objc_declare_alias PARAMS ((tree, tree)); void objc_declare_class PARAMS ((tree)); void objc_declare_protocols PARAMS ((tree)); -extern int objc_receiver_context; - /* the following routines are used to implement statically typed objects */ int objc_comptypes PARAMS ((tree, tree, int)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b25b0ef318d..014eacbb637 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-07-02 Ziemowit Laski + + * objc.dg/desig-init-1.m: New test. + 2002-07-02 Kriang Lerdsuwanakij PR c++/6716 diff --git a/gcc/testsuite/objc.dg/desig-init-1.m b/gcc/testsuite/objc.dg/desig-init-1.m new file mode 100644 index 00000000000..72fe8330960 --- /dev/null +++ b/gcc/testsuite/objc.dg/desig-init-1.m @@ -0,0 +1,40 @@ +/* Test Objective-C capability for handling GNU/C99 designated + initializers, and distinguishing them from message sends. */ +/* Contributed by Ziemowit Laski . */ +/* { dg-options "-std=gnu99" } */ +/* { dg-do run } */ + +#include +#include +#include + +@interface Cls : Object ++ (int) meth1; ++ (int) meth2; ++ (void) doTests; +@end + +@implementation Cls ++ (int) meth1 { return 45; } ++ (int) meth2 { return 21; } ++ (void) doTests { + int arr[6] = { + 0, + [Cls meth1], + [2 + 1] = 3, + [2 * 2 ... 5] = [0 meth2], /* { dg-warning "invalid receiver type" } */ + [2] [Cls meth2] + }; + + if (arr[0] != 0 || arr[1] != 45 || arr[2] != 21 || arr[3] != 3) + abort (); /* { dg-warning "implicit declaration" } */ + + printf ("%s\n", [super name]); + printf ("%d %d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]); +} +@end + +int main(void) { + [Cls doTests]; + return 0; +} -- 2.30.2