summaryrefslogtreecommitdiffstats
path: root/src/typval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-12-08 15:32:33 +0000
committerBram Moolenaar <Bram@vim.org>2022-12-08 15:32:33 +0000
commit00b28d6c23d8e662cab27e461825777c0a2e387a (patch)
treeba11ed85b20cf03491e0f24b6d5bf348d2c19388 /src/typval.c
parent038e6d20e680ce8c850d07f6b035c4e1904c1201 (diff)
patch 9.0.1031: Vim9 class is not implemented yetv9.0.1031
Problem: Vim9 class is not implemented yet. Solution: Add very basic class support.
Diffstat (limited to 'src/typval.c')
-rw-r--r--src/typval.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/typval.c b/src/typval.c
index b1a0060467..6faebe4015 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -84,6 +84,13 @@ free_tv(typval_T *varp)
channel_unref(varp->vval.v_channel);
break;
#endif
+ case VAR_CLASS:
+ class_unref(varp);
+ break;
+ case VAR_OBJECT:
+ object_unref(varp->vval.v_object);
+ break;
+
case VAR_NUMBER:
case VAR_FLOAT:
case VAR_ANY:
@@ -153,6 +160,12 @@ clear_tv(typval_T *varp)
case VAR_INSTR:
VIM_CLEAR(varp->vval.v_instr);
break;
+ case VAR_CLASS:
+ class_unref(varp);
+ break;
+ case VAR_OBJECT:
+ object_unref(varp->vval.v_object);
+ break;
case VAR_UNKNOWN:
case VAR_ANY:
case VAR_VOID:
@@ -234,6 +247,12 @@ tv_get_bool_or_number_chk(typval_T *varp, int *denote, int want_bool)
case VAR_BLOB:
emsg(_(e_using_blob_as_number));
break;
+ case VAR_CLASS:
+ emsg(_(e_using_class_as_number));
+ break;
+ case VAR_OBJECT:
+ emsg(_(e_using_object_as_number));
+ break;
case VAR_VOID:
emsg(_(e_cannot_use_void_value));
break;
@@ -333,6 +352,12 @@ tv_get_float_chk(typval_T *varp, int *error)
case VAR_BLOB:
emsg(_(e_using_blob_as_float));
break;
+ case VAR_CLASS:
+ emsg(_(e_using_class_as_float));
+ break;
+ case VAR_OBJECT:
+ emsg(_(e_using_object_as_float));
+ break;
case VAR_VOID:
emsg(_(e_cannot_use_void_value));
break;
@@ -1029,6 +1054,12 @@ tv_get_string_buf_chk_strict(typval_T *varp, char_u *buf, int strict)
case VAR_BLOB:
emsg(_(e_using_blob_as_string));
break;
+ case VAR_CLASS:
+ emsg(_(e_using_class_as_string));
+ break;
+ case VAR_OBJECT:
+ emsg(_(e_using_object_as_string));
+ break;
case VAR_JOB:
#ifdef FEAT_JOB_CHANNEL
if (in_vim9script())
@@ -1158,6 +1189,14 @@ copy_tv(typval_T *from, typval_T *to)
to->vval.v_instr = from->vval.v_instr;
break;
+ case VAR_CLASS:
+ copy_class(from, to);
+ break;
+
+ case VAR_OBJECT:
+ copy_object(from, to);
+ break;
+
case VAR_STRING:
case VAR_FUNC:
if (from->vval.v_string == NULL)
@@ -1878,6 +1917,13 @@ tv_equal(
case VAR_INSTR:
return tv1->vval.v_instr == tv2->vval.v_instr;
+ case VAR_CLASS:
+ return tv1->vval.v_class == tv2->vval.v_class;
+
+ case VAR_OBJECT:
+ // TODO: compare values
+ return tv1->vval.v_object == tv2->vval.v_object;
+
case VAR_PARTIAL:
return tv1->vval.v_partial == tv2->vval.v_partial;