Mercurial > vim
comparison src/evalfunc.c @ 19102:ba9f50bfda83 v8.2.0111
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Commit: https://github.com/vim/vim/commit/9b4a15d5dba354d2e1e02871470bad103f34769a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 11 16:05:23 2020 +0100
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Problem: VAR_SPECIAL is also used for booleans.
Solution: Add VAR_BOOL for better type checking.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 11 Jan 2020 16:15:04 +0100 |
parents | 91bb12995034 |
children | a51fee786930 |
comparison
equal
deleted
inserted
replaced
19101:7c682fab000b | 19102:ba9f50bfda83 |
---|---|
1065 int | 1065 int |
1066 non_zero_arg(typval_T *argvars) | 1066 non_zero_arg(typval_T *argvars) |
1067 { | 1067 { |
1068 return ((argvars[0].v_type == VAR_NUMBER | 1068 return ((argvars[0].v_type == VAR_NUMBER |
1069 && argvars[0].vval.v_number != 0) | 1069 && argvars[0].vval.v_number != 0) |
1070 || (argvars[0].v_type == VAR_SPECIAL | 1070 || (argvars[0].v_type == VAR_BOOL |
1071 && argvars[0].vval.v_number == VVAL_TRUE) | 1071 && argvars[0].vval.v_number == VVAL_TRUE) |
1072 || (argvars[0].v_type == VAR_STRING | 1072 || (argvars[0].v_type == VAR_STRING |
1073 && argvars[0].vval.v_string != NULL | 1073 && argvars[0].vval.v_string != NULL |
1074 && *argvars[0].vval.v_string != NUL)); | 1074 && *argvars[0].vval.v_string != NUL)); |
1075 } | 1075 } |
1809 break; | 1809 break; |
1810 case VAR_DICT: | 1810 case VAR_DICT: |
1811 n = argvars[0].vval.v_dict == NULL | 1811 n = argvars[0].vval.v_dict == NULL |
1812 || argvars[0].vval.v_dict->dv_hashtab.ht_used == 0; | 1812 || argvars[0].vval.v_dict->dv_hashtab.ht_used == 0; |
1813 break; | 1813 break; |
1814 case VAR_BOOL: | |
1814 case VAR_SPECIAL: | 1815 case VAR_SPECIAL: |
1815 n = argvars[0].vval.v_number != VVAL_TRUE; | 1816 n = argvars[0].vval.v_number != VVAL_TRUE; |
1816 break; | 1817 break; |
1817 | 1818 |
1818 case VAR_BLOB: | 1819 case VAR_BLOB: |
4316 break; | 4317 break; |
4317 case VAR_DICT: | 4318 case VAR_DICT: |
4318 rettv->vval.v_number = dict_len(argvars[0].vval.v_dict); | 4319 rettv->vval.v_number = dict_len(argvars[0].vval.v_dict); |
4319 break; | 4320 break; |
4320 case VAR_UNKNOWN: | 4321 case VAR_UNKNOWN: |
4322 case VAR_BOOL: | |
4321 case VAR_SPECIAL: | 4323 case VAR_SPECIAL: |
4322 case VAR_FLOAT: | 4324 case VAR_FLOAT: |
4323 case VAR_FUNC: | 4325 case VAR_FUNC: |
4324 case VAR_PARTIAL: | 4326 case VAR_PARTIAL: |
4325 case VAR_JOB: | 4327 case VAR_JOB: |
8339 { | 8341 { |
8340 int n = -1; | 8342 int n = -1; |
8341 | 8343 |
8342 switch (argvars[0].v_type) | 8344 switch (argvars[0].v_type) |
8343 { | 8345 { |
8344 case VAR_NUMBER: n = VAR_TYPE_NUMBER; break; | 8346 case VAR_NUMBER: n = VAR_TYPE_NUMBER; break; |
8345 case VAR_STRING: n = VAR_TYPE_STRING; break; | 8347 case VAR_STRING: n = VAR_TYPE_STRING; break; |
8346 case VAR_PARTIAL: | 8348 case VAR_PARTIAL: |
8347 case VAR_FUNC: n = VAR_TYPE_FUNC; break; | 8349 case VAR_FUNC: n = VAR_TYPE_FUNC; break; |
8348 case VAR_LIST: n = VAR_TYPE_LIST; break; | 8350 case VAR_LIST: n = VAR_TYPE_LIST; break; |
8349 case VAR_DICT: n = VAR_TYPE_DICT; break; | 8351 case VAR_DICT: n = VAR_TYPE_DICT; break; |
8350 case VAR_FLOAT: n = VAR_TYPE_FLOAT; break; | 8352 case VAR_FLOAT: n = VAR_TYPE_FLOAT; break; |
8351 case VAR_SPECIAL: | 8353 case VAR_BOOL: n = VAR_TYPE_BOOL; break; |
8352 if (argvars[0].vval.v_number == VVAL_FALSE | 8354 case VAR_SPECIAL: n = VAR_TYPE_NONE; break; |
8353 || argvars[0].vval.v_number == VVAL_TRUE) | |
8354 n = VAR_TYPE_BOOL; | |
8355 else | |
8356 n = VAR_TYPE_NONE; | |
8357 break; | |
8358 case VAR_JOB: n = VAR_TYPE_JOB; break; | 8355 case VAR_JOB: n = VAR_TYPE_JOB; break; |
8359 case VAR_CHANNEL: n = VAR_TYPE_CHANNEL; break; | 8356 case VAR_CHANNEL: n = VAR_TYPE_CHANNEL; break; |
8360 case VAR_BLOB: n = VAR_TYPE_BLOB; break; | 8357 case VAR_BLOB: n = VAR_TYPE_BLOB; break; |
8361 case VAR_UNKNOWN: | 8358 case VAR_UNKNOWN: |
8362 internal_error("f_type(UNKNOWN)"); | 8359 internal_error("f_type(UNKNOWN)"); |