summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_class.vim13
-rw-r--r--src/version.c2
-rw-r--r--src/vim9class.c7
-rw-r--r--src/vim9compile.c2
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;