Mercurial > vim
comparison src/testdir/test_vim9_assign.vim @ 23266:00f7cd9b6033 v8.2.2179
patch 8.2.2179: Vim9: crash when indexing a dict with a number
Commit: https://github.com/vim/vim/commit/4f5e39775616795ac7d1c01bf15a1bd316feb387
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Dec 21 17:30:50 2020 +0100
patch 8.2.2179: Vim9: crash when indexing a dict with a number
Problem: Vim9: crash when indexing a dict with a number.
Solution: Add ISN_STOREINDEX. (closes https://github.com/vim/vim/issues/7513)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 21 Dec 2020 17:45:04 +0100 |
parents | ac934fbacc0e |
children | 40f1d3f0c53e |
comparison
equal
deleted
inserted
replaced
23265:684de8fd484a | 23266:00f7cd9b6033 |
---|---|
531 CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') | 531 CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') |
532 CheckDefExecFailure(['var [v1, v2] = [1, 2]'], 'E1092:') | 532 CheckDefExecFailure(['var [v1, v2] = [1, 2]'], 'E1092:') |
533 | 533 |
534 # type becomes list<any> | 534 # type becomes list<any> |
535 var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] | 535 var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] |
536 | |
537 var lines =<< trim END | |
538 var d = {dd: test_null_list()} | |
539 d.dd[0] = 0 | |
540 END | |
541 CheckDefExecFailure(lines, 'E1147:', 2) | |
536 enddef | 542 enddef |
537 | 543 |
538 def Test_assignment_list_vim9script() | 544 def Test_assignment_list_vim9script() |
539 var lines =<< trim END | 545 var lines =<< trim END |
540 vim9script | 546 vim9script |
565 anydict.nest['this'] = 123 | 571 anydict.nest['this'] = 123 |
566 anydict.nest.that = 456 | 572 anydict.nest.that = 456 |
567 assert_equal({nest: {this: 123, that: 456}, nr: 0}, anydict) | 573 assert_equal({nest: {this: 123, that: 456}, nr: 0}, anydict) |
568 | 574 |
569 var lines =<< trim END | 575 var lines =<< trim END |
570 vim9script | |
571 var dd = {} | 576 var dd = {} |
572 dd.two = 2 | 577 dd.two = 2 |
573 assert_equal({two: 2}, dd) | 578 assert_equal({two: 2}, dd) |
574 END | 579 END |
575 CheckScriptSuccess(lines) | 580 CheckDefAndScriptSuccess(lines) |
581 | |
582 lines =<< trim END | |
583 var d = {dd: {}} | |
584 d.dd[0] = 2 | |
585 d.dd['x'] = 3 | |
586 d.dd.y = 4 | |
587 assert_equal({dd: {0: 2, x: 3, y: 4}}, d) | |
588 END | |
589 CheckDefAndScriptSuccess(lines) | |
576 | 590 |
577 lines =<< trim END | 591 lines =<< trim END |
578 var dd = {one: 1} | 592 var dd = {one: 1} |
579 dd.one) = 2 | 593 dd.one) = 2 |
580 END | 594 END |
639 return b:test | 653 return b:test |
640 enddef | 654 enddef |
641 assert_equal({a: 43}, FillDict()) | 655 assert_equal({a: 43}, FillDict()) |
642 END | 656 END |
643 CheckScriptSuccess(lines) | 657 CheckScriptSuccess(lines) |
658 | |
659 lines =<< trim END | |
660 var d = {dd: test_null_dict()} | |
661 d.dd[0] = 0 | |
662 END | |
663 CheckDefExecFailure(lines, 'E1103:', 2) | |
664 | |
665 lines =<< trim END | |
666 var d = {dd: 'string'} | |
667 d.dd[0] = 0 | |
668 END | |
669 CheckDefExecFailure(lines, 'E1148:', 2) | |
644 enddef | 670 enddef |
645 | 671 |
646 def Test_assignment_local() | 672 def Test_assignment_local() |
647 # Test in a separated file in order not to the current buffer/window/tab is | 673 # Test in a separated file in order not to the current buffer/window/tab is |
648 # changed. | 674 # changed. |