Mercurial > vim
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;