aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZiemowit Laski <zlaski@apple.com>2002-07-02 21:59:34 +0000
committerStan Shebs <shebs@gcc.gnu.org>2002-07-02 21:59:34 +0000
commitc1c5187c9ee27bbf60a5c237ecbd3667b35bf544 (patch)
tree4490d49b0ca7ef976a719a92a9be675a3a160306 /gcc
parentaa5661e6b41e781f2e7b6b3e3fc163174f0687a8 (diff)
downloadgcc-c1c5187c9ee27bbf60a5c237ecbd3667b35bf544.zip
gcc-c1c5187c9ee27bbf60a5c237ecbd3667b35bf544.tar.gz
gcc-c1c5187c9ee27bbf60a5c237ecbd3667b35bf544.tar.bz2
c-parse.in (designator): Enable designated initializers if ObjC.
2002-07-02 Ziemowit Laski <zlaski@apple.com> * 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 <zlaski@apple.com> * objc.dg/desig-init-1.m: New test. From-SVN: r55192
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/c-parse.in17
-rw-r--r--gcc/objc/objc-act.c6
-rw-r--r--gcc/objc/objc-act.h2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/objc.dg/desig-init-1.m40
6 files changed, 58 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e7a81de..18bbcdb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2002-07-02 Ziemowit Laski <zlaski@apple.com>
+
+ * 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 <joern.rennecke@superh.com>
* sh.c (print_operand, case 'N'): Allow zero vector.
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index 2a58668..6ce9a2e 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 3909e0c..c0db599 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 17e5bd5..13b3e63 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 b25b0ef..014eacb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-07-02 Ziemowit Laski <zlaski@apple.com>
+
+ * objc.dg/desig-init-1.m: New test.
+
2002-07-02 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
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 0000000..72fe833
--- /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 <zlaski@apple.com>. */
+/* { dg-options "-std=gnu99" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+#include <objc/objc.h>
+#include <objc/Object.h>
+
+@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;
+}