mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
refactor(diff.c): factor out diffblock deletion
This commit is contained in:
parent
6da2271a04
commit
49c2da432b
@ -462,9 +462,7 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1, linenr_T
|
|||||||
dprev->df_count[i] += dp->df_count[i];
|
dprev->df_count[i] += dp->df_count[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprev->df_next = dp->df_next;
|
dp = diff_free(tp, dprev, dp);
|
||||||
xfree(dp);
|
|
||||||
dp = dprev->df_next;
|
|
||||||
} else {
|
} else {
|
||||||
// Advance to next entry.
|
// Advance to next entry.
|
||||||
dprev = dp;
|
dprev = dp;
|
||||||
@ -485,15 +483,7 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1, linenr_T
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (i == DB_COUNT) {
|
if (i == DB_COUNT) {
|
||||||
diff_T *dnext = dp->df_next;
|
dp = diff_free(tp, dprev, dp);
|
||||||
xfree(dp);
|
|
||||||
dp = dnext;
|
|
||||||
|
|
||||||
if (dprev == NULL) {
|
|
||||||
tp->tp_first_diff = dnext;
|
|
||||||
} else {
|
|
||||||
dprev->df_next = dnext;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Advance to next entry.
|
// Advance to next entry.
|
||||||
dprev = dp;
|
dprev = dp;
|
||||||
@ -533,6 +523,20 @@ static diff_T *diff_alloc_new(tabpage_T *tp, diff_T *dprev, diff_T *dp)
|
|||||||
return dnew;
|
return dnew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static diff_T *diff_free(tabpage_T *tp, diff_T *dprev, diff_T *dp)
|
||||||
|
{
|
||||||
|
diff_T *ret = dp->df_next;
|
||||||
|
xfree(dp);
|
||||||
|
|
||||||
|
if (dprev == NULL) {
|
||||||
|
tp->tp_first_diff = ret;
|
||||||
|
} else {
|
||||||
|
dprev->df_next = ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/// Check if the diff block "dp" can be made smaller for lines at the start and
|
/// Check if the diff block "dp" can be made smaller for lines at the start and
|
||||||
/// end that are equal. Called after inserting lines.
|
/// end that are equal. Called after inserting lines.
|
||||||
///
|
///
|
||||||
@ -2777,13 +2781,6 @@ static void diffgetput(const int addr_count, const int idx_cur, const int idx_fr
|
|||||||
if (i == DB_COUNT) {
|
if (i == DB_COUNT) {
|
||||||
// delete the diff entry, the buffers are now equal here
|
// delete the diff entry, the buffers are now equal here
|
||||||
dfree = dp;
|
dfree = dp;
|
||||||
dp = dp->df_next;
|
|
||||||
|
|
||||||
if (dprev == NULL) {
|
|
||||||
curtab->tp_first_diff = dp;
|
|
||||||
} else {
|
|
||||||
dprev->df_next = dp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2802,10 +2799,10 @@ static void diffgetput(const int addr_count, const int idx_cur, const int idx_fr
|
|||||||
}
|
}
|
||||||
changed_lines(lnum, 0, lnum + count, added, true);
|
changed_lines(lnum, 0, lnum + count, added, true);
|
||||||
|
|
||||||
if (dfree != NULL) {
|
if (dfree == dp) {
|
||||||
// Diff is deleted, update folds in other windows.
|
// Diff is deleted, update folds in other windows.
|
||||||
diff_fold_update(dfree, idx_to);
|
diff_fold_update(dfree, idx_to);
|
||||||
xfree(dfree);
|
dp = diff_free(curtab, dprev, dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mark_adjust() may have made "dp" invalid. We don't know where
|
// mark_adjust() may have made "dp" invalid. We don't know where
|
||||||
|
Loading…
Reference in New Issue
Block a user