mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.0.1780: Vim9 type not defined during object creation
Problem: Vim9 type not defined during object creation Solution: Define type during object creation and not during class definition, parse mulit-line member initializers, fix lock initialization If type is not specified for a member, set it during object creation instead of during class definition. Add a runtime type check for the object member initialization expression Also, while at it, when copying an object or class, make sure the lock is correctly initialized. And finally, parse multi-line member initializers correctly. closes: #11957 closes: #12868 closes: #12869 closes: #12881 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com> Co-authored-by: LemonBoy <thatlemon@gmail.com>
This commit is contained in:
committed by
Christian Brabandt
parent
8dabccd295
commit
618e47d1cd
@@ -3150,6 +3150,19 @@ compile_def_function(
|
||||
semsg(_(e_trailing_characters_str), expr);
|
||||
goto erret;
|
||||
}
|
||||
|
||||
type_T *type = get_type_on_stack(&cctx, 0);
|
||||
if (m->ocm_type->tt_type != type->tt_type)
|
||||
{
|
||||
// The type of the member initialization expression is
|
||||
// determined at run time. Add a runtime type check.
|
||||
where_T where = WHERE_INIT;
|
||||
where.wt_kind = WT_MEMBER;
|
||||
where.wt_func_name = (char *)m->ocm_name;
|
||||
if (need_type_where(type, m->ocm_type, FALSE, -1,
|
||||
where, &cctx, FALSE, FALSE) == FAIL)
|
||||
goto erret;
|
||||
}
|
||||
}
|
||||
else
|
||||
push_default_value(&cctx, m->ocm_type->tt_type,
|
||||
|
Reference in New Issue
Block a user