patch 9.0.1760: vim9 class problem with new() constructor
Problem: vim9 class problem with new() constructor
Solution: Don't allow a return type for the new() class constructor.
closes: #12863
closes: #12040
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index 29ed054..3f44b88 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -2617,8 +2617,16 @@
return NULL;
}
- // No argument, return zero.
- generate_PUSHNR(cctx, 0);
+ if (cctx->ctx_ufunc->uf_flags & FC_NEW)
+ {
+ // For a class new() constructor, return an object of the class.
+ generate_instr(cctx, ISN_RETURN_OBJECT);
+ cctx->ctx_ufunc->uf_ret_type =
+ &cctx->ctx_ufunc->uf_class->class_object_type;
+ }
+ else
+ // No argument, return zero.
+ generate_PUSHNR(cctx, 0);
}
// may need ENDLOOP when inside a :for or :while loop