diff options
author | apbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-31 22:20:05 +0000 |
---|---|---|
committer | apbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-31 22:20:05 +0000 |
commit | 1d1e2444cb14c3f54fb6a06cd126d9c29b7c24e4 (patch) | |
tree | c1431312dd508cf15c33d179d6327cc406656347 /gcc/java/parse.y | |
parent | a9b6c705bc93669ce409c664a23c59374e3b9877 (diff) | |
download | ppe42-gcc-1d1e2444cb14c3f54fb6a06cd126d9c29b7c24e4.tar.gz ppe42-gcc-1d1e2444cb14c3f54fb6a06cd126d9c29b7c24e4.zip |
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 )
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44524 138bc75d-0d04-0410-961f-82ee72b054a4
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 03a540c06e0..1fb08bcd343 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 |