diff options
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r-- | src/nvim/buffer.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 64e73b65d5..9e0dc75222 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -1443,17 +1443,18 @@ static int top_file_num = 1; ///< highest file number static inline void buf_init_changedtick(buf_T *const buf) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL { - dictitem_T *const changedtick_di = dictitem_alloc((char_u *)"changedtick"); - // For some reason `islocked('b:changedtick')` should return 1. It does not - // do so for other read-only variables which are normally VAR_FIXED. - changedtick_di->di_flags |= DI_FLAGS_RO|DI_FLAGS_FIX; - changedtick_di->di_tv = (typval_T) { - .v_type = VAR_NUMBER, - .v_lock = VAR_FIXED, - .vval.v_number = buf->b_changedtick, + buf->changedtick_di = (dictitem16_T) { + .di_flags = DI_FLAGS_RO|DI_FLAGS_FIX, // Must not include DI_FLAGS_ALLOC. + .di_tv = (typval_T) { + .v_type = VAR_NUMBER, + .v_lock = VAR_FIXED, + .vval.v_number = buf->b_changedtick, + }, }; - dict_add(buf->b_vars, changedtick_di); - buf->changedtick_val = &changedtick_di->di_tv.vval.v_number; + STATIC_ASSERT(sizeof("changedtick") <= sizeof(buf->changedtick_di.di_key), + "buf->changedtick_di cannot hold large enough keys"); + memcpy(buf->changedtick_di.di_key, "changedtick", sizeof("changedtick")); + dict_add(buf->b_vars, (dictitem_T *)&buf->changedtick_di); } /// Add a file name to the buffer list. |