1078 {
1079 struct range_list *rl;
1080
1081 get_absolute_rl(switch_expr, &rl);
1082
1083 push_rl(&remaining_cases, rl);
1084 push_stree(&switch_stack, clone_stree(cur_stree));
1085 }
1086
1087 int have_remaining_cases(void)
1088 {
1089 return !!top_rl(remaining_cases);
1090 }
1091
1092 void __merge_switches(struct expression *switch_expr, struct range_list *case_rl)
1093 {
1094 struct stree *stree;
1095 struct stree *implied_stree;
1096
1097 stree = pop_stree(&switch_stack);
1098 implied_stree = __implied_case_stree(switch_expr, case_rl, &remaining_cases, &stree);
1099 merge_stree(&cur_stree, implied_stree);
1100 free_stree(&implied_stree);
1101 push_stree(&switch_stack, stree);
1102 }
1103
1104 void __discard_switches(void)
1105 {
1106 struct stree *stree;
1107
1108 pop_rl(&remaining_cases);
1109 stree = pop_stree(&switch_stack);
1110 free_stree(&stree);
1111 }
1112
1113 void __push_default(void)
1114 {
1115 push_stree(&default_stack, NULL);
1116 }
1117
|
1078 {
1079 struct range_list *rl;
1080
1081 get_absolute_rl(switch_expr, &rl);
1082
1083 push_rl(&remaining_cases, rl);
1084 push_stree(&switch_stack, clone_stree(cur_stree));
1085 }
1086
1087 int have_remaining_cases(void)
1088 {
1089 return !!top_rl(remaining_cases);
1090 }
1091
1092 void __merge_switches(struct expression *switch_expr, struct range_list *case_rl)
1093 {
1094 struct stree *stree;
1095 struct stree *implied_stree;
1096
1097 stree = pop_stree(&switch_stack);
1098 if (!stree) {
1099 /*
1100 * If the cur_stree was NULL before the start of the switch
1101 * statement then we don't want to unnullify it.
1102 *
1103 */
1104 push_stree(&switch_stack, stree);
1105 return;
1106 }
1107 implied_stree = __implied_case_stree(switch_expr, case_rl, &remaining_cases, &stree);
1108 merge_stree(&cur_stree, implied_stree);
1109 free_stree(&implied_stree);
1110 push_stree(&switch_stack, stree);
1111 }
1112
1113 void __discard_switches(void)
1114 {
1115 struct stree *stree;
1116
1117 pop_rl(&remaining_cases);
1118 stree = pop_stree(&switch_stack);
1119 free_stree(&stree);
1120 }
1121
1122 void __push_default(void)
1123 {
1124 push_stree(&default_stack, NULL);
1125 }
1126
|