diff options
-rw-r--r-- | src/testdir/test_vim9_class.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9class.c | 7 | ||||
-rw-r--r-- | src/vim9compile.c | 2 |
4 files changed, 22 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index f45e3fa6c..88128e745 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -111,6 +111,17 @@ def Test_class_basic() lines =<< trim END vim9script class Something + def new() + this.state = 0 + enddef + endclass + var obj = Something.new() + END + v9.CheckScriptFailure(lines, 'E1089:') + + lines =<< trim END + vim9script + class Something this.count : number endclass END @@ -330,7 +341,9 @@ def Test_class_member_access() assert_equal(0, TextPos.counter) TextPos.AddToCounter(3) assert_equal(3, TextPos.counter) + assert_fails('echo TextPos.noSuchMember', 'E1338:') + assert_fails('TextPos.noSuchMember = 2', 'E1337:') assert_fails('TextPos.counter += 5', 'E1335') END v9.CheckScriptSuccess(lines) diff --git a/src/version.c b/src/version.c index d07e657c0..567958833 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1091, +/**/ 1090, /**/ 1089, diff --git a/src/vim9class.c b/src/vim9class.c index 94fe9e227..2e1cac0c4 100644 --- a/src/vim9class.c +++ b/src/vim9class.c @@ -569,8 +569,9 @@ cleanup: } /* - * Find member "name" in class "cl" and return its type. - * When not found t_any is returned. + * Find member "name" in class "cl", set "member_idx" to the member index and + * return its type. + * When not found "member_idx" is set to -1 and t_any is returned. */ type_T * class_member_type( @@ -591,6 +592,8 @@ class_member_type( return m->ocm_type; } } + + semsg(_(e_unknown_variable_str), name); return &t_any; } diff --git a/src/vim9compile.c b/src/vim9compile.c index 44403ece2..9105dcfaa 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1823,6 +1823,8 @@ compile_lhs( class_T *cl = (class_T *)lhs->lhs_type->tt_member; lhs->lhs_member_type = class_member_type(cl, after + 1, lhs->lhs_end, &lhs->lhs_member_idx); + if (lhs->lhs_member_idx < 0) + return FAIL; } else lhs->lhs_member_type = lhs->lhs_type->tt_member; |