0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.0.2015: Vim9: does not handle islocked() from a method correctly

Problem:  Vim9: does not handle islocked() from a method correctly
Solution: Handle islocked() builtin from a method.

- Setup `lval_root` from `f_islocked()`.
- Add function `fill_exec_lval_root()` to get info about executing method.
- `sync_root` added in get_lval to handle method member access.
- Conservative approach to reference counting.

closes: #13309

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Ernie Rael <errael@raelity.com>
This commit is contained in:
Ernie Rael
2023-10-11 21:35:11 +02:00
committed by Christian Brabandt
parent c97b3febc8
commit 4c8da025ef
7 changed files with 461 additions and 26 deletions

View File

@@ -4604,13 +4604,16 @@ typedef struct lval_S
} lval_T;
/**
* This may be used to specify the base type that get_lval() uses when
* This may be used to specify the base typval that get_lval() uses when
* following a chain, for example a[idx1][idx2].
* The lr_sync_root flags signals get_lval that the first time through
* the indexing loop, skip handling '.' and '[idx]'.
*/
typedef struct lval_root_S {
typval_T *lr_tv;
class_T *lr_cl_exec; // executing class for access checking
int lr_is_arg;
int lr_sync_root;
} lval_root_T;
// Structure used to save the current state. Used when executing Normal mode