diff options
Diffstat (limited to 'src/typval.c')
-rw-r--r-- | src/typval.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/typval.c b/src/typval.c index 08dd2313f2..da5d7affb7 100644 --- a/src/typval.c +++ b/src/typval.c @@ -92,6 +92,10 @@ free_tv(typval_T *varp) object_unref(varp->vval.v_object); break; + case VAR_TYPEALIAS: + typealias_unref(varp->vval.v_typealias); + break; + case VAR_NUMBER: case VAR_FLOAT: case VAR_ANY: @@ -169,6 +173,10 @@ clear_tv(typval_T *varp) object_unref(varp->vval.v_object); varp->vval.v_object = NULL; break; + case VAR_TYPEALIAS: + typealias_unref(varp->vval.v_typealias); + varp->vval.v_typealias = NULL; + break; case VAR_UNKNOWN: case VAR_ANY: case VAR_VOID: @@ -262,6 +270,10 @@ tv_get_bool_or_number_chk( case VAR_VOID: emsg(_(e_cannot_use_void_value)); break; + case VAR_TYPEALIAS: + semsg(_(e_using_typealias_as_variable), + varp->vval.v_typealias->ta_name); + break; case VAR_UNKNOWN: case VAR_ANY: case VAR_INSTR: @@ -379,6 +391,10 @@ tv_get_float_chk(typval_T *varp, int *error) case VAR_VOID: emsg(_(e_cannot_use_void_value)); break; + case VAR_TYPEALIAS: + semsg(_(e_using_typealias_as_variable), + varp->vval.v_typealias->ta_name); + break; case VAR_UNKNOWN: case VAR_ANY: case VAR_INSTR: @@ -1129,6 +1145,7 @@ tv_get_string_buf_chk_strict(typval_T *varp, char_u *buf, int strict) case VAR_VOID: emsg(_(e_cannot_use_void_value)); break; + case VAR_TYPEALIAS: case VAR_UNKNOWN: case VAR_ANY: case VAR_INSTR: @@ -1290,6 +1307,15 @@ copy_tv(typval_T *from, typval_T *to) ++to->vval.v_dict->dv_refcount; } break; + case VAR_TYPEALIAS: + if (from->vval.v_typealias == NULL) + to->vval.v_typealias = NULL; + else + { + to->vval.v_typealias = from->vval.v_typealias; + ++to->vval.v_typealias->ta_refcount; + } + break; case VAR_VOID: emsg(_(e_cannot_use_void_value)); break; @@ -1596,6 +1622,7 @@ typval_compare_null(typval_T *tv1, typval_T *tv2) case VAR_FLOAT: if (!in_vim9script()) return tv->vval.v_float == 0.0; break; + case VAR_TYPEALIAS: return tv->vval.v_typealias == NULL; default: break; } } @@ -2069,6 +2096,9 @@ tv_equal( case VAR_FUNC: return tv1->vval.v_string == tv2->vval.v_string; + case VAR_TYPEALIAS: + return tv1->vval.v_typealias == tv2->vval.v_typealias; + case VAR_UNKNOWN: case VAR_ANY: case VAR_VOID: |