Commit Graph

26 Commits

Author SHA1 Message Date
ZyX
3025431c81 eval: Make sure that v:_null_dict does not crash dictwatcher*()
Ref #4615
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
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
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
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
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
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
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
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
fb146e80aa eval: Split eval.c into smaller files 2017-03-29 10:05:06 +03:00