summaryrefslogtreecommitdiffstats
path: root/src/typval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/typval.c')
-rw-r--r--src/typval.c30
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: