diff src/vim9compile.c @ 33297:6340c608ca54 v9.0.1914

patch 9.0.1914: Vim9: few issues when accessing object members Commit: https://github.com/vim/vim/commit/1db151436541a3e64cdd5e3d9eb3ace1ce1e1ad0 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Sep 19 20:34:05 2023 +0200 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>
author Christian Brabandt <cb@256bit.org>
date Tue, 19 Sep 2023 20:45:06 +0200
parents 0c3553cfe22e
children 9062315f9de1
line wrap: on
line diff
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3286,7 +3286,7 @@ compile_def_function(
 
 	// 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 @@ nextline:
 	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 @@ nextline:
 
 	// 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;