patch 9.0.1824: Vim9: private members may be modifiable

Problem:  Vim9: private members may be modifiable
Solution: prevent modification for def function

closes: #12963

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
diff --git a/src/vim9compile.c b/src/vim9compile.c
index add9eda..5c173c1 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1866,6 +1866,15 @@
 	{
 	    // for an object or class member get the type of the member
 	    class_T *cl = lhs->lhs_type->tt_class;
+	    // If it is private member variable, then accessing it outside the
+	    // class is not allowed.
+	    if (*(after + 1) == '_' && !inside_class(cctx, cl))
+	    {
+		char_u *m_name = vim_strnsave(after + 1, lhs->lhs_end - after);
+		semsg(_(e_cannot_access_private_member_str), m_name);
+		vim_free(m_name);
+		return FAIL;
+	    }
 	    lhs->lhs_member_type = class_member_type(cl, after + 1,
 					   lhs->lhs_end, &lhs->lhs_member_idx);
 	    if (lhs->lhs_member_idx < 0)