diff options
Diffstat (limited to 'src/vim9compile.c')
-rw-r--r-- | src/vim9compile.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/vim9compile.c b/src/vim9compile.c index 8e6f6e23fd..61fefa767e 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -3315,7 +3315,7 @@ obj_constructor_prologue(ufunc_T *ufunc, cctx_T *cctx) // the initialization expression type. m->ocm_type = type; } - else if (m->ocm_type->tt_type != type->tt_type) + else { // The type of the member initialization expression is // determined at run time. Add a runtime type check. @@ -3330,6 +3330,15 @@ obj_constructor_prologue(ufunc_T *ufunc, cctx_T *cctx) else push_default_value(cctx, m->ocm_type->tt_type, FALSE, NULL); + if ((m->ocm_type->tt_type == VAR_DICT + || m->ocm_type->tt_type == VAR_LIST) + && m->ocm_type->tt_member != NULL + && m->ocm_type->tt_member != &t_any + && m->ocm_type->tt_member != &t_unknown) + // Set the type in the list or dict, so that it can be checked, + // also in legacy script. + generate_SETTYPE(cctx, m->ocm_type); + generate_STORE_THIS(cctx, i); } |