patch 9.0.1914: Vim9: few issues when accessing object members
Problem: Vim9: few issues when accessing object members
Solution: When calling an object method, check for null object.
Accessing a Dict object member doesn't work.
closes: #13119
closes: #13123
closes: #13124
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 ab063f9..a8d8c7d 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3286,7 +3286,7 @@
// In the constructor allocate memory for the object and initialize the
// object members.
- if ((ufunc->uf_flags & FC_NEW) == FC_NEW)
+ if (IS_CONSTRUCTOR_METHOD(ufunc))
{
generate_CONSTRUCT(&cctx, ufunc->uf_class);
@@ -3949,7 +3949,7 @@
if (ufunc->uf_ret_type->tt_type == VAR_UNKNOWN)
ufunc->uf_ret_type = &t_void;
else if (ufunc->uf_ret_type->tt_type != VAR_VOID
- && (ufunc->uf_flags & FC_NEW) != FC_NEW)
+ && !IS_CONSTRUCTOR_METHOD(ufunc))
{
emsg(_(e_missing_return_statement));
goto erret;
@@ -3957,7 +3957,7 @@
// Return void if there is no return at the end.
// For a constructor return the object.
- if ((ufunc->uf_flags & FC_NEW) == FC_NEW)
+ if (IS_CONSTRUCTOR_METHOD(ufunc))
{
generate_instr(&cctx, ISN_RETURN_OBJECT);
ufunc->uf_ret_type = &ufunc->uf_class->class_object_type;