Skip to content

Commit 0ea0440

Browse files
committed
patch 8.2.2297: Vim9: cannot set 'number' to a boolean value
Problem: Vim9: cannot set 'number' to a boolean value. Solution: Use tv_get_bool(). (closes #7615)
1 parent 014f698 commit 0ea0440

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

src/evalvars.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,8 +1370,14 @@ ex_let_one(
13701370
|| opt_type == gov_hidden_bool
13711371
|| opt_type == gov_hidden_number)
13721372
&& (tv->v_type != VAR_STRING || !in_vim9script()))
1373-
// number, possibly hidden
1374-
n = (long)tv_get_number(tv);
1373+
{
1374+
if (opt_type == gov_bool || opt_type == gov_hidden_bool)
1375+
// bool, possibly hidden
1376+
n = (long)tv_get_bool(tv);
1377+
else
1378+
// number, possibly hidden
1379+
n = (long)tv_get_number(tv);
1380+
}
13751381

13761382
// Avoid setting a string option to the text "v:false" or similar.
13771383
// In Vim9 script also don't convert a number to string.

src/testdir/test_vim9_assign.vim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,15 @@ def Test_assignment()
161161
assert_equal(6, &g:ts)
162162
&g:ts += 2
163163
assert_equal(8, &g:ts)
164+
165+
&number = true
166+
assert_equal(true, &number)
167+
&number = 0
168+
assert_equal(false, &number)
169+
&number = 1
170+
assert_equal(true, &number)
171+
&number = false
172+
assert_equal(false, &number)
164173
END
165174
CheckDefAndScriptSuccess(lines)
166175

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2297,
753755
/**/
754756
2296,
755757
/**/

0 commit comments

Comments
 (0)