Commit Graph

641 Commits

Author SHA1 Message Date
ZyX
6584fb723a eval/typval_encode: Use TYPVAL_ENCODE_CONV_EMPTY_DICT for partials 2017-01-06 22:48:50 +03:00
ZyX
c93ce07628 *: Remove // fname() comments near typval_encode includes 2017-01-04 19:04:15 +03:00
ZyX
efc624c2fe eval: Fix errorneous early exit when converting lists and dictionaries 2017-01-03 17:28:57 +03:00
ZyX
a5bdd64a5e eval: Fix unused variable error in release builds 2017-01-03 07:14:54 +03:00
ZyX
ff8944105d eval/typval_encode: Refactor arguments to argument macroses
Fixed local test failures somewhere in process.
2017-01-03 06:39:23 +03:00
ZyX
5ba24318e2 eval: Do not free partial contents if partial is still referenced
Should fix some tests, including core/job_partial tests.
2017-01-03 06:39:23 +03:00
ZyX
e2d81cc479 eval: Do not free partial lists as lists 2017-01-03 06:39:23 +03:00
ZyX
901e7805ee eval: Fix case when cur_mpsv is NULL
Should only happen when clearing VAR_FUNC typval which is not placed inside 
a container.
2017-01-03 06:39:23 +03:00
ZyX
759e736b0a eval/typval_encode: Fix infinite loop
Occurs when trying to dump a partial with attached self dictionary which
references that partial. “Infinite” loop should normally result in Neovim killed
by OOM killer.

Also moved the place when partials are unreferenced by clear_tv: from
…FUNC_START to …FUNC_END.
2017-01-03 06:39:23 +03:00
ZyX
b3163d06b3 eval/typval_encode: Refactor big-big macros into .c.h file
This makes gdb backtraces much more meaningful: specifically I now know at which 
line it crashes in place of seeing that it crashes at 
TYPVAL_ENCODE_DEFINE_CONV_FUNCTIONS macros invocation.
2017-01-03 06:39:23 +03:00
ZyX
c5c75513b8 eval/typval_encode: Make partial conversions not recursive
Is known to crash in the current state.

Ref #5825.
2017-01-03 06:39:23 +03:00
James McCoy
af2b5abcd6 lint 2017-01-02 07:18:18 -05:00
James McCoy
945540b782 vim-patch:7.4.1868
Problem:    Setting really_exiting causes memory leaks to be reported.
Solution:   Add the in_free_all_mem flag.

b89a25f17e
2017-01-01 23:20:31 -05:00
James McCoy
1feaa450cb vim-patch:7.4.1866
Problem:    Invalid memory access when exiting with EXITFREE defined.
            (Dominique Pelle)
Solution:   Set "really_exiting" and skip error messages.

a96732150c

This fails to build, due to a00c2e0ecb
removing really_exiting from globals.h, but the next commit fixes the
build failure.
2017-01-01 23:20:24 -05:00
James McCoy
46235a30ed lint 2016-12-28 14:57:40 -05:00
James McCoy
de025d6dd0 vim-patch:7.4.2277
Problem:    Memory leak in getbufinfo() when there is a sign. (Dominique
            Pelle)
Solution:   Remove extra vim_strsave().

6a402edbeb
2016-12-28 14:57:39 -05:00
James McCoy
fe03ce23bf vim-patch:7.4.2273
Problem:    getwininfo() and getbufinfo() are inefficient.
Solution:   Do not make a copy of all window/buffer-local options.  Make it
            possible to get them with gettabwinvar() or getbufvar().

3056735ae8
2016-12-28 14:57:39 -05:00
James McCoy
03ed7e1eba vim-patch:7.4.2272
Problem:    getbufinfo(), getwininfo() and gettabinfo() are inefficient.
Solution:   Instead of making a copy of the variables dictionary, use a
            reference.

9f8187c335
2016-12-28 14:57:39 -05:00
James McCoy
c4c894b2fa vim-patch:7.4.2226
Problem:    The field names used by getbufinfo(), gettabinfo() and
            getwininfo() are not consistent.
Solution:   Use bufnr, winnr and tabnr. (Yegappan Lakshmanan)

3392883770
2016-12-28 14:57:39 -05:00
James McCoy
4453aa0d29 vim-patch:7.4.2215
Problem:    It's not easy to find out if a window is a quickfix or location
            list window.
Solution:   Add "loclist" and "quickfix" entries to the dict returnec by
            getwininfo(). (Yegappan Lakshmanan)

386600f0cb
2016-12-28 14:57:38 -05:00
James McCoy
0046641070 vim-patch:7.4.2204
Problem:    It is not easy to get information about buffers, windows and
            tabpages.
Solution:   Add getbufinfo(), getwininfo() and gettabinfo(). (Yegappan
            Lakshmanan)

b5ae48e9ff
2016-12-28 14:57:38 -05:00
James McCoy
3224ade9c3 lint 2016-12-27 14:10:28 -05:00
James McCoy
29d7a59711 vim-patch:7.4.1768
Problem:    Arguments of setqflist() are not checked properly.
Solution:   Add better checks, add a test. (Nikolai Pavlov, Hirohito Higashi,
            closes vim/vim#661)

d106e5ba7f
2016-12-27 14:10:01 -05:00
lonerover
a6b14dbb0b vim-patch:7.4.1816 (#5833)
Problem:    Looping over a null list throws an error.
Solution:   Skip over the for loop.

d8585eded6
2016-12-26 22:15:44 -05:00
Justin M. Keyes
43ba7f4d98 eval.c: set_selfdict(): Fix invalid memory access. 2016-12-14 20:52:18 +01:00
Michael Ennen
5e4eb18eb0 Add some tests and cleanup. 2016-12-12 10:17:35 -05:00
Björn Linse
0f681c80e1 Make partials work with jobs, timers, and dictwatchers. 2016-12-12 10:17:35 -05:00
Michael Ennen
a21c687661 Fixes. 2016-12-12 10:17:35 -05:00
Michael Ennen
6c5dd6827f vim-patch:7.4.1875
Problem:    Comparing functions and partials doesn't work well.
Solution:   Add tests. (Nikolai Pavlov)  Compare the dict and arguments in the
            partial.

8e759ba865
2016-12-12 10:17:35 -05:00
Michael Ennen
c52856af2c vim-patch:7.4.1842
Problem:    get() works for Partial but not for Funcref.
Solution:   Accept Funcref.  Also return the function itself. (Nikolai Pavlov)

03e19a04ac
2016-12-12 10:17:35 -05:00
Michael Ennen
02c58d8a07 vim-patch:7.4.1839
Problem:    Cannot get the items stored in a partial.
Solution:   Support using get() on a partial.

2bbf8eff6f
2016-12-12 10:17:35 -05:00
Michael Ennen
c82dc7a6fd vim-patch:7.4.1836
Problem:    When using a partial on a dictionary it always gets bound to that
            dictionary.
Solution:   Make a difference between binding a function to a dictionary
            explicitly or automatically.

1d429610bf
2016-12-12 10:17:35 -05:00
Michael Ennen
25438f149f vim-patch:7.4.1719
Problem:    Leaking memory when there is a cycle involving a job and a
            partial.
Solution:   Add a copyID to job and channel.  Set references in items referred
            by them.  Go through all jobs and channels to find unreferenced
            items.  Also, decrement reference counts when garbage collecting.

107e1eef1d
2016-12-12 10:17:35 -05:00
Michael Ennen
e97e24c77e vim-patch:7.4.1718
Problem:    Coverity: not using return value of set_ref_in_item().
Solution:   Use the return value.

d56374e25d
2016-12-12 10:17:35 -05:00
Michael Ennen
0645787741 vim-patch:7.4.1715
Problem:    Double free when a partial is in a cycle with a list or dict.
            (Nikolai Pavlov)
Solution:   Do not free a nested list or dict used by the partial.

ddecc25947
2016-12-12 10:17:35 -05:00
Michael Ennen
c6bc1e7bab vim-patch:7.4.1645
Problem:    When a dict contains a partial it can't be redefined as a
            function. (Nikolai Pavlov)
Solution:   Remove the partial when overwriting with a function.

c5fbe8af4c
2016-12-12 10:17:35 -05:00
Michael Ennen
9d91218213 vim-patch:7.4.1639
Problem:    Invoking garbage collection may cause a double free.
Solution:   Don't free the dict in a partial when recursive is FALSE.

5f436fcf99
2016-12-12 10:17:35 -05:00
Michael Ennen
1945013eb7 vim-patch:7.4.1638
Problem:    When binding a function to a dict the reference count is wrong.
Solution:   Decrement dict reference count, only reference the function when
            actually making a copy. (Ken Takata)

e4eb6ff089
2016-12-12 10:17:35 -05:00
Michael Ennen
3213b28c01 vim-patch:7.4.1607
Problem:    Comparing a function that exists on two dicts is not backwards
            compatible. (Thinca)
Solution:   Only compare the function, not what the partial adds.

f0e86a0dbd
2016-12-12 10:17:35 -05:00
Michael Ennen
5241ca7d7a vim-patch:7.4.1606
Problem:    Having type() handle a Funcref that is or isn't a partial
            differently causes problems for existing scripts.
Solution:   Make type() return the same value. (Thinca)

953cc7fb13
2016-12-12 10:17:35 -05:00
Michael Ennen
86706011a6 vim-patch:7.4.1590
Problem:    Warning for shadowed variable. (Christian Brabandt)
Solution:   Move the variable into a local block.

3f242a844e
2016-12-12 10:17:35 -05:00
Michael Ennen
531249a4ac vim-patch:7.4.1589
Problem:    Combining dict and args with partial doesn't always work.
Solution:   Use the arguments from the partial.

9e63f61cb0
2016-12-12 10:17:35 -05:00
Michael Ennen
cf2701b269 vim-patch:7.4.1586
Problem:    Nesting partials doesn't work.
Solution:   Append arguments. (Ken Takata)

8a1bb04637
2016-12-12 10:17:35 -05:00
Michael Ennen
27b2fb944a vim-patch:7.4.1585
Problem:    Partial is not recognized everywhere.
Solution:   Check for partial in trans_function_name(). (Yasuhiro Matsumoto)
            Add a test.

d22a18928e
2016-12-12 10:17:35 -05:00
Michael Ennen
e2258598ca vim-patch:7.4.1582
Problem:    Get E923 when using function(dict.func, [], dict). (Kent Sibilev)
            Storing a function with a dict in a variable drops the dict if the
            function is script-local.
Solution:   Translate the function name.  Use dict arg if present.

6f2e4b36c9
2016-12-12 10:17:35 -05:00
Michael Ennen
5cf0c99755 vim-patch:7.4.1581
Problem:    Using ":call dict.func()" where the function is a partial does
            not work.  Using "dict.func()" where the function does not take a
            Dictionary does not work.
Solution:   Handle partial properly in ":call". (Yasuhiro Matsumoto)

65639032bb
2016-12-12 10:17:35 -05:00
Michael Ennen
2c1b4c7f3c vim-patch:7.4.1580
Problem:    Crash when using function reference. (Luchr)
Solution:   Set initial refcount. (Ken Takata)

7a5c46a9df
2016-12-12 10:17:35 -05:00
Michael Ennen
529482d684 vim-patch:7.4.1577
Problem:    Cannot pass "dict.Myfunc" around as a partial.
Solution:   Create a partial when expected.

ab1fa3955f
2016-12-12 10:17:35 -05:00
Michael Ennen
f90551b0e6 vim-patch:7.4.1564
Problem:    An empty list in function() causes an error.
Solution:   Handle an empty list like there is no list of arguments.

346418c624
2016-12-12 10:17:35 -05:00
Michael Ennen
521e45f2a8 vim-patch:7.4.1559
Problem:    Passing cookie to a callback is clumsy.
Solution:   Change function() to take arguments and return a partial.

1735bc988c
2016-12-12 10:17:34 -05:00