mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 9.0.2076: Vim9: No support for type aliases
Problem: Vim9: No support for type aliases Solution: Implement :type command A type definition is giving a name to a type specification. This also known type alias. :type ListOfStrings = list<string> The type alias can be used wherever a built-in type can be used. The type alias name must start with an upper case character. closes: #13407 Signed-off-by: Christian Brabandt <cb@256bit.org> Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
committed by
Christian Brabandt
parent
4bca4897a1
commit
ec3cebbd2b
30
src/typval.c
30
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:
|
||||
|
Reference in New Issue
Block a user