diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-05-12 15:38:26 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-05-12 15:38:26 +0200 |
commit | b0f42ba60d9e6d101d103421ba0c351811615c15 (patch) | |
tree | 083b82fcd12fc95a90d779898a6a2b9939ef7837 /src/eval.c | |
parent | ff3be4fe1e2e723de48b826cb992c798e296c41e (diff) |
patch 8.0.1817: a timer may change v:count unexpectedlyv8.0.1817
Problem: A timer may change v:count unexpectedly.
Solution: Save and restore v:count and similar variables when a timer
callback is invoked. (closes #2897)
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 63f8bde329..b787474d10 100644 --- a/src/eval.c +++ b/src/eval.c @@ -6462,6 +6462,29 @@ set_vcount( } /* + * Save variables that might be changed as a side effect. Used when executing + * a timer callback. + */ + void +save_vimvars(vimvars_save_T *vvsave) +{ + vvsave->vv_prevcount = vimvars[VV_PREVCOUNT].vv_nr; + vvsave->vv_count = vimvars[VV_COUNT].vv_nr; + vvsave->vv_count1 = vimvars[VV_COUNT1].vv_nr; +} + +/* + * Restore variables saved by save_vimvars(). + */ + void +restore_vimvars(vimvars_save_T *vvsave) +{ + vimvars[VV_PREVCOUNT].vv_nr = vvsave->vv_prevcount; + vimvars[VV_COUNT].vv_nr = vvsave->vv_count; + vimvars[VV_COUNT1].vv_nr = vvsave->vv_count1; +} + +/* * Set string v: variable to a copy of "val". */ void |