0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 9.0.1031: Vim9 class is not implemented yet

Problem:    Vim9 class is not implemented yet.
Solution:   Add very basic class support.
This commit is contained in:
Bram Moolenaar
2022-12-08 15:32:33 +00:00
parent 038e6d20e6
commit 00b28d6c23
29 changed files with 1066 additions and 74 deletions

View File

@@ -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;