summaryrefslogtreecommitdiffstats
path: root/src/globals.h
diff options
context:
space:
mode:
authorErnie Rael <errael@raelity.com>2023-09-29 19:53:55 +0200
committerChristian Brabandt <cb@256bit.org>2023-09-29 19:53:55 +0200
commitee865f37acab6cac2cee6a171d60e1b365f852b0 (patch)
tree37522d42aa745a1b355a71efc979651e7500f9b2 /src/globals.h
parent112431f21762bdcb3ee4ce2d7d8f91da07f3bf71 (diff)
patch 9.0.1955: Vim9: lockvar issues with objects/classesv9.0.1955
Problem: Vim9: lockvar issues with objects/classes Solution: fix `get_lhs()` object/class access and avoid `SEGV`, make error messages more accurate. - `get_lval()` detects/returns object/class access - `compile_lock_unlock()` generate code for bare static and obj_arg access - `do_lock_var()` check lval for `ll_object`/`ll_class` and fail if so. Details: - Add `ll_object`/`ll_class`/`ll_oi` to `lval_T`. - Add `lockunlock_T` to `isn_T` for `is_arg` to specify handling of `lval_root` in `get_lval()`. - In `get_lval()`, fill in `ll_object`/`ll_class`/`ll_oi` as needed; when no `[idx] or .key`, check lval_root on the way out. - In `do_lock_var()` check for `ll_object`/`ll_class`; also bullet proof ll_dict case and give `Dictionay required` if problem. (not needed to avoid lockvar crash anymore) - In `compile_lock_unlock()` compile for the class variable and func arg cases. closes: #13174 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
Diffstat (limited to 'src/globals.h')
-rw-r--r--src/globals.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/globals.h b/src/globals.h
index 68e7ef2a2d..993783957f 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1954,6 +1954,7 @@ EXTERN int timer_busy INIT(= 0); // when timer is inside vgetc() then > 0
EXTERN int input_busy INIT(= 0); // when inside get_user_input() then > 0
EXTERN typval_T *lval_root INIT(= NULL);
+EXTERN int lval_root_is_arg INIT(= 0);
#endif
#ifdef FEAT_BEVAL_TERM