Mercurial > vim
comparison src/textprop.c @ 25302:4d3c68196d05 v8.2.3188
patch 8.2.3188: Vim9: argument types are not checked at compile time
Commit: https://github.com/vim/vim/commit/83494b4ac61898f687d6ef9dce4bad5802fb8e51
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Tue Jul 20 17:51:51 2021 +0200
patch 8.2.3188: Vim9: argument types are not checked at compile time
Problem: Vim9: argument types are not checked at compile time.
Solution: Add several more type checks, also at runtime. (Yegappan
Lakshmanan, closes #8587)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 20 Jul 2021 18:00:06 +0200 |
parents | acda780ffc3e |
children | e8e2c4d33b9b |
comparison
equal
deleted
inserted
replaced
25301:fe178301fc04 | 25302:4d3c68196d05 |
---|---|
156 f_prop_add(typval_T *argvars, typval_T *rettv UNUSED) | 156 f_prop_add(typval_T *argvars, typval_T *rettv UNUSED) |
157 { | 157 { |
158 linenr_T start_lnum; | 158 linenr_T start_lnum; |
159 colnr_T start_col; | 159 colnr_T start_col; |
160 | 160 |
161 if (in_vim9script() | |
162 && (check_for_number_arg(argvars, 0) == FAIL | |
163 || check_for_number_arg(argvars, 1) == FAIL | |
164 || check_for_dict_arg(argvars, 2) == FAIL)) | |
165 return; | |
166 | |
161 start_lnum = tv_get_number(&argvars[0]); | 167 start_lnum = tv_get_number(&argvars[0]); |
162 start_col = tv_get_number(&argvars[1]); | 168 start_col = tv_get_number(&argvars[1]); |
163 if (start_col < 1) | 169 if (start_col < 1) |
164 { | 170 { |
165 semsg(_(e_invalid_col), (long)start_col); | 171 semsg(_(e_invalid_col), (long)start_col); |
530 * prop_clear({lnum} [, {lnum_end} [, {bufnr}]]) | 536 * prop_clear({lnum} [, {lnum_end} [, {bufnr}]]) |
531 */ | 537 */ |
532 void | 538 void |
533 f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED) | 539 f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED) |
534 { | 540 { |
535 linenr_T start = tv_get_number(&argvars[0]); | 541 linenr_T start; |
536 linenr_T end = start; | 542 linenr_T end; |
537 linenr_T lnum; | 543 linenr_T lnum; |
538 buf_T *buf = curbuf; | 544 buf_T *buf = curbuf; |
539 int did_clear = FALSE; | 545 int did_clear = FALSE; |
540 | 546 |
547 if (in_vim9script() | |
548 && (check_for_number_arg(argvars, 0) == FAIL | |
549 || check_for_opt_number_arg(argvars, 1) == FAIL | |
550 || (argvars[1].v_type != VAR_UNKNOWN | |
551 && check_for_opt_dict_arg(argvars, 2) == FAIL))) | |
552 return; | |
553 | |
554 start = tv_get_number(&argvars[0]); | |
555 end = start; | |
541 if (argvars[1].v_type != VAR_UNKNOWN) | 556 if (argvars[1].v_type != VAR_UNKNOWN) |
542 { | 557 { |
543 end = tv_get_number(&argvars[1]); | 558 end = tv_get_number(&argvars[1]); |
544 if (argvars[2].v_type != VAR_UNKNOWN) | 559 if (argvars[2].v_type != VAR_UNKNOWN) |
545 { | 560 { |
772 linenr_T lnum; | 787 linenr_T lnum; |
773 buf_T *buf = curbuf; | 788 buf_T *buf = curbuf; |
774 | 789 |
775 if (in_vim9script() | 790 if (in_vim9script() |
776 && (check_for_number_arg(argvars, 0) == FAIL | 791 && (check_for_number_arg(argvars, 0) == FAIL |
777 || (argvars[1].v_type != VAR_UNKNOWN && | 792 || check_for_opt_dict_arg(argvars, 1) == FAIL)) |
778 check_for_dict_arg(argvars, 1) == FAIL))) | |
779 return; | 793 return; |
780 | 794 |
781 lnum = tv_get_number(&argvars[0]); | 795 lnum = tv_get_number(&argvars[0]); |
782 if (argvars[1].v_type != VAR_UNKNOWN) | 796 if (argvars[1].v_type != VAR_UNKNOWN) |
783 { | 797 { |
830 int id = -1; | 844 int id = -1; |
831 int type_id = -1; | 845 int type_id = -1; |
832 int both; | 846 int both; |
833 | 847 |
834 rettv->vval.v_number = 0; | 848 rettv->vval.v_number = 0; |
849 | |
850 if (in_vim9script() | |
851 && (check_for_dict_arg(argvars, 0) == FAIL | |
852 || check_for_opt_number_arg(argvars, 1) == FAIL | |
853 || (argvars[1].v_type != VAR_UNKNOWN | |
854 && check_for_opt_number_arg(argvars, 2) == FAIL))) | |
855 return; | |
856 | |
835 if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL) | 857 if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL) |
836 { | 858 { |
837 emsg(_(e_invarg)); | 859 emsg(_(e_invarg)); |
838 return; | 860 return; |
839 } | 861 } |