mirror of
https://github.com/neovim/neovim.git
synced 2025-10-05 17:36:29 +00:00
memline: do not attempt to cache line2byte()
This is irrelevant to neovim usecases anyway.
This commit is contained in:
@@ -4012,8 +4012,13 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp, bool no_ff)
|
|||||||
// This is used by the extmark code which needs the byte offset of the edited
|
// This is used by the extmark code which needs the byte offset of the edited
|
||||||
// line. So when doing multiple small edits on the same line the value is
|
// line. So when doing multiple small edits on the same line the value is
|
||||||
// only calculated once.
|
// only calculated once.
|
||||||
|
//
|
||||||
|
// NB: caching doesn't work with 'fileformat'. This is not a problem for
|
||||||
|
// bytetracking, as bytetracking ignores 'fileformat' option. But calling
|
||||||
|
// line2byte() will invalidate the cache for the time being (this function
|
||||||
|
// was never cached to start with anyway).
|
||||||
bool can_cache = (lnum != 0 && !ffdos && buf->b_ml.ml_line_lnum == lnum);
|
bool can_cache = (lnum != 0 && !ffdos && buf->b_ml.ml_line_lnum == lnum);
|
||||||
if (lnum == 0 || buf->b_ml.ml_line_lnum < lnum) {
|
if (lnum == 0 || buf->b_ml.ml_line_lnum < lnum || !no_ff) {
|
||||||
ml_flush_line(curbuf);
|
ml_flush_line(curbuf);
|
||||||
} else if (can_cache && buf->b_ml.ml_line_offset > 0) {
|
} else if (can_cache && buf->b_ml.ml_line_offset > 0) {
|
||||||
return buf->b_ml.ml_line_offset;
|
return buf->b_ml.ml_line_offset;
|
||||||
@@ -4113,7 +4118,7 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp, bool no_ff)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (can_cache) {
|
if (can_cache && size > 0) {
|
||||||
buf->b_ml.ml_line_offset = size;
|
buf->b_ml.ml_line_offset = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,6 +58,7 @@ typedef struct memline {
|
|||||||
linenr_T ml_line_lnum; // line number of cached line, 0 if not valid
|
linenr_T ml_line_lnum; // line number of cached line, 0 if not valid
|
||||||
char_u *ml_line_ptr; // pointer to cached line
|
char_u *ml_line_ptr; // pointer to cached line
|
||||||
size_t ml_line_offset; // cached byte offset of ml_line_lnum
|
size_t ml_line_offset; // cached byte offset of ml_line_lnum
|
||||||
|
int ml_line_offset_ff; // fileformat of cached line
|
||||||
|
|
||||||
bhdr_T *ml_locked; // block used by last ml_get
|
bhdr_T *ml_locked; // block used by last ml_get
|
||||||
linenr_T ml_locked_low; // first line in ml_locked
|
linenr_T ml_locked_low; // first line in ml_locked
|
||||||
|
Reference in New Issue
Block a user