diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 7c00271f021..e06e9573cc0 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +1999-03-16 Alexandre Petit-Bianco + + * parse.y (java_stabilize_reference): Use save_expr instead of + building a SAVE_EXPR node. + (java_complete_lhs): Patch the resulting string of the `+=' + operator (if necessary) and complete the RHS after having built + the cast. + Mon Mar 15 12:18:29 1999 Per Bothner * class.c (make_class): Don't set CLASS_P here (because diff --git a/gcc/java/parse.c b/gcc/java/parse.c index 63e666202ac..f090ca515f5 100644 --- a/gcc/java/parse.c +++ b/gcc/java/parse.c @@ -10122,7 +10122,7 @@ java_stabilize_reference (node) { tree op0 = TREE_OPERAND (node, 0); tree op1 = TREE_OPERAND (node, 1); - TREE_OPERAND (node, 0) = build1 (SAVE_EXPR, TREE_TYPE (op0), op0); + TREE_OPERAND (node, 0) = save_expr (op0); TREE_OPERAND (node, 1) = java_stabilize_reference (op1); return node; } @@ -10537,9 +10537,13 @@ java_complete_lhs (node) /* Now complete the RHS. We write it back later on. */ nn = java_complete_tree (TREE_OPERAND (node, 1)); + if ((cn = patch_string (nn))) + nn = cn; + /* The last part of the rewrite for E1 op= E2 is to have E1 = (T)(E1 op E2), with T being the type of E1. */ - nn = build_cast (EXPR_WFL_LINECOL (wfl_op2), TREE_TYPE (lvalue), nn); + nn = java_complete_tree (build_cast (EXPR_WFL_LINECOL (wfl_op2), + TREE_TYPE (lvalue), nn)); } /* If we're about to patch a NEW_ARRAY_INIT, we call a special @@ -11986,7 +11990,6 @@ build_string_concatenation (op1, op2) { tree result; int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2); - /* Try to do some static optimization */ if ((result = string_constant_concatenation (op1, op2))) diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 75ffbc3cc61..3e5bd74e9f0 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -7520,7 +7520,7 @@ java_stabilize_reference (node) { tree op0 = TREE_OPERAND (node, 0); tree op1 = TREE_OPERAND (node, 1); - TREE_OPERAND (node, 0) = build1 (SAVE_EXPR, TREE_TYPE (op0), op0); + TREE_OPERAND (node, 0) = save_expr (op0); TREE_OPERAND (node, 1) = java_stabilize_reference (op1); return node; } @@ -7935,9 +7935,13 @@ java_complete_lhs (node) /* Now complete the RHS. We write it back later on. */ nn = java_complete_tree (TREE_OPERAND (node, 1)); + if ((cn = patch_string (nn))) + nn = cn; + /* The last part of the rewrite for E1 op= E2 is to have E1 = (T)(E1 op E2), with T being the type of E1. */ - nn = build_cast (EXPR_WFL_LINECOL (wfl_op2), TREE_TYPE (lvalue), nn); + nn = java_complete_tree (build_cast (EXPR_WFL_LINECOL (wfl_op2), + TREE_TYPE (lvalue), nn)); } /* If we're about to patch a NEW_ARRAY_INIT, we call a special @@ -9384,7 +9388,6 @@ build_string_concatenation (op1, op2) { tree result; int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2); - /* Try to do some static optimization */ if ((result = string_constant_concatenation (op1, op2)))