diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 1831e2d8301..fc09afd7872 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2001-05-07 Alexandre Petit-Bianco + + * parse.y (fix_constructors): Removed unecessary assignment to + local. Moved assignment to `this$', fixed comments and + indentation. + (build_wfl_wrap): Fixed indentation. + Fixes PR java/2598, java/2579 and java/2658. + 2001-05-03 Mo DeJong * lex.c (java_new_lexer): Call iconv_close on temp handle used to diff --git a/gcc/java/parse.y b/gcc/java/parse.y index d7b86339b83..aaff8b4fd71 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -8500,7 +8500,7 @@ fix_constructors (mdecl) /* We don't generate a super constructor invocation if we're compiling java.lang.Object. build_super_invocation takes care of that. */ - compound = java_method_add_stmt (mdecl, build_super_invocation (mdecl)); + java_method_add_stmt (mdecl, build_super_invocation (mdecl)); /* Insert the instance initializer block right here, after the super invocation. */ @@ -8536,13 +8536,17 @@ fix_constructors (mdecl) found = 0; body = NULL_TREE; } + + /* Generate the assignment to this$, if necessary */ + if ((thisn_assign = build_thisn_assign ())) + compound = add_stmt_to_compound (compound, NULL_TREE, thisn_assign); + /* The constructor is missing an invocation of super() */ if (!found) compound = add_stmt_to_compound (compound, NULL_TREE, build_super_invocation (mdecl)); - - /* Explicit super() invokation should be kept as the first - statement, we move it. */ + /* Explicit super() invokation should take place before the + instance initializer blocks. */ else { compound = add_stmt_to_compound (compound, NULL_TREE, @@ -8550,10 +8554,6 @@ fix_constructors (mdecl) TREE_OPERAND (found_call, 0) = empty_stmt_node; } - /* Generate the assignment to this$, if necessary */ - if ((thisn_assign = build_thisn_assign ())) - compound = add_stmt_to_compound (compound, NULL_TREE, thisn_assign); - /* Insert the instance initializer block right after. */ if ((ii = build_instance_initializer (mdecl))) compound = add_stmt_to_compound (compound, NULL_TREE, ii); @@ -10110,7 +10110,7 @@ patch_method_invocation (patch, primary, where, from_super, /* Prepare to pass hidden parameters to finit$, if any. */ finit_parms = build_alias_initializer_parameter_list (AIPL_FUNCTION_FINIT_INVOCATION, current_class, NULL_TREE, NULL); - + finit_call = build_method_invocation (build_wfl_node (finit_identifier_node), finit_parms); @@ -11973,6 +11973,7 @@ maybe_absorb_scoping_blocks () are completing them. */ /* Wrap a non WFL node around a WFL. */ + static tree build_wfl_wrap (node, location) tree node; @@ -11993,7 +11994,6 @@ build_wfl_wrap (node, location) return wfl; } - /* Build a super() constructor invocation. Returns empty_stmt_node if we're currently dealing with the class java.lang.Object. */