# HG changeset patch # User Christian Brabandt # Date 1697729405 -7200 # Node ID 698de9399942f6cb5bf7cf700983e9af797e603e # Parent f7351afc42cfa5be55ac5a1b8cb3282ca4ee442d patch 9.0.2051: Vim9: wrong error for non-existing object var Commit: https://github.com/vim/vim/commit/00b55370b3adfc386ab27154df5c51410a099910 Author: Yegappan Lakshmanan Date: Thu Oct 19 17:18:28 2023 +0200 patch 9.0.2051: Vim9: wrong error for non-existing object var Problem: Vim9: wrong error for non-existing object var Solution: mention object or class depending on whether the var is an object or class variable. closes: #13384 closes: #13387 Signed-off-by: Christian Brabandt Co-authored-by: Yegappan Lakshmanan diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -1743,7 +1743,7 @@ def Test_class_member() var a = A.new() var v = a.bar END - v9.CheckSourceFailure(lines, 'E1337: Class variable "bar" not found in class "A"', 5) + v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "A": bar', 5) enddef " These messages should show the defining class of the variable (base class), @@ -5384,7 +5384,7 @@ def Test_class_variable_access_using_obj var a = A.new() echo a.svar2 END - v9.CheckSourceFailure(lines, 'E1337: Class variable "svar2" not found in class "A"', 8) + v9.CheckSourceFailure(lines, 'E1375: Class variable "svar2" accessible only using class "A"', 8) # Cannot write to a class variable using an object in script context lines =<< trim END @@ -5859,7 +5859,7 @@ def Test_class_variable() var a = A.new() var i = a.val END - v9.CheckSourceFailure(lines, 'E1337: Class variable "val" not found in class "A"', 7) + v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"', 7) # Modifying a class variable using an object at function level lines =<< trim END @@ -8344,6 +8344,7 @@ def Test_class_variable_as_operands() vim9script class Tests static truthy: bool = true + public static TruthyFn: func static list: list = [] static four: number = 4 static hello: string = 'hello' @@ -8381,6 +8382,8 @@ def Test_class_variable_as_operands() def TestOps2() assert_true(Tests.truthy == Tests.Truthy()) assert_true(Tests.Truthy() == Tests.truthy) + assert_true(Tests.truthy == Tests.TruthyFn()) + assert_true(Tests.TruthyFn() == Tests.truthy) assert_true(Tests.list is Tests.List()) assert_true(Tests.List() is Tests.list) assert_equal(2, Tests.four >> 1) @@ -8391,12 +8394,15 @@ def Test_class_variable_as_operands() assert_equal('hellohello', Tests.Hello() .. Tests.hello) enddef + Tests.TruthyFn = Tests.Truthy var t = Tests.new() t.TestOps() TestOps2() assert_true(Tests.truthy == Tests.Truthy()) assert_true(Tests.Truthy() == Tests.truthy) + assert_true(Tests.truthy == Tests.TruthyFn()) + assert_true(Tests.TruthyFn() == Tests.truthy) assert_true(Tests.list is Tests.List()) assert_true(Tests.List() is Tests.list) assert_equal(2, Tests.four >> 1) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2051, +/**/ 2050, /**/ 2049, diff --git a/src/vim9class.c b/src/vim9class.c --- a/src/vim9class.c +++ b/src/vim9class.c @@ -2340,7 +2340,8 @@ class_object_index( } if (did_emsg == did_emsg_save) - member_not_found_msg(cl, is_object, name, len); + member_not_found_msg(cl, is_object ? VAR_OBJECT : VAR_CLASS, name, + len); } return FAIL;