summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorErnie Rael <errael@raelity.com>2023-10-14 11:25:04 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-14 11:25:04 +0200
commit0f058d13206665bad37c7d42834cfa0075f50239 (patch)
tree75929a5f6eb9fc5d4b3fa5008d701569e2a5dbf6 /src/eval.c
parent2bbd0d30eebdea66c0da3895e83d999ed6ad83fb (diff)
patch 9.0.2020: Vim9: islocked() needs more workv9.0.2020
Problem: Vim9: islocked() needs more work Solution: rework islocked() and remove sync_root from get_lval() closes: #13329 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c36
1 files changed, 7 insertions, 29 deletions
diff --git a/src/eval.c b/src/eval.c
index 80ff5a3cba..46eec35572 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1187,7 +1187,6 @@ get_lval(
char buf[80];
ch_log(NULL, "LKVAR: ...: GLV flags: %s",
flags_tostring(flags, glv_flag_strings, buf, sizeof(buf)));
- int log_sync_root_key = FALSE;
#endif
// Clear everything in "lp".
@@ -1326,21 +1325,16 @@ get_lval(
}
}
- int sync_root = FALSE;
- if (vim9script && lval_root != NULL)
- {
- cl_exec = lval_root->lr_cl_exec;
- sync_root = lval_root->lr_sync_root;
- }
-
- // Without [idx] or .key we are done, unless doing sync_root.
- if (*p != '[' && *p != '.' && (*name == NUL || !sync_root))
+ // Without [idx] or .key we are done.
+ if (*p != '[' && *p != '.')
{
if (lval_root != NULL)
fill_lval_from_lval_root(lp, lval_root);
return p;
}
+ if (vim9script && lval_root != NULL)
+ cl_exec = lval_root->lr_cl_exec;
if (vim9script && lval_root != NULL && lval_root->lr_tv != NULL)
{
// using local variable
@@ -1375,7 +1369,7 @@ get_lval(
*/
var1.v_type = VAR_UNKNOWN;
var2.v_type = VAR_UNKNOWN;
- while (*p == '[' || (*p == '.' && p[1] != '=' && p[1] != '.') || sync_root)
+ while (*p == '[' || (*p == '.' && p[1] != '=' && p[1] != '.'))
{
vartype_T v_type = lp->ll_tv->v_type;
@@ -1439,19 +1433,7 @@ get_lval(
}
len = -1;
- if (sync_root)
- {
- // For example, the first token is a member variable name and
- // lp->ll_tv is a class/object.
- // Process it directly without looking for "[idx]" or ".name".
- key = name;
- sync_root = FALSE; // only first time through
-#ifdef LOG_LOCKVAR
- log_sync_root_key = TRUE;
- ch_log(NULL, "LKVAR: ... loop: name: %s, sync_root", name);
-#endif
- }
- else if (*p == '.')
+ if (*p == '.')
{
key = p + 1;
for (len = 0; ASCII_ISALNUM(key[len]) || key[len] == '_'; ++len)
@@ -1543,15 +1525,11 @@ get_lval(
++p;
}
#ifdef LOG_LOCKVAR
- if (log_sync_root_key)
- ch_log(NULL, "LKVAR: ... loop: p: %s, sync_root key: %s", p,
- key);
- else if (len == -1)
+ if (len == -1)
ch_log(NULL, "LKVAR: ... loop: p: %s, '[' key: %s", p,
empty1 ? ":" : (char*)tv_get_string(&var1));
else
ch_log(NULL, "LKVAR: ... loop: p: %s, '.' key: %s", p, key);
- log_sync_root_key = FALSE;
#endif
if (v_type == VAR_DICT)