diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-15 13:40:01 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-08-16 05:39:44 +0800 |
commit | d1464d16d6897144b29c22f8113aad9b7210e14c (patch) | |
tree | 63219cc75b3495147873595053a62b8ee4792052 /src/nvim/runtime.c | |
parent | 1d28bbf1e53fac5160a24b1194090a4e1c5b6046 (diff) | |
download | rneovim-d1464d16d6897144b29c22f8113aad9b7210e14c.tar.gz rneovim-d1464d16d6897144b29c22f8113aad9b7210e14c.tar.bz2 rneovim-d1464d16d6897144b29c22f8113aad9b7210e14c.zip |
fix(source): fix expand('<sfile>') no longer works for Lua
Diffstat (limited to 'src/nvim/runtime.c')
-rw-r--r-- | src/nvim/runtime.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/nvim/runtime.c b/src/nvim/runtime.c index 1ec9cd0e0e..edcaa27e2b 100644 --- a/src/nvim/runtime.c +++ b/src/nvim/runtime.c @@ -1983,30 +1983,27 @@ int do_source(char *fname, int check_other, int is_vimrc) cookie.conv.vc_type = CONV_NONE; // no conversion - // Read the first line so we can check for a UTF-8 BOM. - firstline = (uint8_t *)getsourceline(0, (void *)&cookie, 0, true); - if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef - && firstline[1] == 0xbb && firstline[2] == 0xbf) { - // Found BOM; setup conversion, skip over BOM and recode the line. - convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); - p = (char *)string_convert(&cookie.conv, (char_u *)firstline + 3, NULL); - if (p == NULL) { - p = xstrdup((char *)firstline + 3); - } - xfree(firstline); - firstline = (uint8_t *)p; - } - if (path_with_extension((const char *)fname_exp, "lua")) { const sctx_T current_sctx_backup = current_sctx; current_sctx.sc_sid = SID_LUA; current_sctx.sc_lnum = 0; - estack_push(ETYPE_SCRIPT, NULL, 0); // Source the file as lua nlua_exec_file((const char *)fname_exp); current_sctx = current_sctx_backup; - estack_pop(); } else { + // Read the first line so we can check for a UTF-8 BOM. + firstline = (uint8_t *)getsourceline(0, (void *)&cookie, 0, true); + if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef + && firstline[1] == 0xbb && firstline[2] == 0xbf) { + // Found BOM; setup conversion, skip over BOM and recode the line. + convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); + p = (char *)string_convert(&cookie.conv, (char_u *)firstline + 3, NULL); + if (p == NULL) { + p = xstrdup((char *)firstline + 3); + } + xfree(firstline); + firstline = (uint8_t *)p; + } // Call do_cmdline, which will call getsourceline() to get the lines. do_cmdline((char *)firstline, getsourceline, (void *)&cookie, DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); |