+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.
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. */
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
;
\f
nested_function:
;
objcmessageexpr:
- '['
- { objc_receiver_context = 1; }
- receiver
- { objc_receiver_context = 0; }
- messageargs ']'
- {
- $$ = build_tree_list ($3, $5);
- }
+ '[' receiver messageargs ']'
+ { $$ = build_tree_list ($2, $3); }
;
selectorarg:
/* 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;
{
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)))
{
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));
+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
--- /dev/null
+/* 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;
+}