From ab7984c82fe94c768de502635486e4933e0e066f Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 26 Nov 2015 17:10:50 +1100 Subject: [PATCH] Remove doc arg from mark_to_mark. It isn't really neded. We can easily remove doc from doc_next_mark_all() as it isn't used. We can also have a version of doc_prev_mark_all() that only gets called when we *know* there is a previos mark, as we do ni mark_to_mark. Signed-off-by: NeilBrown --- core-doc.c | 4 ++-- core-mark.c | 16 +++++++++++----- core.h | 7 ++++--- doc-dir.c | 4 ++-- doc-text.c | 32 ++++++++++++++++---------------- render-complete.c | 6 ++---- 6 files changed, 37 insertions(+), 32 deletions(-) diff --git a/core-doc.c b/core-doc.c index 84084d8d..41a7bff2 100644 --- a/core-doc.c +++ b/core-doc.c @@ -765,7 +765,7 @@ static void docs_release(struct doc *d) for (m = doc_first_mark_all(ed->docs); m; - m = doc_next_mark_all(ed->docs, m)) + m = doc_next_mark_all(m)) if (m->ref.p == d->home) { mark_step2(ed->docs, m, 1, 1); doc_notify_change(ed->docs, m); @@ -786,7 +786,7 @@ static void docs_attach(struct doc *d) return; for (m = doc_first_mark_all(ed->docs); m; - m = doc_next_mark_all(ed->docs, m)) + m = doc_next_mark_all(m)) if (p->siblings.next == &m->ref.p->siblings) { mark_step2(ed->docs, m, 0, 1); doc_notify_change(ed->docs, m); diff --git a/core-mark.c b/core-mark.c index 82298ac4..e12928ac 100644 --- a/core-mark.c +++ b/core-mark.c @@ -364,20 +364,26 @@ struct mark *doc_first_mark_all(struct doc *d) return NULL; } -struct mark *doc_next_mark_all(struct doc *d, struct mark *m) +struct mark *doc_next_mark_all(struct mark *m) { if (m->all.next) return hlist_next_entry(m, all); return NULL; } -struct mark *doc_prev_mark_all(struct doc *d, struct mark *m) +struct mark *doc_prev_mark_all_safe(struct doc *d, struct mark *m) { if (d->marks.first != &m->all) return hlist_prev_entry(m, all); return NULL; } +struct mark *doc_prev_mark_all(struct mark *m) +{ + /* Must never be called on first mark */ + return hlist_prev_entry(m, all); +} + struct mark *doc_new_mark(struct doc *d, int view) { @@ -681,7 +687,7 @@ void point_to_mark(struct point *p, struct mark *m) p->m.rpos = m->rpos; } -void mark_to_mark(struct doc *d, struct mark *m, struct mark *target) +void mark_to_mark(struct mark *m, struct mark *target) { if (m->viewnum == MARK_POINT) { @@ -690,11 +696,11 @@ void mark_to_mark(struct doc *d, struct mark *m, struct mark *target) return; } while (mark_ordered(m, target)) { - struct mark *n = doc_next_mark_all(d, m); + struct mark *n = doc_next_mark_all(m); mark_forward_over(m, n); } while (mark_ordered(target, m)) { - struct mark *n = doc_prev_mark_all(d, m); + struct mark *n = doc_prev_mark_all(m); mark_backward_over(m, n); } m->ref = target->ref; diff --git a/core.h b/core.h index a6b8f5a5..2974754b 100644 --- a/core.h +++ b/core.h @@ -146,8 +146,9 @@ struct mark *mark_dup(struct mark *m, int notype); void mark_free(struct mark *m); struct mark *doc_new_mark(struct doc *d, int view); struct mark *doc_first_mark_all(struct doc *d); -struct mark *doc_next_mark_all(struct doc *d, struct mark *m); -struct mark *doc_prev_mark_all(struct doc *d, struct mark *m); +struct mark *doc_next_mark_all(struct mark *m); +struct mark *doc_prev_mark_all(struct mark *m); +struct mark *doc_prev_mark_all_safe(struct doc *d, struct mark *m); struct mark *doc_first_mark(struct doc *d, int viewnum); struct mark *doc_next_mark(struct doc *d, struct mark *m); struct mark *doc_prev_mark(struct doc *d, struct mark *m); @@ -160,7 +161,7 @@ void point_notify_change(struct point *p, struct mark *m); void doc_notify_change(struct doc *d, struct mark *m); void doc_check_consistent(struct doc *d); void point_to_mark(struct point *p, struct mark *m); -void mark_to_mark(struct doc *d, struct mark *m, struct mark *target); +void mark_to_mark(struct mark *m, struct mark *target); int mark_same(struct doc *d, struct mark *m1, struct mark *m2); int mark_same2(struct doc *d, struct mark *m1, struct mark *m2, struct cmd_info *ci); int mark_same_pane(struct pane *p, struct mark *m1, struct mark *m2, diff --git a/doc-dir.c b/doc-dir.c index 21cee9d8..4a694286 100644 --- a/doc-dir.c +++ b/doc-dir.c @@ -175,7 +175,7 @@ DEF_CMD(dir_load_file) else de1 = list_next_entry(de1, lst); for (m2 = m; m2 && m2->ref.d == de; - m2 = doc_next_mark_all(d, m2)) + m2 = doc_next_mark_all(m2)) m2->ref.d = de1; attr_free(&de->attrs); free(de->name); @@ -213,7 +213,7 @@ DEF_CMD(dir_load_file) de2 = list_first_entry_or_null(&new, struct dir_ent, lst); while (m && m->ref.d && de1 && strcmp(m->ref.d->name, de1->name) < 0) { prev = m; - m = doc_next_mark_all(d, m); + m = doc_next_mark_all(m); } } if (!donotify) { diff --git a/doc-text.c b/doc-text.c index aeab50ac..4fda3032 100644 --- a/doc-text.c +++ b/doc-text.c @@ -815,7 +815,7 @@ DEF_CMD(text_reundo) i = text_advance_towards(t, &m->ref, &end); if (i == 0) break; - while ((m2 = doc_next_mark_all(d, m)) != NULL && + while ((m2 = doc_next_mark_all(m)) != NULL && m2->ref.c == m->ref.c && m2->ref.o <= m->ref.o) mark_forward_over(m, m2); @@ -825,7 +825,7 @@ DEF_CMD(text_reundo) i = text_retreat_towards(t, &m->ref, &end); if (i == 0) break; - while ((m2 = doc_prev_mark_all(d, m)) != NULL && + while ((m2 = doc_prev_mark_all_safe(d, m)) != NULL && m2->ref.c == m->ref.c && m2->ref.o >= m->ref.o) mark_backward_over(m, m2); @@ -848,7 +848,7 @@ DEF_CMD(text_reundo) &start, &end) == 0) break; - early = doc_prev_mark_all(d, m); + early = doc_prev_mark_all_safe(d, m); if (early && !text_ref_same(t, &early->ref, &start)) early = NULL; @@ -1335,11 +1335,11 @@ static void text_check_consistent(struct text *t) } } - for (m = doc_first_mark_all(d); m; m = doc_next_mark_all(d, m)) + for (m = doc_first_mark_all(d); m; m = doc_next_mark_all(m)) text_ref_consistent(t, &m->ref); prev = NULL; - for (m = doc_first_mark_all(d); m; m = doc_next_mark_all(d, m)) { + for (m = doc_first_mark_all(d); m; m = doc_next_mark_all(m)) { if (prev) { struct doc_ref r = prev->ref; int i; @@ -1372,24 +1372,24 @@ DEF_CMD(text_replace) if (!mark_ordered(pm, end)) { myend = mark_dup(pm, 1); - mark_to_mark(d, pm, end); + mark_to_mark(pm, end); } else myend = mark_dup(end, 1); l = count_bytes(t, pm, myend); mark_free(myend); text_del(t, &pm->ref, l, &first); - for (m = doc_prev_mark_all(d, pm); + for (m = doc_prev_mark_all_safe(d, pm); m && text_update_prior_after_change(t, &m->ref, &pm->ref, &pm->ref); - m = doc_prev_mark_all(d, m)) + m = doc_prev_mark_all_safe(d, m)) ; - for (m = doc_next_mark_all(d, pm); + for (m = doc_next_mark_all(pm); m && text_update_following_after_change(t, &m->ref, &pm->ref, &pm->ref); - m = doc_next_mark_all(d, m)) + m = doc_next_mark_all(m)) ; text_check_consistent(t); } - early = doc_prev_mark_all(d, pm); + early = doc_prev_mark_all_safe(d, pm); if (early && !mark_same(d, early, pm)) early = NULL; @@ -1398,13 +1398,13 @@ DEF_CMD(text_replace) struct mark *m; text_add_str(t, &pm->ref, str, &start, &first); - for (m = doc_prev_mark_all(d, pm); + for (m = doc_prev_mark_all_safe(d, pm); m && text_update_prior_after_change(t, &m->ref, &start, &pm->ref); - m = doc_prev_mark_all(d, m)) + m = doc_prev_mark_all_safe(d, m)) ; - for (m = doc_next_mark_all(d, pm); + for (m = doc_next_mark_all(pm); m && text_update_following_after_change(t, &m->ref, &start, &pm->ref); - m = doc_next_mark_all(d, m)) + m = doc_next_mark_all(m)) ; text_check_consistent(t); @@ -1569,7 +1569,7 @@ DEF_CMD(render_line_prev) /* need to use the boundary */ if (!boundary) return 1; - mark_to_mark(d, m, boundary); + mark_to_mark(m, boundary); mark_free(boundary); return 1; } diff --git a/render-complete.c b/render-complete.c index 81c67cb9..99b0eece 100644 --- a/render-complete.c +++ b/render-complete.c @@ -57,7 +57,7 @@ DEF_CMD(render_complete_line) strncmp(ci2.str, cd->prefix, plen) == 0) break; /* have a match, so move the mark to here. */ - mark_to_mark(d, ci->mark, ci2.mark); + mark_to_mark(ci->mark, ci2.mark); } mark_free(ci2.mark); return 1; @@ -72,8 +72,6 @@ DEF_CMD(render_complete_prev) */ struct cmd_info ci2 = {0}, ci3 = {0}; struct complete_data *cd = ci->home->data; - struct pane *dp = doc_get_pane(ci->home); - struct doc *d = dp->data; int plen; int ret; @@ -118,7 +116,7 @@ DEF_CMD(render_complete_prev) if (ci2.mark != ci->mark) { if (ret > 0) /* move ci->mark back to ci2.mark */ - mark_to_mark(d, ci->mark, ci2.mark); + mark_to_mark(ci->mark, ci2.mark); mark_free(ci2.mark); } return ret; -- 2.39.5