mirror of
https://github.com/neovim/neovim.git
synced 2025-12-03 07:23:05 +00:00
fix: anonymous sid not working
This commit is contained in:
@@ -9369,10 +9369,31 @@ static hashtab_T *find_var_ht_dict(const char *name, const size_t name_len, cons
|
||||
} else if (*name == 'l' && funccal != NULL) { // local variable
|
||||
*d = &funccal->l_vars;
|
||||
} else if (*name == 's' // script variable
|
||||
&& (current_sctx.sc_sid > 0 || current_sctx.sc_sid == SID_STR)
|
||||
&& (current_sctx.sc_sid > 0 || current_sctx.sc_sid == SID_STR
|
||||
|| current_sctx.sc_sid == SID_LUA)
|
||||
&& current_sctx.sc_sid <= ga_scripts.ga_len) {
|
||||
// For anonymous scripts without a script item, create one now so script vars can be used
|
||||
if (current_sctx.sc_sid == SID_STR) {
|
||||
if (current_sctx.sc_sid == SID_LUA) {
|
||||
// try to resolve lua filename & line no so it can be shown in lastset messages.
|
||||
nlua_set_sctx(¤t_sctx);
|
||||
if (current_sctx.sc_sid != SID_LUA) {
|
||||
// Great we have valid location. Now here this out we'll create a new
|
||||
// script context with the name and lineno of this one. why ?
|
||||
// for behavioral consistency. With this different anonymous exec from
|
||||
// same file can't access each others script local stuff. We need to do
|
||||
// this all other cases except this will act like that otherwise.
|
||||
const LastSet last_set = (LastSet){
|
||||
.script_ctx = current_sctx,
|
||||
.channel_id = LUA_INTERNAL_CALL,
|
||||
};
|
||||
bool should_free;
|
||||
// should_free is ignored as script_sctx will be resolved to a fnmae
|
||||
// & new_script_item will consume it.
|
||||
char_u *sc_name = get_scriptname(last_set, &should_free);
|
||||
new_script_item(sc_name, ¤t_sctx.sc_sid);
|
||||
}
|
||||
}
|
||||
if (current_sctx.sc_sid == SID_STR || current_sctx.sc_sid == SID_LUA) {
|
||||
new_script_item(NULL, ¤t_sctx.sc_sid);
|
||||
}
|
||||
*d = &SCRIPT_SV(current_sctx.sc_sid)->sv_dict;
|
||||
|
||||
Reference in New Issue
Block a user