diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-08-25 22:07:18 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-08-25 22:07:18 +0000 |
commit | f1dedc319f5cd88b32fb105ebe73e92283e6ba3a (patch) | |
tree | 234c56a0c0ad379c6bc647768852d1e963623dff /gcc/cp/cp-tree.h | |
parent | 1d0e51ba333e93a4166ebf5a9eda333b5ca647f3 (diff) | |
download | gcc-f1dedc319f5cd88b32fb105ebe73e92283e6ba3a.zip gcc-f1dedc319f5cd88b32fb105ebe73e92283e6ba3a.tar.gz gcc-f1dedc319f5cd88b32fb105ebe73e92283e6ba3a.tar.bz2 |
cp-tree.def (SUBOBJECT): New tree node.
* cp-tree.def (SUBOBJECT): New tree node.
* cp-tree.h (CLEANUP_P): New macro.
(SUBOBJECT_CLEANUP): Likewise.
(keep_next_level): Add parameter.
(get_temp_regvar): Don't declare.
(emit_base_init): Remove parameter.
(expand_aggr_init): Rename to build_aggr_init.
(expand_vec_init): Rename to build_vec_init.
(do_pushlevel): Remove.
(do_poplevel): Likewise.
(finish_cleanup): New function.
(finish_subobject): Likewise.
(stmts_are_full_exprs_p): New variable.
* decl.c (keep_next_level): Add parameter.
(cp_finish_decl): Use build_aggr_init, not
expand_aggr_init. Use finish_expr_stmt to expand the code.
(expand_static_init): Use tree-generating, not RTL-generating,
functions to handle the initialization.
(start_function): Remove dead code. Always have a momentary
obstack inside the function, even before hitting the first curly
brace.
(cplus_expand_expr_stmt): Move calls to
expand_{start,end}_target_temps into semantics.c.
(cp_function): Add stmts_are_full_exprs_p.
(push_cp_function_context): Save it.
(pop_cp_function_context): Restore it.
* decl2.c (get_temp_regvar): Move to init.c.
(do_static_initialization): Use build_{aggr,vec}_init.
(do_static_destruction): Fix typo in comment.
* dump.c (dequeue_and_dump): Handle INIT_EXPR.
* except.c (expand_throw): Use create_temporary_var.
* expr.c (cplus_expand_expr): Use build_{aggr,vec}_init.
* init.c (expand_vec_init_try_block): Remove.
(expand_vec_init_catch_clause): Likewise.
(get_temp_regvar): New function.
(begin_init_stmts): Likewise.
(finish_init_stmts): Likewise.
(perform_member_init): Use build_{aggr,vec}_init. Build up tree
structure here.
(emit_base_init): Likewise. Remove unused parameter.
(expand_virtual_init): Likewise.
(expand_cleanup_for_base): Use finish_subobject.
(expand_aggr_vbase_init_1): Simplify.
(construct_virtual_bases): Use tree-generating functions to build
up initialization.
(expand_aggr_init): Likewise. Rename to build_aggr_init.
(expand_default_init): Likewise.
(expand_aggr_init_1): Likewise.
(expand_vec_init): Rename to build_vec_init.
* method.c (do_build_copy_constructor): Use tree-generating
functions. Don't call clear_last_expr.
(do_build_assign_ref): Likewise.
(synthesize_method): Call clear_last_expr here.
* parse.y (base_init): Don't call clear_last_expr here.
(nodecls): Likewise.
* pt.c (tsubst_expr): Handle a TRY_BLOCK with CLEANUP_P set.
* semantics.c (do_pushlevel): Move to here.
(do_poplevel): Likewise.
(stmts_are_full_exprs_p): New variable.
(finish_expr_stmt): Handle logic for temoprary cleanup here.
(finish_for_stmt): Use finish_expr_stmt.
(finish_cleanup): New function.
(finish_function_try_block): Fix indentation.
(finish_subobject): New function.
(setup_vtbl_ptr): Call keep_next_level here.
(finish_stmt_expr): Handle a block with no scope inside the
statement-expression.
(expand_stmt): Handle a TRY_BLOCK with CLEANUP_P set. Handle
SUBOBJECT.
* tree.c (search_tree): Handle INIT_EXPR.
(mapcar): Likewise.
* typeck.c (build_modify_expr): Don't build an RTL_EXPR.
* typeck2.c (store_init_value): Change expand_aggr_init to
build_aggr_init in comment.
From-SVN: r28878
Diffstat (limited to 'gcc/cp/cp-tree.h')
-rw-r--r-- | gcc/cp/cp-tree.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 8242639..13f1e7d 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -35,6 +35,7 @@ Boston, MA 02111-1307, USA. */ IDENTIFIER_MARKED (used by search routines). LOCAL_BINDING_P (in CPLUS_BINDING) ICS_USER_FLAG (in _CONV) + CLEANUP_P (in TRY_BLOCK) 1: IDENTIFIER_VIRTUAL_P. TI_PENDING_TEMPLATE_FLAG. TEMPLATE_PARMS_FOR_INLINE. @@ -2141,6 +2142,7 @@ extern int flag_new_for_scope; #define GOTO_DESTINATION(NODE) TREE_OPERAND (NODE, 0) #define TRY_STMTS(NODE) TREE_OPERAND (NODE, 0) #define TRY_HANDLERS(NODE) TREE_OPERAND (NODE, 1) +#define CLEANUP_P(NODE) TREE_LANG_FLAG_0 (NODE) #define HANDLER_PARMS(NODE) TREE_OPERAND (NODE, 0) #define HANDLER_BODY(NODE) TREE_OPERAND (NODE, 1) #define COMPOUND_BODY(NODE) TREE_OPERAND (NODE, 0) @@ -2151,6 +2153,7 @@ extern int flag_new_for_scope; #define ASM_CLOBBERS(NODE) TREE_OPERAND (NODE, 4) #define DECL_STMT_DECL(NODE) TREE_OPERAND (NODE, 0) #define STMT_EXPR_STMT(NODE) TREE_OPERAND (NODE, 0) +#define SUBOBJECT_CLEANUP(NODE) TREE_OPERAND (NODE, 0) /* Nonzero for an ASM_STMT if the assembly statement is volatile. */ #define ASM_VOLATILE_P(NODE) \ @@ -2841,7 +2844,7 @@ extern void set_identifier_local_value PROTO((tree, tree)); extern int global_bindings_p PROTO((void)); extern int toplevel_bindings_p PROTO((void)); extern int namespace_bindings_p PROTO((void)); -extern void keep_next_level PROTO((void)); +extern void keep_next_level PROTO((int)); extern int kept_level_p PROTO((void)); extern void declare_parm_level PROTO((void)); extern void declare_pseudo_global_level PROTO((void)); @@ -3009,7 +3012,6 @@ extern void setup_vtbl_ptr PROTO((void)); extern void mark_inline_for_output PROTO((tree)); extern void clear_temp_name PROTO((void)); extern tree get_temp_name PROTO((tree, int)); -extern tree get_temp_regvar PROTO((tree, tree)); extern void finish_anon_union PROTO((tree)); extern tree finish_table PROTO((tree, tree, tree, int)); extern void finish_builtin_type PROTO((tree, const char *, @@ -3105,10 +3107,10 @@ extern tree do_friend PROTO((tree, tree, tree, tree, tree, enum overload_flag /* in init.c */ extern void init_init_processing PROTO((void)); extern void expand_direct_vtbls_init PROTO((tree, tree, int, int, tree)); -extern void emit_base_init PROTO((tree, int)); +extern void emit_base_init PROTO((tree)); extern void check_base_init PROTO((tree)); extern void expand_member_init PROTO((tree, tree, tree)); -extern void expand_aggr_init PROTO((tree, tree, int)); +extern tree build_aggr_init PROTO((tree, tree, int)); extern int is_aggr_typedef PROTO((tree, int)); extern int is_aggr_type PROTO((tree, int)); extern tree get_aggr_from_typedef PROTO((tree, int)); @@ -3119,11 +3121,12 @@ extern tree resolve_offset_ref PROTO((tree)); extern tree decl_constant_value PROTO((tree)); extern tree build_new PROTO((tree, tree, tree, int)); extern tree build_new_1 PROTO((tree)); -extern tree expand_vec_init PROTO((tree, tree, tree, tree, int)); +extern tree build_vec_init PROTO((tree, tree, tree, tree, int)); extern tree build_x_delete PROTO((tree, int, tree)); extern tree build_delete PROTO((tree, tree, tree, int, int)); extern tree build_vbase_delete PROTO((tree, tree)); extern tree build_vec_delete PROTO((tree, tree, tree, tree, int)); +extern tree create_temporary_var PROTO((tree)); /* in input.c */ @@ -3234,7 +3237,6 @@ extern void mark_class_instantiated PROTO((tree, int)); extern void do_decl_instantiation PROTO((tree, tree, tree)); extern void do_type_instantiation PROTO((tree, tree)); extern tree instantiate_decl PROTO((tree)); -extern tree do_poplevel PROTO((void)); extern tree get_bindings PROTO((tree, tree, tree)); extern void add_tree PROTO((tree)); extern void begin_tree PROTO((void)); @@ -3242,7 +3244,6 @@ extern void end_tree PROTO((void)); extern void add_maybe_template PROTO((tree, tree)); extern void pop_tinst_level PROTO((void)); extern int more_specialized_class PROTO((tree, tree)); -extern void do_pushlevel PROTO((void)); extern int is_member_template PROTO((tree)); extern int template_parms_equal PROTO((tree, tree)); extern int comp_template_parms PROTO((tree, tree)); @@ -3349,10 +3350,12 @@ extern void finish_function_handler_sequence PROTO((tree)); extern tree begin_handler PROTO((void)); extern void finish_handler_parms PROTO((tree)); extern void finish_handler PROTO((tree)); +extern void finish_cleanup PROTO((tree, tree)); extern tree begin_compound_stmt PROTO((int)); extern tree finish_compound_stmt PROTO((int, tree)); extern void finish_asm_stmt PROTO((tree, tree, tree, tree, tree)); extern void finish_label_stmt PROTO((tree)); +extern void finish_subobject PROTO((tree)); extern tree finish_parenthesized_expr PROTO((tree)); extern tree begin_stmt_expr PROTO((void)); extern tree finish_stmt_expr PROTO((tree, tree)); @@ -3395,6 +3398,7 @@ extern void expand_body PROTO((tree)); extern void begin_stmt_tree PROTO((tree)); extern void finish_stmt_tree PROTO((tree)); extern int expanding_p; +extern int stmts_are_full_exprs_p; extern tree last_expr_type; /* Non-zero if we are presently building a statement tree, rather than expanding each statement as we encounter it. */ |