diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2020-09-19 07:32:35 -0700 |
---|---|---|
committer | Sandra Loosemore <sandra@codesourcery.com> | 2020-09-19 13:54:16 -0700 |
commit | cba079f354a55363916759f6f186f92c5616b98a (patch) | |
tree | a797afe19b592943e8baf602824a39e261a94a5d /gcc/cp/cxx-pretty-print.c | |
parent | f7d2d4be7650acceb9d39327e21ee04f640c152f (diff) | |
download | gcc-cba079f354a55363916759f6f186f92c5616b98a.tar.gz |
Move loop and switch tree data structures from cp/ to c-family/.
This patch moves the definitions for DO_STMT, FOR_STMT, WHILE_STMT,
SWITCH_STMT, BREAK_STMT, and CONTINUE_STMT from the C++ front end to
c-family. This includes the genericizers, pretty-printers, and dump
support as well as the tree definitions and accessors. Some related
code for OMP_FOR and similar OMP constructs is also moved.
2020-08-12 Sandra Loosemore <sandra@codesourcery.com>
gcc/c-family/
* c-common.c (c_block_may_fallthrough): New, split from
cxx_block_may_fallthrough in the cp front end.
(c_common_init_ts): Move handling of loop and switch-related
statements here from the cp front end.
* c-common.def (FOR_STMT, WHILE_STMT, DO_STMT): Move here from
cp front end.
(BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
* c-common.h (c_block_may_fallthru): Declare.
(bc_state_t): Move here from cp front end.
(save_bc_state, restore_bc_state): Declare.
(c_genericize_control_stmt): Declare.
(WHILE_COND, WHILE_BODY): Likewise.
(DO_COND, DO_BODY): Likewise.
(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY, FOR_SCOPE): Likewise.
(SWITCH_STMT_COND, SWITCH_STMT_BODY): Likewise.
(SWITCH_STMT_TYPE, SWITCH_STMT_SCOPE): Likewise.
(SWITCH_STMT_ALL_CASES_P, SWITCH_STMT_NO_BREAK_P): Likewise.
(LABEL_DECL_BREAK, LABEL_DECL_CONTINUE): Likewise.
* c-dump.c (dump_stmt): Copy from cp front end.
(c_dump_tree): Move code to handle structured loop and switch
tree nodes here from cp front end.
* c-gimplify.c: Adjust includes.
(enum bc_t, bc_label, begin_bc_block, finish_bc_block): Move from
cp front end.
(save_bc_state, restore_bc_state): New functions using old code
from cp front end.
(get_bc_label, expr_loc_or_loc): Move from cp front end.
(genericize_c_loop): Move from cp front end.
(genericize_for_stmt, genericize_while_stmt): Likewise.
(genericize_do_stmt, genericize_switch_stmt): Likewise.
(genericize_continue_stmt, genericize_break_stmt): Likewise.
(genericize_omp_for_stmt): Likewise.
(c_genericize_control_stmt): New function using code split from
cp front end.
(c_genericize_control_r): New.
(c_genericize): Call walk_tree with c_genericize_control_r.
* c-pretty-print.c (c_pretty_printer::statement): Move code to handle
structured loop and switch tree nodes here from cp front end.
gcc/cp/
* cp-gimplify.c (enum bc_t, bc_label): Move to c-family.
(begin_bc_block, finish_bc_block, get_bc_label): Likewise.
(genericize_cp_loop): Likewise.
(genericize_for_stmt, genericize_while_stmt): Likewise.
(genericize_do_stmt, genericize_switch_stmt): Likewise.
(genericize_continue_stmt, genericize_break_stmt): Likewise.
(genericize_omp_for_stmt): Likewise.
(cp_genericize_r): Call c_genericize_control_stmt instead of
above functions directly.
(cp_genericize): Call save_bc_state and restore_bc_state instead
of manipulating bc_label directly.
* cp-objcp-common.c (cxx_block_may_fallthru): Defer to
c_block_may_fallthru instead of handling SWITCH_STMT here.
(cp_common_init_ts): Move handling of loop and switch-related
statements to c-family.
* cp-tree.def (FOR_STMT, WHILE_STMT, DO_STMT): Move to c-family.
(BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
* cp-tree.h (LABEL_DECL_BREAK, LABEL_DECL_CONTINUE): Likewise.
(WHILE_COND, WHILE_BODY): Likewise.
(DO_COND, DO_BODY): Likewise.
(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY, FOR_SCOPE): Likewise.
(SWITCH_STMT_COND, SWITCH_STMT_BODY): Likewise.
(SWITCH_STMT_TYPE, SWITCH_STMT_SCOPE): Likewise.
(SWITCH_STMT_ALL_CASES_P, SWITCH_STMT_NO_BREAK_P): Likewise.
* cxx-pretty-print.c (cxx_pretty_printer::statement): Move code
to handle structured loop and switch tree nodes to c-family.
* dump.c (cp_dump_tree): Likewise.
gcc/
* doc/generic.texi (Basic Statements): Document SWITCH_EXPR here,
not SWITCH_STMT.
(Statements for C and C++): Rename node to reflect what
the introduction already says about sharing between C and C++
front ends. Copy-edit and correct documentation for structured
loops and switch.
Diffstat (limited to 'gcc/cp/cxx-pretty-print.c')
-rw-r--r-- | gcc/cp/cxx-pretty-print.c | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 263f225a492..d10c18db039 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -2019,73 +2019,6 @@ cxx_pretty_printer::statement (tree t) } break; - case SWITCH_STMT: - pp_cxx_ws_string (this, "switch"); - pp_space (this); - pp_cxx_left_paren (this); - expression (SWITCH_STMT_COND (t)); - pp_cxx_right_paren (this); - pp_indentation (this) += 3; - pp_needs_newline (this) = true; - statement (SWITCH_STMT_BODY (t)); - pp_newline_and_indent (this, -3); - break; - - /* iteration-statement: - while ( expression ) statement - do statement while ( expression ) ; - for ( expression(opt) ; expression(opt) ; expression(opt) ) statement - for ( declaration expression(opt) ; expression(opt) ) statement */ - case WHILE_STMT: - pp_cxx_ws_string (this, "while"); - pp_space (this); - pp_cxx_left_paren (this); - expression (WHILE_COND (t)); - pp_cxx_right_paren (this); - pp_newline_and_indent (this, 3); - statement (WHILE_BODY (t)); - pp_indentation (this) -= 3; - pp_needs_newline (this) = true; - break; - - case DO_STMT: - pp_cxx_ws_string (this, "do"); - pp_newline_and_indent (this, 3); - statement (DO_BODY (t)); - pp_newline_and_indent (this, -3); - pp_cxx_ws_string (this, "while"); - pp_space (this); - pp_cxx_left_paren (this); - expression (DO_COND (t)); - pp_cxx_right_paren (this); - pp_cxx_semicolon (this); - pp_needs_newline (this) = true; - break; - - case FOR_STMT: - pp_cxx_ws_string (this, "for"); - pp_space (this); - pp_cxx_left_paren (this); - if (FOR_INIT_STMT (t)) - statement (FOR_INIT_STMT (t)); - else - pp_cxx_semicolon (this); - pp_needs_newline (this) = false; - pp_cxx_whitespace (this); - if (FOR_COND (t)) - expression (FOR_COND (t)); - pp_cxx_semicolon (this); - pp_needs_newline (this) = false; - pp_cxx_whitespace (this); - if (FOR_EXPR (t)) - expression (FOR_EXPR (t)); - pp_cxx_right_paren (this); - pp_newline_and_indent (this, 3); - statement (FOR_BODY (t)); - pp_indentation (this) -= 3; - pp_needs_newline (this) = true; - break; - case RANGE_FOR_STMT: pp_cxx_ws_string (this, "for"); pp_space (this); @@ -2109,17 +2042,6 @@ cxx_pretty_printer::statement (tree t) pp_needs_newline (this) = true; break; - /* jump-statement: - goto identifier; - continue ; - return expression(opt) ; */ - case BREAK_STMT: - case CONTINUE_STMT: - pp_string (this, TREE_CODE (t) == BREAK_STMT ? "break" : "continue"); - pp_cxx_semicolon (this); - pp_needs_newline (this) = true; - break; - /* expression-statement: expression(opt) ; */ case EXPR_STMT: |