patch 9.0.2170: Vim9: no support for const/final class/objects vars
Problem: Vim9: no support for const/final class/objects vars
Solution: Support final and const object and class variables
closes: #13655
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/vim9compile.c b/src/vim9compile.c
index b2d8fa0..7bf2552 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1770,6 +1770,12 @@
lhs->lhs_name);
return FAIL;
}
+
+ ocmember_T *m =
+ &defcl->class_class_members[lhs->lhs_classmember_idx];
+ if (oc_var_check_ro(defcl, m))
+ return FAIL;
+
lhs->lhs_dest = dest_class_member;
lhs->lhs_class = cctx->ctx_ufunc->uf_class;
lhs->lhs_type =
@@ -2040,6 +2046,10 @@
return FAIL;
}
+ if (!IS_CONSTRUCTOR_METHOD(cctx->ctx_ufunc)
+ && oc_var_check_ro(cl, m))
+ return FAIL;
+
lhs->lhs_member_type = m->ocm_type;
}
else
@@ -3356,7 +3366,7 @@
type_T *type = get_type_on_stack(&cctx, 0);
if (m->ocm_type->tt_type == VAR_ANY
- && !m->ocm_has_type
+ && !(m->ocm_flags & OCMFLAG_HAS_TYPE)
&& type->tt_type != VAR_SPECIAL)
{
// If the member variable type is not yet set, then use