Mercurial > vim
diff src/vim9execute.c @ 19191:133ef7ba4e4e v8.2.0154
patch 8.2.0154: reallocating the list of scripts is inefficient
Commit: https://github.com/vim/vim/commit/21b9e9773d64de40994f8762173bdd8befa6acf7
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 26 19:26:46 2020 +0100
patch 8.2.0154: reallocating the list of scripts is inefficient
Problem: Reallocating the list of scripts is inefficient.
Solution: Instead of using a growarray of scriptitem_T, store pointers and
allocate each scriptitem_T separately. Also avoids that the
growarray pointers change when sourcing a new script.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 26 Jan 2020 19:30:14 +0100 |
parents | 94eda51ba9ba |
children | 9f98957582d6 |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -492,7 +492,7 @@ call_def_function( case ISN_LOADSCRIPT: { scriptitem_T *si = - &SCRIPT_ITEM(iptr->isn_arg.script.script_sid); + SCRIPT_ITEM(iptr->isn_arg.script.script_sid); svar_T *sv; sv = ((svar_T *)si->sn_var_vals.ga_data) @@ -598,7 +598,7 @@ call_def_function( // store script-local variable case ISN_STORESCRIPT: { - scriptitem_T *si = &SCRIPT_ITEM( + scriptitem_T *si = SCRIPT_ITEM( iptr->isn_arg.script.script_sid); svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data) + iptr->isn_arg.script.script_idx; @@ -1551,7 +1551,7 @@ ex_disassemble(exarg_T *eap) case ISN_LOADSCRIPT: { scriptitem_T *si = - &SCRIPT_ITEM(iptr->isn_arg.script.script_sid); + SCRIPT_ITEM(iptr->isn_arg.script.script_sid); svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data) + iptr->isn_arg.script.script_idx; @@ -1561,7 +1561,7 @@ ex_disassemble(exarg_T *eap) break; case ISN_LOADS: { - scriptitem_T *si = &SCRIPT_ITEM(iptr->isn_arg.loads.ls_sid); + scriptitem_T *si = SCRIPT_ITEM(iptr->isn_arg.loads.ls_sid); smsg("%4d LOADS s:%s from %s", current, iptr->isn_arg.string, si->sn_name); @@ -1589,7 +1589,7 @@ ex_disassemble(exarg_T *eap) case ISN_STORESCRIPT: { scriptitem_T *si = - &SCRIPT_ITEM(iptr->isn_arg.script.script_sid); + SCRIPT_ITEM(iptr->isn_arg.script.script_sid); svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data) + iptr->isn_arg.script.script_idx;