mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -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
20
src/eval.c
20
src/eval.c
@@ -1883,6 +1883,14 @@ set_var_lval(
|
||||
if (eval_variable(lp->ll_name, (int)STRLEN(lp->ll_name),
|
||||
lp->ll_sid, &tv, &di, EVAL_VAR_VERBOSE) == OK)
|
||||
{
|
||||
if (di != NULL && di->di_tv.v_type == VAR_TYPEALIAS)
|
||||
{
|
||||
semsg(_(e_using_typealias_as_variable),
|
||||
di->di_tv.vval.v_typealias->ta_name);
|
||||
clear_tv(&tv);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((di == NULL
|
||||
|| (!var_check_ro(di->di_flags, lp->ll_name, FALSE)
|
||||
&& !tv_check_lock(&di->di_tv, lp->ll_name, FALSE)))
|
||||
@@ -2013,6 +2021,7 @@ tv_op(typval_T *tv1, typval_T *tv2, char_u *op)
|
||||
case VAR_INSTR:
|
||||
case VAR_CLASS:
|
||||
case VAR_OBJECT:
|
||||
case VAR_TYPEALIAS:
|
||||
break;
|
||||
|
||||
case VAR_BLOB:
|
||||
@@ -5004,6 +5013,7 @@ check_can_index(typval_T *rettv, int evaluate, int verbose)
|
||||
case VAR_INSTR:
|
||||
case VAR_CLASS:
|
||||
case VAR_OBJECT:
|
||||
case VAR_TYPEALIAS:
|
||||
if (verbose)
|
||||
emsg(_(e_cannot_index_special_variable));
|
||||
return FAIL;
|
||||
@@ -5109,6 +5119,7 @@ eval_index_inner(
|
||||
case VAR_INSTR:
|
||||
case VAR_CLASS:
|
||||
case VAR_OBJECT:
|
||||
case VAR_TYPEALIAS:
|
||||
break; // not evaluating, skipping over subscript
|
||||
|
||||
case VAR_NUMBER:
|
||||
@@ -6046,6 +6057,7 @@ set_ref_in_item(
|
||||
case VAR_FLOAT:
|
||||
case VAR_STRING:
|
||||
case VAR_BLOB:
|
||||
case VAR_TYPEALIAS:
|
||||
case VAR_INSTR:
|
||||
// Types that do not contain any other item
|
||||
break;
|
||||
@@ -6329,6 +6341,13 @@ echo_string_core(
|
||||
*tofree = NULL;
|
||||
r = (char_u *)get_var_special_name(tv->vval.v_number);
|
||||
break;
|
||||
|
||||
case VAR_TYPEALIAS:
|
||||
*tofree = vim_strsave(tv->vval.v_typealias->ta_name);
|
||||
r = *tofree;
|
||||
if (r == NULL)
|
||||
r = (char_u *)"";
|
||||
break;
|
||||
}
|
||||
|
||||
if (--recurse == 0)
|
||||
@@ -7201,6 +7220,7 @@ item_copy(
|
||||
case VAR_INSTR:
|
||||
case VAR_CLASS:
|
||||
case VAR_OBJECT:
|
||||
case VAR_TYPEALIAS:
|
||||
copy_tv(from, to);
|
||||
break;
|
||||
case VAR_LIST:
|
||||
|
Reference in New Issue
Block a user