aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/objc/objc-act.c8
-rw-r--r--gcc/tree.c12
-rw-r--r--gcc/tree.h1
4 files changed, 23 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b4b1065..4ec04bf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-05-20 Jason Merrill <jason@redhat.com>
+
+ * tree.c (expr_last): New fn.
+ * tree.h: Declare it.
+ * objc/objc-act (expr_last): Rename to objc_expr_last.
+
2003-05-20 J"orn Rennecke <joern.rennecke@superh.com>
* sh.c (sh_register_move_cost): Add clase for moving between
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 0625958..e0670e5 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -217,7 +217,7 @@ static void really_start_method PARAMS ((tree, tree));
static int comp_method_with_proto PARAMS ((tree, tree));
static int comp_proto_with_proto PARAMS ((tree, tree));
static tree get_arg_type_list PARAMS ((tree, int, int));
-static tree expr_last PARAMS ((tree));
+static tree objc_expr_last PARAMS ((tree));
/* Utilities for debugging and error diagnostics. */
@@ -6998,7 +6998,7 @@ encode_field_decl (field_decl, curtype, format)
}
static tree
-expr_last (complex_expr)
+objc_expr_last (complex_expr)
tree complex_expr;
{
tree next;
@@ -7059,7 +7059,7 @@ start_method_def (method)
if (arg_decl)
{
- tree last_expr = expr_last (arg_decl);
+ tree last_expr = objc_expr_last (arg_decl);
/* Unite the abstract decl with its name. */
TREE_OPERAND (last_expr, 0) = KEYWORD_ARG_NAME (arglist);
@@ -7195,7 +7195,7 @@ really_start_method (method, parmlist)
{
/* Unite the complex decl (specified in the abstract decl) with the
function decl just synthesized..(int *), (int (*)()), (int (*)[]). */
- tree save_expr = expr_last (ret_decl);
+ tree save_expr = objc_expr_last (ret_decl);
TREE_OPERAND (save_expr, 0) = method_decl;
method_decl = ret_decl;
diff --git a/gcc/tree.c b/gcc/tree.c
index 3271a5b..efb4e22 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1123,6 +1123,18 @@ tree_cons (purpose, value, chain)
return node;
}
+/* Return the last expression in a sequence of COMPOUND_EXPRs. */
+
+tree
+expr_last (expr)
+ tree expr;
+{
+ if (expr == NULL_TREE)
+ return expr;
+ while (TREE_CODE (expr) == COMPOUND_EXPR)
+ expr = TREE_OPERAND (expr, 1);
+ return expr;
+}
/* Return the size nominally occupied by an object of type TYPE
when it resides in memory. The value is measured in units of bytes,
diff --git a/gcc/tree.h b/gcc/tree.h
index 9b18558..47562b2 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2532,6 +2532,7 @@ extern tree pedantic_non_lvalue PARAMS ((tree));
extern tree convert PARAMS ((tree, tree));
extern unsigned int expr_align PARAMS ((tree));
+extern tree expr_last PARAMS ((tree));
extern tree size_in_bytes PARAMS ((tree));
extern HOST_WIDE_INT int_size_in_bytes PARAMS ((tree));
extern tree bit_position PARAMS ((tree));