forked from aniani/vim
		
	patch 8.2.4304: Vim9: slice() makes a copy but doesn't change the type
Problem: Vim9: slice() makes a copy but doesn't change the type. Solution: Change the declared type like copy(). (closes #9696)
This commit is contained in:
		| @@ -1169,6 +1169,27 @@ ret_first_arg(int argcount, | |||||||
|     return &t_void; |     return &t_void; | ||||||
| } | } | ||||||
|     static type_T * |     static type_T * | ||||||
|  | ret_slice(int argcount, | ||||||
|  | 	type2_T *argtypes, | ||||||
|  | 	type_T	**decl_type) | ||||||
|  | { | ||||||
|  |     if (argcount > 0) | ||||||
|  |     { | ||||||
|  | 	if (argtypes[0].type_decl != NULL) | ||||||
|  | 	{ | ||||||
|  | 	    switch (argtypes[0].type_decl->tt_type) | ||||||
|  | 	    { | ||||||
|  | 		case VAR_STRING: *decl_type = &t_string; break; | ||||||
|  | 		case VAR_BLOB: *decl_type = &t_blob; break; | ||||||
|  | 		case VAR_LIST: *decl_type = &t_list_any; break; | ||||||
|  | 		default: break; | ||||||
|  | 	    } | ||||||
|  | 	} | ||||||
|  | 	return argtypes[0].type_curr; | ||||||
|  |     } | ||||||
|  |     return &t_void; | ||||||
|  | } | ||||||
|  |     static type_T * | ||||||
| ret_copy(int argcount, | ret_copy(int argcount, | ||||||
| 	type2_T *argtypes, | 	type2_T *argtypes, | ||||||
| 	type_T	**decl_type) | 	type_T	**decl_type) | ||||||
| @@ -2292,7 +2313,7 @@ static funcentry_T global_functions[] = | |||||||
|     {"sinh",		1, 1, FEARG_1,	    arg1_float_or_nr, |     {"sinh",		1, 1, FEARG_1,	    arg1_float_or_nr, | ||||||
| 			ret_float,	    FLOAT_FUNC(f_sinh)}, | 			ret_float,	    FLOAT_FUNC(f_sinh)}, | ||||||
|     {"slice",		2, 3, FEARG_1,	    arg23_slice, |     {"slice",		2, 3, FEARG_1,	    arg23_slice, | ||||||
| 			ret_first_arg,	    f_slice}, | 			ret_slice,	    f_slice}, | ||||||
|     {"sort",		1, 3, FEARG_1,	    arg13_sortuniq, |     {"sort",		1, 3, FEARG_1,	    arg13_sortuniq, | ||||||
| 			ret_first_arg,	    f_sort}, | 			ret_first_arg,	    f_sort}, | ||||||
|     {"sound_clear",	0, 0, 0,	    NULL, |     {"sound_clear",	0, 0, 0,	    NULL, | ||||||
|   | |||||||
| @@ -3619,6 +3619,9 @@ def Test_slice() | |||||||
|   assert_equal([], slice(range(6), 1, -5)) |   assert_equal([], slice(range(6), 1, -5)) | ||||||
|   assert_equal([], slice(range(6), 1, -6)) |   assert_equal([], slice(range(6), 1, -6)) | ||||||
|  |  | ||||||
|  |   var lds: list<dict<string>> = [{key: 'value'}] | ||||||
|  |   assert_equal(['val'], lds->slice(0, 1)->map((_, v) => 'val')) | ||||||
|  |  | ||||||
|   assert_equal(0z1122334455, slice(0z001122334455, 1)) |   assert_equal(0z1122334455, slice(0z001122334455, 1)) | ||||||
|   assert_equal(0z112233, slice(0z001122334455, 1, 4)) |   assert_equal(0z112233, slice(0z001122334455, 1, 4)) | ||||||
|   assert_equal(0z11223344, slice(0z001122334455, 1, -1)) |   assert_equal(0z11223344, slice(0z001122334455, 1, -1)) | ||||||
|   | |||||||
| @@ -746,6 +746,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     4304, | ||||||
| /**/ | /**/ | ||||||
|     4303, |     4303, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user