comparison src/vim9type.c @ 29780:9f8dd1b77563 v9.0.0229

patch 9.0.0229: Vim9: error message for missing type is not clear Commit: https://github.com/vim/vim/commit/62e0e2e54b34b618500be4521ab1c33e1c378b42 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 20 12:07:58 2022 +0100 patch 9.0.0229: Vim9: error message for missing type is not clear Problem: Vim9: error message for missing type is not clear. Solution: Mention the context. (issue https://github.com/vim/vim/issues/10944)
author Bram Moolenaar <Bram@vim.org>
date Sat, 20 Aug 2022 13:15:03 +0200
parents 49d8b54802f3
children d751e924cc29
comparison
equal deleted inserted replaced
29779:90a966f5c77a 29780:9f8dd1b77563
877 } 877 }
878 878
879 /* 879 /*
880 * Parse the member type: "<type>" and return "type" with the member set. 880 * Parse the member type: "<type>" and return "type" with the member set.
881 * Use "type_gap" if a new type needs to be added. 881 * Use "type_gap" if a new type needs to be added.
882 * "info" is extra information for an error message.
882 * Returns NULL in case of failure. 883 * Returns NULL in case of failure.
883 */ 884 */
884 static type_T * 885 static type_T *
885 parse_type_member( 886 parse_type_member(
886 char_u **arg, 887 char_u **arg,
887 type_T *type, 888 type_T *type,
888 garray_T *type_gap, 889 garray_T *type_gap,
889 int give_error) 890 int give_error,
890 { 891 char *info)
892 {
893 char_u *arg_start = *arg;
891 type_T *member_type; 894 type_T *member_type;
892 int prev_called_emsg = called_emsg; 895 int prev_called_emsg = called_emsg;
893 896
894 if (**arg != '<') 897 if (**arg != '<')
895 { 898 {
896 if (give_error) 899 if (give_error)
897 { 900 {
898 if (*skipwhite(*arg) == '<') 901 if (*skipwhite(*arg) == '<')
899 semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg); 902 semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg);
900 else 903 else
901 emsg(_(e_missing_type)); 904 semsg(_(e_missing_type_after_str), info);
902 } 905 }
903 return NULL; 906 return NULL;
904 } 907 }
905 *arg = skipwhite(*arg + 1); 908 *arg = skipwhite(*arg + 1);
906 909
910 913
911 *arg = skipwhite(*arg); 914 *arg = skipwhite(*arg);
912 if (**arg != '>' && called_emsg == prev_called_emsg) 915 if (**arg != '>' && called_emsg == prev_called_emsg)
913 { 916 {
914 if (give_error) 917 if (give_error)
915 emsg(_(e_missing_gt_after_type)); 918 semsg(_(e_missing_gt_after_type_str), arg_start);
916 return NULL; 919 return NULL;
917 } 920 }
918 ++*arg; 921 ++*arg;
919 922
920 if (type->tt_type == VAR_LIST) 923 if (type->tt_type == VAR_LIST)
969 case 'd': 972 case 'd':
970 if (len == 4 && STRNCMP(*arg, "dict", len) == 0) 973 if (len == 4 && STRNCMP(*arg, "dict", len) == 0)
971 { 974 {
972 *arg += len; 975 *arg += len;
973 return parse_type_member(arg, &t_dict_any, 976 return parse_type_member(arg, &t_dict_any,
974 type_gap, give_error); 977 type_gap, give_error, "dict");
975 } 978 }
976 break; 979 break;
977 case 'f': 980 case 'f':
978 if (len == 5 && STRNCMP(*arg, "float", len) == 0) 981 if (len == 5 && STRNCMP(*arg, "float", len) == 0)
979 { 982 {
1113 case 'l': 1116 case 'l':
1114 if (len == 4 && STRNCMP(*arg, "list", len) == 0) 1117 if (len == 4 && STRNCMP(*arg, "list", len) == 0)
1115 { 1118 {
1116 *arg += len; 1119 *arg += len;
1117 return parse_type_member(arg, &t_list_any, 1120 return parse_type_member(arg, &t_list_any,
1118 type_gap, give_error); 1121 type_gap, give_error, "list");
1119 } 1122 }
1120 break; 1123 break;
1121 case 'n': 1124 case 'n':
1122 if (len == 6 && STRNCMP(*arg, "number", len) == 0) 1125 if (len == 6 && STRNCMP(*arg, "number", len) == 0)
1123 { 1126 {