diff options
author | Alexandre Petit-Bianco <apbianco@redhat.com> | 2001-07-31 15:20:05 -0700 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 2001-07-31 15:20:05 -0700 |
commit | 9d7d836262a3137e04bf23c6073717be26bcc667 (patch) | |
tree | c1431312dd508cf15c33d179d6327cc406656347 /gcc/java/parse.y | |
parent | 6d0f55e6bc86ecc0a8f227ade76ec0d224e6e1ef (diff) | |
download | gcc-9d7d836262a3137e04bf23c6073717be26bcc667.zip gcc-9d7d836262a3137e04bf23c6073717be26bcc667.tar.gz gcc-9d7d836262a3137e04bf23c6073717be26bcc667.tar.bz2 |
[multiple changes]
2001-07-18 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.y (create_interface): Avoid cyclic inheritance report when
syntax error encountered during class definition.
Fixes PR java/2956
2001-07-17 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.h (INTERFACE_INNER_MODIFIERS): Disallow `private.'
* parse.y (check_class_interface_creation): Allow `private' if the
enclosing is not an interface.
(create_interface): Interface tagged public if the enclosing
context is an interface.
(create_class): Class tagged public if the enclosing context
is an interface.
Fixes PR java/2959
2001-07-17 Alexandre Petit-Bianco <apbianco@redhat.com>
* class.c (push_class): Set DECL_SIZE to `integer_zero_node.'
Fixes PR java/2665
2001-07-13 Alexandre Petit-Bianco <apbianco@redhat.com>
* parse.y (java_complete_lsh): Set CAN_COMPLETE_NORMALLY and unset
TREE_CONSTANT_OVERFLOW of CASE_EXPR value.
Fixes PR java/3602
(http://gcc.gnu.org/ml/gcc-patches/2001-07/msg02297.html )
From-SVN: r44524
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r-- | gcc/java/parse.y | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 03a540c..1fb08bc 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -3450,7 +3450,9 @@ check_class_interface_creation (is_interface, flags, raw_name, qualified_name, d else { check_modifiers_consistency (flags); - icaf = ACC_PRIVATE|ACC_PROTECTED; + icaf = ACC_PROTECTED; + if (! CLASS_INTERFACE (GET_CPC ())) + icaf |= ACC_PRIVATE; } } @@ -3738,6 +3740,11 @@ create_interface (flags, id, super) tree q_name = parser_qualified_classname (raw_name); tree decl = IDENTIFIER_CLASS_VALUE (q_name); + /* Certain syntax errors are making SUPER be like ID. Avoid this + case. */ + if (ctxp->class_err && id == super) + super = NULL; + EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */ /* Basic checks: scope, redefinition, modifiers */ @@ -3750,7 +3757,12 @@ create_interface (flags, id, super) /* Suspend the current parsing context if we're parsing an inner interface */ if (CPC_INNER_P ()) - java_parser_context_suspend (); + { + java_parser_context_suspend (); + /* Interface members are public. */ + if (CLASS_INTERFACE (GET_CPC ())) + flags |= ACC_PUBLIC; + } /* Push a new context for (static) initialized upon declaration fields */ java_parser_context_push_initialized_field (); @@ -3870,6 +3882,11 @@ create_class (flags, id, super, interfaces) tree class_id, decl; tree super_decl_type; + /* Certain syntax errors are making SUPER be like ID. Avoid this + case. */ + if (ctxp->class_err && id == super) + super = NULL; + class_id = parser_qualified_classname (raw_name); decl = IDENTIFIER_CLASS_VALUE (class_id); EXPR_WFL_NODE (id) = class_id; @@ -3884,7 +3901,13 @@ create_class (flags, id, super, interfaces) /* Suspend the current parsing context if we're parsing an inner class or an anonymous class. */ if (CPC_INNER_P ()) - java_parser_context_suspend (); + { + java_parser_context_suspend (); + /* Interface members are public. */ + if (CLASS_INTERFACE (GET_CPC ())) + flags |= ACC_PUBLIC; + } + /* Push a new context for (static) initialized upon declaration fields */ java_parser_context_push_initialized_field (); @@ -7336,7 +7359,9 @@ java_reorder_fields () } } } - stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list)); + /* There are cases were gclass_list will be empty. */ + if (gclass_list) + stop_reordering = TREE_TYPE (TREE_VALUE (gclass_list)); } /* Layout the methods of all classes loaded in one way or another. @@ -11367,6 +11392,8 @@ java_complete_lhs (node) } cn = fold (convert (int_type_node, cn)); + TREE_CONSTANT_OVERFLOW (cn) = 0; + CAN_COMPLETE_NORMALLY (cn) = 1; /* Multiple instance of a case label bearing the same value is checked during code generation. The case |