class.c (make_class): Don't set CLASS_P here (because this function is also called...
authorPer Bothner <bothner@gcc.gnu.org>
Mon, 15 Mar 1999 13:09:44 +0000 (05:09 -0800)
committerPer Bothner <bothner@gcc.gnu.org>
Mon, 15 Mar 1999 13:09:44 +0000 (05:09 -0800)
d
* class.c (make_class):  Don't set CLASS_P here (because
this function is also called by build_java_array_type).
(push_class):  Set CLASS_P here instead.
* parse.h (TYPE_CLASS_P):  Check for TYPE_ARRAY_P is redundant.
* jcf-dump.c (print_access_flags):  Take extra parameter to indicate
context.  If the context is class, perfer "super" over "synchronized".
* jcf-write.c (generate_classfile):  Don't add ACC_SUPER if interface.
* parse.y (create_class):  Don't call parser_check_super here;
it is not robust.  Always wait until later.
* parse.y (method_header):  For interfaces, set ACC_ABSTRACT (to
match what JDK 1.2 does), but don't set ACC_PUBLIC.

From-SVN: r25784

gcc/java/jcf-dump.c
gcc/java/parse.c
gcc/java/parse.h
gcc/java/parse.y

index b48c0b43c63a11995c3cec45e6ebb0121dc7517f..eaf07cdc91f058371f3f1c0a6161d00b491acca3 100644 (file)
@@ -77,7 +77,7 @@ int class_access_flags = 0;
 /* Print in format similar to javap.  VERY IMCOMPLETE. */
 int flag_javap_compatible = 0;
 
-static int print_access_flags PROTO ((FILE *, uint16));
+static int print_access_flags PROTO ((FILE *, uint16, char));
 static void print_constant_terse PROTO ((FILE*, JCF*, int, int));
 static void print_constant PROTO ((FILE *, JCF *, int, int));
 static void print_constant_ref PROTO ((FILE *, JCF *, int));
@@ -127,7 +127,7 @@ DEFUN(utf8_equal_string, (jcf, index, value),
   class_access_flags = ACCESS_FLAGS; \
   if (flag_print_class_info) \
     { fprintf (out, "\nAccess flags: 0x%x", ACCESS_FLAGS); \
-      print_access_flags (out, ACCESS_FLAGS); \
+      print_access_flags (out, ACCESS_FLAGS, 'c'); \
       fputc ('\n', out); \
       fprintf (out, "This class: "); \
       if (flag_print_constant_pool) \
@@ -163,7 +163,7 @@ DEFUN(utf8_equal_string, (jcf, index, value),
   if (flag_print_fields) \
     { fprintf (out, "Field name:"); \
       print_constant_terse (out, jcf, NAME, CONSTANT_Utf8); \
-      print_access_flags (out, ACCESS_FLAGS); \
+      print_access_flags (out, ACCESS_FLAGS, 'f'); \
       fprintf (out, " Signature: "); \
       if (flag_print_constant_pool) \
         fprintf (out, "%d=", SIGNATURE); \
@@ -194,7 +194,7 @@ DEFUN(utf8_equal_string, (jcf, index, value),
       if (flag_javap_compatible) \
         { \
          fprintf (out, "    "); \
-         print_access_flags (out, ACCESS_FLAGS); \
+         print_access_flags (out, ACCESS_FLAGS, 'm'); \
          fputc (' ', out); \
          print_signature (out, jcf, SIGNATURE, PRINT_SIGNATURE_RESULT_ONLY); \
          fputc (' ', out); \
@@ -206,7 +206,7 @@ DEFUN(utf8_equal_string, (jcf, index, value),
        { \
          fprintf (out, "\nMethod name:"); \
          print_constant_terse (out, jcf, NAME, CONSTANT_Utf8); \
-         print_access_flags (out, ACCESS_FLAGS); \
+         print_access_flags (out, ACCESS_FLAGS, 'm'); \
          fprintf (out, " Signature: "); \
          if (flag_print_constant_pool) \
            fprintf (out, "%d=", SIGNATURE); \
@@ -305,16 +305,24 @@ DEFUN(print_constant_ref, (stream, jcf, index),
   fprintf (stream, ">");
 }
 
+/* Print the access flags given by FLAGS.
+   The CONTEXT is one of 'c' (class flags), 'f' (field flags),
+   or 'm' (method flags). */
+
 static int
-DEFUN (print_access_flags, (stream, flags),
-       FILE *stream AND uint16 flags)
+DEFUN (print_access_flags, (stream, flags, context),
+       FILE *stream AND uint16 flags AND char context)
 {
   if (flags & ACC_PUBLIC) fprintf (stream, " public");
   if (flags & ACC_PRIVATE) fprintf (stream, " private");
   if (flags & ACC_PROTECTED) fprintf (stream, " protected");
   if (flags & ACC_STATIC) fprintf (stream, " static");
   if (flags & ACC_FINAL) fprintf (stream, " final");
-  if (flags & ACC_SYNCHRONIZED) fprintf (stream, " synchronized");
+  if (flags & ACC_SYNCHRONIZED)
+    if (context == 'c')
+      fprintf (stream, " super");
+    else
+      fprintf (stream, " synchronized");
   if (flags & ACC_VOLATILE) fprintf (stream, " volatile");
   if (flags & ACC_TRANSIENT) fprintf (stream, " transient");
   if (flags & ACC_NATIVE) fprintf (stream, " native");
index 30ecc5f95cfbb31007733ba5f860f6c2616a257f..63e666202ac93a8bc179c5bf05b1570ee3d0acc9 100644 (file)
@@ -5593,17 +5593,8 @@ create_class (flags, id, super, interfaces)
          return NULL_TREE;
        }
 
-      /* The class is known and exists if there is a decl. Otherwise,
-         postpone the operation and do it later. */
-      super_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (super));
-      if (super_decl)
-       {
-         parser_check_super (super_decl, decl, id);
-         super_decl_type = TREE_TYPE (super_decl);
-       }
-      else
-       super_decl_type = 
-         register_incomplete_type (JDEP_SUPER, super, decl, NULL_TREE);
+      super_decl_type = 
+       register_incomplete_type (JDEP_SUPER, super, decl, NULL_TREE);
     }
   else if (TREE_TYPE (decl) != object_type_node)
     super_decl_type = object_type_node;
index c78c5bb680714231e1c430168bf0fbb30efeff14..f59c4ca4b420866f3304119a9ead080c614d6a44 100644 (file)
@@ -208,8 +208,7 @@ extern tree stabilize_reference PROTO ((tree));
   (CLASS_P (TYPE) && CLASS_INTERFACE (TYPE_NAME (TYPE)))
 
 #define TYPE_CLASS_P(TYPE) (CLASS_P (TYPE)                             \
-                           && !CLASS_INTERFACE (TYPE_NAME (TYPE))      \
-                           && !TYPE_ARRAY_P (TYPE))
+                           && !CLASS_INTERFACE (TYPE_NAME (TYPE)))
 
 /* Standard error messages */
 #define ERROR_CANT_CONVERT_TO_BOOLEAN(OPERATOR, NODE, TYPE)            \
index c4378dae51da9246018bb9e2591554763fb06183..75ffbc3cc6170092e0f778abb617b4a8c73d8a50 100644 (file)
@@ -2991,17 +2991,8 @@ create_class (flags, id, super, interfaces)
          return NULL_TREE;
        }
 
-      /* The class is known and exists if there is a decl. Otherwise,
-         postpone the operation and do it later. */
-      super_decl = IDENTIFIER_CLASS_VALUE (EXPR_WFL_NODE (super));
-      if (super_decl)
-       {
-         parser_check_super (super_decl, decl, id);
-         super_decl_type = TREE_TYPE (super_decl);
-       }
-      else
-       super_decl_type = 
-         register_incomplete_type (JDEP_SUPER, super, decl, NULL_TREE);
+      super_decl_type = 
+       register_incomplete_type (JDEP_SUPER, super, decl, NULL_TREE);
     }
   else if (TREE_TYPE (decl) != object_type_node)
     super_decl_type = object_type_node;