Commit Graph

7859 Commits

Author SHA1 Message Date
ZyX
6aa6e50075 eval: Fix linter errors 2017-03-29 10:08:45 +03:00
ZyX
506b938947 *: Make some more things const and with length 2017-03-29 10:08:44 +03:00
ZyX
3025431c81 eval: Make sure that v:_null_dict does not crash dictwatcher*()
Ref #4615
2017-03-29 10:08:44 +03:00
ZyX
a56f2d27e3 eval: Make dictionary watchers work with empty keys
Looks like dict_notifications_spec test used to depend on some state which
should not be preserved. Changed all `setup()` calls to `before_each()` and
added necessary state in addition to changes required to test empty keys.

Note: unit tests for tv_dict_watcher* are still needed.
2017-03-29 10:08:44 +03:00
ZyX
1e3e302dc2 eval: Move part of dictwatcher* functions to eval/typval 2017-03-29 10:08:44 +03:00
ZyX
5239616297 functests: Fix buf_functions test on Windows 2017-03-29 10:08:44 +03:00
ZyX
4bcee96347 *: Fix some Windows-specific warnings
Also fixed an error in path_fnamecmp().
2017-03-29 10:08:42 +03:00
ZyX
9ed9af7e11 eval/typval: More const qualifiers in tv_dict* function signatures 2017-03-29 10:08:06 +03:00
ZyX
56e51033ab unittests: Add tests for tv_list_idx_of_item 2017-03-29 10:08:06 +03:00
ZyX
e5edf07ec4 unittests: Add tests for tv_list_find*() functions
Additional modifications:

- More `const` qualifiers in tested functions.
- `tv_list_find_str()` second argument is more in-line with other
  `tv_list_find*()` functions.
2017-03-29 10:08:06 +03:00
ZyX
b3672ae2fc eval/typval: Add tv_list_equal() tests, compare NULL lists equal 2017-03-29 10:08:06 +03:00
ZyX
4f9e784427 unittests: Test tv_list_join() 2017-03-29 10:08:06 +03:00
ZyX
cf45c7bb05 unittests: Fix tests crash
Tests crash at some point without
- `after_each(collectgarbage)` right before “typval.c list copy() copies list
  correctly and converts items” test.
- Commenting out that test.
- Adding `collectgarbage()` after the test (what actually this commit does).

Adding `collectgarbage()` to top-level `after_each` block right after
`restore_allocators` makes running this file crash even if it is run alone.
2017-03-29 10:08:06 +03:00
ZyX
7ceebacb3f eval/typval,tests: Fix extending list with itself, add tests
Adds unit test for tv_list_extend and regression test for extend() VimL
function.
2017-03-29 10:08:06 +03:00
ZyX
56e4c2f67e unittests: Test tv_list_concat() 2017-03-29 10:08:06 +03:00
ZyX
f80a00469f eval/typval: Make tv_list_concat handle NULL lists correctly
Fixes some FIXMEs in eval/null_spec.lua.
2017-03-29 10:08:06 +03:00
ZyX
82e6cac5f9 functests: Add null_spec.lua from #4615
For now it is full of FIXMEs and tests for incorrect behaviour. Sorted out to
have FIXMEs in one place, commented crashing tests in other and correctly
working tests in the third one.
2017-03-29 10:08:06 +03:00
ZyX
9898f36aa3 unittests: Test tv_list_copy
Also found some bugs:

1. var_item_copy() always fails to copy v:_null_list and v:_null_dict. Fixing
   this should mean fixing `deepcopy(v:_null_list)` which should’ve been, but
   was not listed in #4615. This also fixes `deepcopy(v:_null_dict)`.
2. var_item_copy() crashes when trying to copy NULL string with `conv != NULL`.
3. `conv` argument is ignored when copying list unless `deep` is true, but it
   was not reflected in documentation.
4. `tv_dict_item_alloc_len()` allocated more memory then needed.
5. typvalt2lua was not able to handle self-referencing containers.
2017-03-29 10:08:06 +03:00
ZyX
9b8beaff02 unittests: Add tests for tv_list_insert*()/…append*() functions 2017-03-29 10:08:06 +03:00
ZyX
be360d8841 unittests: Add tests for tv_list_insert() 2017-03-29 10:08:06 +03:00
ZyX
d2639e1e1d unittests: Add tests for list watchers and list alloc/free/unref 2017-03-29 10:08:06 +03:00
ZyX
a394167177 unittests: Test tv_list_item_\* functions
To check that memory is free()d correctly.
2017-03-29 10:08:06 +03:00
ZyX
a32db8ed19 eval/typval: Add missing includes, also add a script to find them
Contains unfinished attempt to integrate IWYU (ref #549). To finish it different
job should be done, specifically:

- Instead of feeding IWYU with modified file a mirror source tree should be
  created with the help of CMake which will contain modified sources. This
  solves the problem with IWYU thinking that `*.generated.h` headers should be
  included in place of `*` headers.
- Build IWYU as all other third-party utilities.
- Make modified sources avoid problems with `nvim/func_attr.h` includes and
  various related tricks.

Current script may only be used for manual checks like this:

    ./scripts/check-includes.py \
        --generated-includes-dir build/include \
        --generated-includes-dir build/src/nvim/auto \
        --file src/nvim/eval/typval.c \
        -- -Isrc -Ibuild/include -Ibuild/src/nvim/auto \
           -DINCLUDE_GENERATED_DECLARATIONS

(it is also somewhat fine with `--file src/nvim/eval/typval.h`). I have no idea
why (I mean, why developer think that these lines are needed, why they are
suggested is pretty obvious: because there is typedef which mentions them before
structs are defined), but for typval.h it reports, among other things, that it
should add lines

    struct dictvar_S;
    struct listitem_S;
    struct listvar_S;
    struct listwatch_S;
2017-03-29 10:08:06 +03:00
ZyX
2ad4fba46d eval: Move copy_tv to eval/typval 2017-03-29 10:08:06 +03:00
ZyX
8b0fa64ed3 message: Remove incorrect assertion
It was there only to prove that *now* `len` argument is not used to forbid 
putting message into history (i.e. that Neovim behaviour did not change). After 
this commit it should be possible to use msg_puts_attr_len with len>=0 to put 
message into history should new code need this.
2017-03-29 10:08:06 +03:00
ZyX
40feac6efc message: Revise maxlen argument in msg_puts_attr_len
`attr` argument is enough to forbid putting message in history. Also forbid 
strings with NUL before `len` just in case (it appears that this does not ever 
happen).
2017-03-29 10:08:06 +03:00
ZyX
3a3816c990 cmake: Use CMAKE_CURRENT_LIST_DIR and remove vars used only once 2017-03-29 10:08:06 +03:00
ZyX
86fc4580b8 eval: Fix max_min functions
Found two bugs:

1. Multiple unneeded error messages, vim/vim#1039.
2. Unformatted error string, vim/vim#1040.
2017-03-29 10:08:06 +03:00
ZyX
c4fe656fef typval.h: Allow non-var expressions in TV_DICT_ITER first argument 2017-03-29 10:08:06 +03:00
ZyX
6cc3d59ec8 misc1: Refactor ask_yesno() 2017-03-29 10:08:06 +03:00
ZyX
31a3158d0b eval: Make sort always stable
Should fix test failures on QB:

    20:00:51,837 INFO  - not ok 420 - sort() sorts “wrong” values between -0.0001 and 0.0001, preserving order
    20:00:51,837 INFO  - # test/functional/eval/sort_spec.lua @ 21
    20:00:51,837 INFO  - # Failure message: test/functional/eval/sort_spec.lua:39: Expected objects to be the same.
    20:00:51,837 INFO  - # Passed in:
    20:00:51,837 INFO  - # (string) '[-1.0e-4, v:true, v:false, v:null, function('tr'), {'a': 42}, 'check', [], 1.0e-4]'
    20:00:51,837 INFO  - # Expected:
    20:00:51,837 INFO  - # (string) '[-1.0e-4, function('tr'), v:true, v:false, v:null, [], {'a': 42}, 'check', 1.0e-4]'
    20:00:51,837 INFO  - # stack traceback:
    20:00:51,837 INFO  - #     test/functional/eval/sort_spec.lua:39: in function <test/functional/eval/sort_spec.lua:22>
    20:00:51,837 INFO  - #
2017-03-29 10:08:06 +03:00
ZyX
5df35297f8 eval: Remove eval_expr() completely 2017-03-29 10:08:05 +03:00
ZyX
c8e63a8db8 eval: Move remaining get_tv_string* functions to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
50ebd1dff5 eval: Move free_tv to eval/typval.h, remove most of its usages 2017-03-29 10:08:05 +03:00
ZyX
233b0c93bb eval: Move get_tv_number[_chk] to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
1b3e13da5b eval: Refactor get_tv_lnum_buf 2017-03-29 10:08:05 +03:00
ZyX
7ee5cc7429 eval: Move get_tv_lnum and get_tv_float to eval/typval.h
Additionally

- Rename former tv_get_float to tv_get_float_chk due to name conflict (former
  get_tv_float is better suited for being tv_get_float).
- Add E907 error to get_tv_float() and test that it is being raised when
  appropriate.
2017-03-29 10:08:05 +03:00
ZyX
949f09bdbb eval: Move get_tv_string_buf() to eval/typval.c 2017-03-29 10:08:05 +03:00
ZyX
28dafe3ff0 eval,*: Move get_tv_string to typval.c
Function was renamed and changed to return `const char *`.
2017-03-29 10:08:05 +03:00
ZyX
5cdf7177ec eval: Move get_float_arg to typval.h
Assuming `inline` is there for a reason, so it is kept and function was moved to
typval.h and not to typval.c which does not have problems with #including
message.h.
2017-03-29 10:07:43 +03:00
ZyX
2dcfc439b2 eval: Split and move dict_add_nr_str to typval.c
Function was split into tv_dict_add_nr() and tv_dict_add_str().
2017-03-29 10:07:43 +03:00
ZyX
210342d795 eval: Move dict_add_list and dict_add_dict to typval.c 2017-03-29 10:07:43 +03:00
ZyX
983a5532ca eval: Move dict_set_keys_readonly to typval.c 2017-03-29 10:07:43 +03:00
ZyX
ecff8387f4 eval: Move get_dict_callback to typval.c 2017-03-29 10:07:43 +03:00
ZyX
54bd2e8b73 eval: Make setmatches() return -1 in case of some failures 2017-03-29 10:07:43 +03:00
ZyX
e18a578308 *: Move some dictionary functions to typval.h and use char*
Also fixes buffer reusage in setmatches() and complete().
2017-03-29 10:07:42 +03:00
ZyX
50a48f2a0e functests: Add tests for some *buf* functions 2017-03-29 10:05:06 +03:00
ZyX
fb146e80aa eval: Split eval.c into smaller files 2017-03-29 10:05:06 +03:00
Justin M. Keyes
18e7d55200 terminal.c:redraw(): Avoid invalid cursor col (#6379)
Removed the call to validate_cursor() because mb_check_adjust_col() is
already called in adjust_topline().

Closes #6378
References #6203

https://s3.amazonaws.com/archive.travis-ci.org/jobs/215498258/log.txt

    [  ERROR   ] ...ovim/neovim/test/functional/terminal/scrollback_spec.lua @ 386: 'scrollback' option set to 0 behaves as 1 (10621.17 ms)
    ==================== File /home/travis/build/neovim/neovim/build/log/ubsan.12836 ====================
    = =================================================================
    = ==12836==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62100002cd00 at pc 0x000000eafe90 bp 0x7ffc8661fe50 sp 0x7ffc8661fe48
    = READ of size 1 at 0x62100002cd00 thread T0
    =     #0 0xeafe8f in utf_head_off /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1457:7
    =     #1 0x6b890e in getvcol /home/travis/build/neovim/neovim/src/nvim/charset.c:1169:15
    =     #2 0x6bc777 in getvvcol /home/travis/build/neovim/neovim/src/nvim/charset.c:1336:5
    =     #3 0xfc067b in curs_columns /home/travis/build/neovim/neovim/src/nvim/move.c:730:5
    =     #4 0xfbc8db in validate_cursor /home/travis/build/neovim/neovim/src/nvim/move.c:510:5
    =     #5 0x14479ed in setcursor /home/travis/build/neovim/neovim/src/nvim/screen.c:6363:5
    =     #6 0x17fe054 in redraw /home/travis/build/neovim/neovim/src/nvim/terminal.c:1175:5
    =     #7 0x17f95e4 in terminal_enter /home/travis/build/neovim/neovim/src/nvim/terminal.c:392:3
    =     #8 0x70eb2b in edit /home/travis/build/neovim/neovim/src/nvim/edit.c:1300:7
    =     #9 0x11097d1 in normal_finish_command /home/travis/build/neovim/neovim/src/nvim/normal.c:947:13
    =     #10 0x1081191 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1138:3
    =     #11 0x170b813 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #12 0x103631b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:464:3
    =     #13 0xdfb7a8 in main /home/travis/build/neovim/neovim/src/nvim/main.c:552:3
    =     #14 0x2b8a3c85bf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287
    =     #15 0x447b25 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x447b25)
    =
    = 0x62100002cd00 is located 0 bytes to the right of 4096-byte region [0x62100002bd00,0x62100002cd00)
    = allocated by thread T0 here:
    =     #0 0x4f1e98 in malloc (/home/travis/build/neovim/neovim/build/bin/nvim+0x4f1e98)
    =     #1 0xf28774 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:84:15
    =     #2 0xf28934 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:118:15
    =     #3 0xec7be8 in mf_alloc_bhdr /home/travis/build/neovim/neovim/src/nvim/memfile.c:646:17
    =     #4 0xec58d4 in mf_new /home/travis/build/neovim/neovim/src/nvim/memfile.c:297:12
    =     #5 0xeda8a8 in ml_new_data /home/travis/build/neovim/neovim/src/nvim/memline.c:2697:16
    =     #6 0xed7beb in ml_open /home/travis/build/neovim/neovim/src/nvim/memline.c:349:8
    =     #7 0x643fcd in open_buffer /home/travis/build/neovim/neovim/src/nvim/buffer.c:109:7
    =     #8 0xa7038c in do_ecmd /home/travis/build/neovim/neovim/src/nvim/ex_cmds.c:2483:24
    =     #9 0xb5bb49 in do_exedit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6839:9
    =     #10 0xb7b6d8 in ex_edit /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:6767:3
    =     #11 0xb2a598 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2208:5
    =     #12 0xb08f47 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:602:20
    =     #13 0x109997b in nv_colon /home/travis/build/neovim/neovim/src/nvim/normal.c:4492:18
    =     #14 0x1081188 in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1135:3
    =     #15 0x170b813 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:58:26
    =     #16 0x103631b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:464:3
    =     #17 0xdfb7a8 in main /home/travis/build/neovim/neovim/src/nvim/main.c:552:3
    =     #18 0x2b8a3c85bf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287
    =
    = SUMMARY: AddressSanitizer: heap-buffer-overflow /home/travis/build/neovim/neovim/src/nvim/mbyte.c:1457:7 in utf_head_off
    = Shadow bytes around the buggy address:
    =   0x0c427fffd950: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =   0x0c427fffd990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    = =>0x0c427fffd9a0:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =   0x0c427fffd9f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    = Shadow byte legend (one shadow byte represents 8 application bytes):
    =   Addressable:           00
    =   Partially addressable: 01 02 03 04 05 06 07
    =   Heap left redzone:       fa
    =   Heap right redzone:      fb
    =   Freed heap region:       fd
    =   Stack left redzone:      f1
    =   Stack mid redzone:       f2
    =   Stack right redzone:     f3
    =   Stack partial redzone:   f4
    =   Stack after return:      f5
    =   Stack use after scope:   f8
    =   Global redzone:          f9
    =   Global init order:       f6
    =   Poisoned by user:        f7
    =   Container overflow:      fc
    =   Array cookie:            ac
    =   Intra object redzone:    bb
    =   ASan internal:           fe
    =   Left alloca redzone:     ca
    =   Right alloca redzone:    cb
    = ==12836==ABORTING
    =====================================================================================================
    ./test/helpers.lua:82: assertion failed!

    stack traceback:
    	./test/helpers.lua:82: in function 'check_logs'
    	./test/functional/helpers.lua:643: in function <./test/functional/helpers.lua:642>
2017-03-29 02:13:50 +02:00
lonerover
e86042ae17 vim-patch:7.4.2343 and mark NA patches (#6384)
vim-patch:7.4.2343

Problem:    Too many old file tests.
Solution:   Turn several into new style tests. (Yegappan Lakshmanan)

53f1673cd9
2017-03-29 01:30:54 +02:00