diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-12-08 15:32:33 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-12-08 15:32:33 +0000 |
commit | 00b28d6c23d8e662cab27e461825777c0a2e387a (patch) | |
tree | ba11ed85b20cf03491e0f24b6d5bf348d2c19388 /src/typval.c | |
parent | 038e6d20e680ce8c850d07f6b035c4e1904c1201 (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.c | 46 |
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; |