diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-02 20:01:27 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-02 20:01:27 +0000 |
commit | 381692b6f1c2ec9b73a139500286ddc9347a1c01 (patch) | |
tree | 96145ec58ad29dd86bbc80e557377333c07d059b /src/proto | |
parent | a1c519518050383e7d319514a3ff6c42a9154c48 (diff) |
patch 8.2.4286: Vim9: strict type checking after copy() and deepcopy()v8.2.4286
Problem: Vim9: strict type checking after copy() and deepcopy().
Solution: Allow type to change after making a copy. (closes #9644)
Diffstat (limited to 'src/proto')
-rw-r--r-- | src/proto/dict.pro | 2 | ||||
-rw-r--r-- | src/proto/eval.pro | 2 | ||||
-rw-r--r-- | src/proto/list.pro | 2 | ||||
-rw-r--r-- | src/proto/vim9type.pro | 1 |
4 files changed, 4 insertions, 3 deletions
diff --git a/src/proto/dict.pro b/src/proto/dict.pro index d6cf152263..7db011d210 100644 --- a/src/proto/dict.pro +++ b/src/proto/dict.pro @@ -12,7 +12,7 @@ void dict_free_items(int copyID); dictitem_T *dictitem_alloc(char_u *key); void dictitem_remove(dict_T *dict, dictitem_T *item); void dictitem_free(dictitem_T *item); -dict_T *dict_copy(dict_T *orig, int deep, int copyID); +dict_T *dict_copy(dict_T *orig, int deep, int top, int copyID); int dict_wrong_func_name(dict_T *d, typval_T *tv, char_u *name); int dict_add(dict_T *d, dictitem_T *item); int dict_add_number(dict_T *d, char *key, varnumber_T nr); diff --git a/src/proto/eval.pro b/src/proto/eval.pro index abb9c565e2..8be58855d7 100644 --- a/src/proto/eval.pro +++ b/src/proto/eval.pro @@ -69,7 +69,7 @@ int eval_isnamec(int c); int eval_isnamec1(int c); int eval_isdictc(int c); int handle_subscript(char_u **arg, char_u *name_start, typval_T *rettv, evalarg_T *evalarg, int verbose); -int item_copy(typval_T *from, typval_T *to, int deep, int copyID); +int item_copy(typval_T *from, typval_T *to, int deep, int top, int copyID); void echo_one(typval_T *rettv, int with_space, int *atstart, int *needclr); void ex_echo(exarg_T *eap); void ex_echohl(exarg_T *eap); diff --git a/src/proto/list.pro b/src/proto/list.pro index 5b7414bce2..468775e59a 100644 --- a/src/proto/list.pro +++ b/src/proto/list.pro @@ -39,7 +39,7 @@ int list_extend(list_T *l1, list_T *l2, listitem_T *bef); int list_concat(list_T *l1, list_T *l2, typval_T *tv); list_T *list_slice(list_T *ol, long n1, long n2); int list_slice_or_index(list_T *list, int range, varnumber_T n1_arg, varnumber_T n2_arg, int exclusive, typval_T *rettv, int verbose); -list_T *list_copy(list_T *orig, int deep, int copyID); +list_T *list_copy(list_T *orig, int deep, int top, int copyID); void vimlist_remove(list_T *l, listitem_T *item, listitem_T *item2); char_u *list2string(typval_T *tv, int copyID, int restore_copyID); int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int restore_copyID, int copyID); diff --git a/src/proto/vim9type.pro b/src/proto/vim9type.pro index 61e38e0786..fb3cb8d145 100644 --- a/src/proto/vim9type.pro +++ b/src/proto/vim9type.pro @@ -2,6 +2,7 @@ void clear_type_list(garray_T *gap); type_T *alloc_type(type_T *type); void free_type(type_T *type); +void set_tv_type(typval_T *tv, type_T *type); type_T *get_list_type(type_T *member_type, garray_T *type_gap); type_T *get_dict_type(type_T *member_type, garray_T *type_gap); type_T *alloc_func_type(type_T *ret_type, int argcount, garray_T *type_gap); |