mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.1.1099: Vim9: import with extends may crash
Problem: Vim9: import with extends may crash, v9.1.1087 wasn't the correct way to fix it) Solution: When using an import class, Check for a valid class member variable at compile time (Yegappan Lakshmanan) related: #16601 closes: #16603 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
e3647c8bf5
commit
54d7f18c38
@@ -96,7 +96,7 @@ clean:
|
|||||||
-rm -f opt_test.vim test_result.log $(CLEANUP_FILES)
|
-rm -f opt_test.vim test_result.log $(CLEANUP_FILES)
|
||||||
-rm -rf $(RM_ON_RUN) $(RM_ON_START)
|
-rm -rf $(RM_ON_RUN) $(RM_ON_START)
|
||||||
-rm -f valgrind.*
|
-rm -f valgrind.*
|
||||||
-rm -f asan.*
|
-rm -f asan.* asan_test_*
|
||||||
-rm -f guidialog guidialogfile
|
-rm -f guidialog guidialogfile
|
||||||
|
|
||||||
# Delete the files produced by benchmarking, so they can run again.
|
# Delete the files produced by benchmarking, so they can run again.
|
||||||
|
@@ -3454,8 +3454,7 @@ def Test_vim9_import_and_class_extends()
|
|||||||
var myView = View.new('This should be ok')
|
var myView = View.new('This should be ok')
|
||||||
assert_equal('This should be ok', myView.content.value)
|
assert_equal('This should be ok', myView.content.value)
|
||||||
END
|
END
|
||||||
# TODO: The root cause will be identified later.
|
v9.CheckScriptFailure(lines, 'E1376: Object variable "value2" accessible only using class "Run" object', 2)
|
||||||
v9.CheckScriptFailure(lines, 'E1099: Unknown error while executing new', 7)
|
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1099,
|
||||||
/**/
|
/**/
|
||||||
1098,
|
1098,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2496,9 +2496,10 @@ compile_load_lhs(
|
|||||||
lhs->lhs_type = cctx->ctx_type_stack.ga_len == 0 ? &t_void
|
lhs->lhs_type = cctx->ctx_type_stack.ga_len == 0 ? &t_void
|
||||||
: get_type_on_stack(cctx, 0);
|
: get_type_on_stack(cctx, 0);
|
||||||
|
|
||||||
if (lhs->lhs_type->tt_type == VAR_OBJECT)
|
if (lhs->lhs_type->tt_type == VAR_CLASS
|
||||||
|
|| lhs->lhs_type->tt_type == VAR_OBJECT)
|
||||||
{
|
{
|
||||||
// Check whether the object variable is modifiable
|
// Check whether the class or object variable is modifiable
|
||||||
if (!lhs_class_member_modifiable(lhs, var_start, cctx))
|
if (!lhs_class_member_modifiable(lhs, var_start, cctx))
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
@@ -2461,14 +2461,8 @@ execute_storeindex(isn_T *iptr, ectx_T *ectx)
|
|||||||
otv = class->class_members_tv;
|
otv = class->class_members_tv;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (otv != NULL)
|
clear_tv(&otv[lidx]);
|
||||||
{
|
otv[lidx] = *tv;
|
||||||
clear_tv(&otv[lidx]);
|
|
||||||
otv[lidx] = *tv;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
status = FAIL;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user