summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErnie Rael <errael@raelity.com>2023-09-21 16:42:28 +0200
committerChristian Brabandt <cb@256bit.org>2023-09-21 16:42:28 +0200
commit696270bcae0c14029030f14a3f3ca2763a2b39de (patch)
tree08f1691a9d0afc7a4a98884dc7a6220a59815075
parent02c51b1dd8e8b96e969ad7e408536fa208d90ac8 (diff)
patch 9.0.1926: Vim9: not enough info in error messagev9.0.1926
Problem: Vim9: not enough info in error message Solution: Add class name, change member to variable, quote names closes: #13136 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
-rw-r--r--src/errors.h2
-rw-r--r--src/eval.c2
-rw-r--r--src/testdir/test_vim9_class.vim10
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c4
5 files changed, 11 insertions, 9 deletions
diff --git a/src/errors.h b/src/errors.h
index f1373a42c4..40e16f1c0d 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3411,7 +3411,7 @@ EXTERN char e_cannot_access_private_member_str[]
INIT(= N_("E1333: Cannot access private member: %s"));
// E1334 unused
EXTERN char e_member_is_not_writable_str[]
- INIT(= N_("E1335: Member is not writable: %s"));
+ INIT(= N_("E1335: Variable \"%s\" in class \"%s\" is not writable"));
#endif
EXTERN char e_internal_error_shortmess_too_long[]
INIT(= "E1336: Internal error: shortmess too long");
diff --git a/src/eval.c b/src/eval.c
index 93b840e61e..3f8ce5ffef 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1570,7 +1570,7 @@ get_lval(
if ((flags & GLV_READ_ONLY) == 0)
{
semsg(_(e_member_is_not_writable_str),
- om->ocm_name);
+ om->ocm_name, cl->class_name);
return NULL;
}
break;
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index f57bf44d04..6c338167fd 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -646,7 +646,7 @@ def Test_assignment_nested_type()
Test_assign_to_nested_typed_member()
END
- v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "value"')
+ v9.CheckSourceFailure(lines, 'E1335: Variable "value" in class "Inner" is not writable')
# Assignment where target item is read only script level
lines =<< trim END
@@ -669,7 +669,7 @@ def Test_assignment_nested_type()
script_outer.inner.value = 1
assert_equal(1, script_inner.value)
END
- v9.CheckSourceFailure(lines, 'E1335: Member is not writable: value')
+ v9.CheckSourceFailure(lines, 'E1335: Variable "value" in class "Inner" is not writable')
enddef
def Test_assignment_with_operator()
@@ -1243,7 +1243,7 @@ def Test_class_variable_access()
var b = B.new()
b.Foo()
END
- v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "ro_class_var"')
+ v9.CheckSourceFailure(lines, 'E1335: Variable "ro_class_var" in class "A" is not writable')
# A private class variable cannot be accessed from a child class
lines =<< trim END
@@ -4269,7 +4269,7 @@ def Test_readonly_member_change_in_def_func()
enddef
T()
END
- v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "val"')
+ v9.CheckSourceFailure(lines, 'E1335: Variable "val" in class "A" is not writable')
enddef
" Test for reading and writing a class member from a def function
@@ -5541,7 +5541,7 @@ def Test_nested_object_assignment()
var d = D.new()
T(d)
END
- v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "value"')
+ v9.CheckSourceFailure(lines, 'E1335: Variable "value" in class "A" is not writable')
enddef
" Test for calling methods using a null object
diff --git a/src/version.c b/src/version.c
index 3f4c648ab9..ced912523c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1926,
+/**/
1925,
/**/
1924,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index a8d8c7d220..16898e32c7 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1611,8 +1611,8 @@ lhs_class_member_modifiable(lhs_T *lhs, char_u *var_start, cctx_T *cctx)
{
char *msg = (m->ocm_access == VIM_ACCESS_PRIVATE)
? e_cannot_access_private_member_str
- : e_cannot_change_readonly_variable_str;
- semsg(_(msg), m->ocm_name);
+ : e_member_is_not_writable_str;
+ semsg(_(msg), m->ocm_name, cl->class_name);
return FALSE;
}