+2004-06-16 Richard Henderson <rth@redhat.com>
+
+ * c-common.h (c_begin_if_stmt, c_begin_while_stmt,
+ c_finish_while_stmt_cond): Remove decls.
+ * c-parse.in (if_prefix): Don't save c_begin_if_stmt result.
+ * c-typeck.c (c_begin_if_stmt): Return void.
+ (c_begin_else): Tidy. Save stmt_count.
+ * c-tree.h (c_begin_if_stmt): Update decl.
+
+ * objc/objc-act.c (objc_build_try_enter_fragment,
+ objc_build_extract_fragment, objc_build_try_epilogue,
+ objc_build_catch_stmt, objc_build_catch_epilogue,
+ objc_build_finally_prologue, objc_build_finally_epilogue): Update
+ for if builder function changes.
+
2004-06-16 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.c (struct machine_function): New member
/* Begin an if-statement. Returns a newly created IF_STMT if
appropriate. */
-tree
+void
c_begin_if_stmt (void)
{
tree r;
void
c_begin_else (int stmt_count)
{
+ if_elt *elt = &if_stack[if_stack_pointer - 1];
+
/* An ambiguous else warning must be generated for the enclosing if
statement, unless we see an else branch for that one, too. */
if (warn_parentheses
&& if_stack_pointer > 1
- && (if_stack[if_stack_pointer - 1].compstmt_count
- == if_stack[if_stack_pointer - 2].compstmt_count))
- if_stack[if_stack_pointer - 2].needs_warning = 1;
+ && (elt[0].compstmt_count == elt[-1].compstmt_count))
+ elt[-1].needs_warning = 1;
/* Even if a nested if statement had an else branch, it can't be
ambiguous if this one also has an else. So don't warn in that
case. Also don't warn for any if statements nested in this else. */
- if_stack[if_stack_pointer - 1].needs_warning = 0;
- if_stack[if_stack_pointer - 1].compstmt_count--;
- if_stack[if_stack_pointer - 1].saw_else = 1;
+ elt->needs_warning = 0;
+ elt->compstmt_count--;
+ elt->saw_else = 1;
+ elt->stmt_count = stmt_count;
}
/* Called after the else-clause for an if-statement is processed. */
/* objc_exception_try_enter(&_stackExceptionData);
if (!_setjmp(&_stackExceptionData.buf)) { */
- tree func_params, if_stmt, cond;
+ tree func_params, cond;
func_params
= tree_cons (NULL_TREE,
#error
#endif
- if_stmt = c_begin_if_stmt ();
+ c_begin_if_stmt ();
if_nesting_count++;
/* If <setjmp.h> has been included, the _setjmp prototype has
acquired a real, breathing type for its parameter. Cast our
cond = build_unary_op (TRUTH_NOT_EXPR,
build_function_call (objc_setjmp_decl, func_params),
0);
- c_expand_start_cond (lang_hooks.truthvalue_conversion (cond), 0, if_stmt);
+ c_finish_if_cond (cond, 0, 0);
objc_enter_block ();
}
c_finish_then (objc_exit_block ());
- c_expand_start_else ();
+ c_begin_else (0);
objc_enter_block ();
c_expand_expr_stmt (build_modify_expr
(TREE_VALUE (objc_rethrow_exception),
NOP_EXPR,
objc_build_extract_expr ()));
c_finish_else (objc_exit_block ());
- c_expand_end_cond ();
+ c_finish_if_stmt (1);
if_nesting_count--;
}
if(!_setjmp(&_stackExceptionData.buf)) {
if (0) { */
- tree if_stmt;
-
c_finish_then (objc_exit_block ());
- c_expand_start_else ();
+ c_begin_else (0);
objc_enter_block ();
objc_caught_exception
= tree_cons (NULL_TREE,
objc_caught_exception);
objc_build_try_enter_fragment ();
val_stack_push (&catch_count_stack, 1);
- if_stmt = c_begin_if_stmt ();
+ c_begin_if_stmt ();
if_nesting_count++;
- c_expand_start_cond (lang_hooks.truthvalue_conversion (boolean_false_node),
- 0, if_stmt);
+ c_finish_if_cond (boolean_false_node, 0, 0);
objc_enter_block ();
/* Start a new chain of @catch statements for this @try. */
/* } else if (objc_exception_match(objc_get_class("SomeClass"), _caughtException)) {
register SomeClass *e = _caughtException; */
- tree if_stmt, cond, func_params, prev_catch, var_name, var_type;
+ tree cond, func_params, prev_catch, var_name, var_type;
int catch_id;
#ifndef OBJCPLUS
c_finish_then (objc_exit_block ());
- c_expand_start_else ();
+ c_begin_else (0);
catch_count_stack->val++;
- if_stmt = c_begin_if_stmt ();
+ c_begin_if_stmt ();
if_nesting_count++;
if (catch_id)
cond = build_function_call (objc_exception_match_decl, func_params);
}
- c_expand_start_cond (lang_hooks.truthvalue_conversion (cond), 0, if_stmt);
+ c_finish_if_cond (cond, 0, 0);
objc_enter_block ();
objc_declare_variable (RID_REGISTER, var_name,
build_pointer_type (var_type),
c_finish_then (objc_exit_block ());
- c_expand_start_else ();
+ c_begin_else (0);
objc_enter_block ();
c_expand_expr_stmt
(build_modify_expr
{
/* FIXME. Need to have the block of each else that was opened. */
c_finish_else ((abort (), NULL)); /* close off all the nested ifs ! */
- c_expand_end_cond ();
+ c_finish_if_stmt (1);
if_nesting_count--;
}
val_stack_pop (&catch_count_stack);
objc_build_extract_fragment ();
c_finish_else (objc_exit_block ());
- c_expand_end_cond ();
+ c_finish_if_stmt (1);
if_nesting_count--;
objc_exit_block ();
tree blk = objc_enter_block ();
- tree if_stmt = c_begin_if_stmt ();
+ c_begin_if_stmt ();
if_nesting_count++;
- c_expand_start_cond (lang_hooks.truthvalue_conversion
- (build_unary_op (TRUTH_NOT_EXPR,
- TREE_VALUE (objc_rethrow_exception),
- 0)),
- 0, if_stmt);
+ c_finish_if_cond (build_unary_op (TRUTH_NOT_EXPR,
+ TREE_VALUE (objc_rethrow_exception), 0),
+ 0, 0);
objc_enter_block ();
objc_build_try_exit_fragment ();
c_finish_then (objc_exit_block ());
- c_expand_end_cond ();
+ c_finish_if_stmt (1);
if_nesting_count--;
return blk;
} // end FINALLY scope
} */
- tree if_stmt = c_begin_if_stmt ();
+ c_begin_if_stmt ();
if_nesting_count++;
- c_expand_start_cond
- (lang_hooks.truthvalue_conversion (TREE_VALUE (objc_rethrow_exception)),
- 0, if_stmt);
+ c_finish_if_cond (TREE_VALUE (objc_rethrow_exception), 0, 0);
objc_enter_block ();
objc_build_throw_stmt (TREE_VALUE (objc_rethrow_exception));
c_finish_then (objc_exit_block ());
- c_expand_end_cond ();
+ c_finish_if_stmt (1);
if_nesting_count--;
objc_exit_block ();