diff src/vim9class.c @ 31815:64f03e860c91 v9.0.1240

patch 9.0.1240: cannot access a private object member in a lambda Commit: https://github.com/vim/vim/commit/62a6923470827acbf124df41134ae6df52f334e6 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jan 24 15:07:04 2023 +0000 patch 9.0.1240: cannot access a private object member in a lambda Problem: Cannot access a private object member in a lambda defined inside the class. Solution: Go up the context stack to find the class. (closes #11866)
author Bram Moolenaar <Bram@vim.org>
date Tue, 24 Jan 2023 16:15:07 +0100
parents 48431422f766
children 3516e35f409f
line wrap: on
line diff
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1388,6 +1388,19 @@ class_member_index(char_u *name, size_t 
 }
 
 /*
+ * Return TRUE if current context "cctx_arg" is inside class "cl".
+ * Return FALSE if not.
+ */
+    int
+inside_class(cctx_T *cctx_arg, class_T *cl)
+{
+    for (cctx_T *cctx = cctx_arg; cctx != NULL; cctx = cctx->ctx_outer)
+	if (cctx->ctx_ufunc != NULL && cctx->ctx_ufunc->uf_class == cl)
+	    return TRUE;
+    return FALSE;
+}
+
+/*
  * Make a copy of an object.
  */
     void