diff --git a/src/mad_exec.c b/src/mad_exec.c index 5caac7725..c6ba5f912 100644 --- a/src/mad_exec.c +++ b/src/mad_exec.c @@ -3,21 +3,11 @@ static void exec_delete_sequ(const char* name) { - struct sequence* keep = current_sequ; - int spos; - if ((spos = name_list_pos(name, sequences->list)) >= 0) { - current_sequ = sequences->sequs[spos]; - if (current_sequ->ex_start != NULL) { /* delete expanded */ - current_sequ->ex_nodes = delete_node_list(current_sequ->ex_nodes); - current_sequ->ex_start = delete_node_ring(current_sequ->ex_start); - current_sequ->orbits = delete_vector_list(current_sequ->orbits); - } - sequences->sequs[spos] = delete_sequence(current_sequ); - remove_from_sequ_list(current_sequ, sequences); - current_sequ = keep; + struct sequence* sequ = find_sequence(name, sequences); + if (sequ) { + delete_sequence(sequ); } else warning("sequence to be deleted does not exist:", name); - return; } void diff --git a/src/mad_seq.c b/src/mad_seq.c index fc1834121..1854a7860 100644 --- a/src/mad_seq.c +++ b/src/mad_seq.c @@ -618,7 +618,6 @@ make_sequ_from_line(char* name) { char** tmp = NULL; int pos = name_list_pos(name, line_list->list); - struct sequence* old_sequ = NULL; struct macro* line; int mpos = name_list_pos("marker", defined_commands->list); struct command* clone = clone_command(defined_commands->commands[mpos]); @@ -632,9 +631,8 @@ make_sequ_from_line(char* name) expand_line(line_buffer); /* act on '-' and rep. count */ current_sequ = new_sequence(name, 0); /* node positions = centre */ - old_sequ = find_sequence(name, sequences); + delete_sequence(find_sequence(name, sequences)); add_to_sequ_list(current_sequ, sequences); - if (old_sequ) old_sequ = delete_sequence(old_sequ); if (current_sequ->cavities != NULL) current_sequ->cavities->curr = 0; else current_sequ->cavities = new_el_list(100); if (occ_list == NULL) @@ -1487,11 +1485,11 @@ new_sequ_node(struct sequence* sequ, int occ_cnt) return p; } -struct sequence* +void delete_sequence(struct sequence* sequ) { const char *rout_name = "delete_sequence"; - struct sequence* seq; + if (!sequ) return; if (sequ->ex_start != NULL) { sequ->ex_nodes = delete_node_list(sequ->ex_nodes); @@ -1499,14 +1497,13 @@ delete_sequence(struct sequence* sequ) sequ->orbits = delete_vector_list(sequ->orbits); myfree(rout_name, sequ->all_nodes); } - if ((seq = find_sequence(sequ->name, sequences))) - remove_from_sequ_list(seq, sequences); + if (sequ == find_sequence(sequ->name, sequences)) + remove_from_sequ_list(sequ, sequences); if (sequ->l_expr) sequ->l_expr = delete_expression(sequ->l_expr); sequ->nodes = delete_node_list(sequ->nodes); sequ->start = delete_node_ring(sequ->start); if (sequ->cavities) sequ->cavities = delete_el_list(sequ->cavities); myfree(rout_name, sequ); - return NULL; } void @@ -1568,12 +1565,7 @@ enter_sequence(struct in_cmd* cmd) } } - if ((pos = name_list_pos(toks[aux_pos], sequences->list)) >= 0) { - // sequence exists already; delete the old one - /*printf("enter_sequence: removing %s\n", sequences->sequs[pos]->name);*/ - remove_from_sequ_list(sequences->sequs[pos], sequences); - sequences->sequs[pos] = delete_sequence(sequences->sequs[pos]); - } + delete_sequence(find_sequence(toks[aux_pos], sequences)); current_sequ = new_sequence(toks[aux_pos], k); add_to_sequ_list(current_sequ, sequences); diff --git a/src/mad_seq.h b/src/mad_seq.h index e4b59822b..d87270fb8 100644 --- a/src/mad_seq.h +++ b/src/mad_seq.h @@ -68,7 +68,7 @@ struct sequence_list /* contains list of sequence pointers sorted by name */ struct node* new_sequ_node(struct sequence*, int occ_cnt); struct sequence* new_sequence(const char* name, int ref); -struct sequence* delete_sequence(struct sequence*); +void delete_sequence(struct sequence*); struct sequence_list* new_sequence_list(int length); struct sequence* find_sequence(const char* name, struct sequence_list*);