)]}'
{
  "log": [
    {
      "commit": "ea19e7856b6c7850eab7ce74aa209e09e2c6eae3",
      "tree": "aa18194a9b2a479ff4276dc85f7661d827607b89",
      "parents": [
        "fd1a838d364b62a9211af23c47e0eab8d54ea452"
      ],
      "author": {
        "name": "Ben Jackson",
        "email": "puremourning@gmail.com",
        "time": "Wed Nov 06 21:50:05 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Nov 06 21:53:07 2024 +0100"
      },
      "message": "patch 9.1.0844: if_python: no way to pass local vars to python\n\nProblem:  if_python: no way to pass local vars to python\nSolution: Add locals argument to py3eval(), pyeval() and pyxeval()\n          (Ben Jackson)\n\nfixes: #8573\ncloses: #10594\n\nSigned-off-by: Ben Jackson \u003cpuremourning@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "83a06705dcfb10e13a75eace6319cb77b6af4d29",
      "tree": "d9d9fdd6698cdab926b0f7bdfd49f10ff5c85240",
      "parents": [
        "322ad0c953b7a3023cd2a65db61d05e180a5d682"
      ],
      "author": {
        "name": "Boris Staletic",
        "email": "boris.staletic@protonmail.com",
        "time": "Mon Oct 14 20:28:39 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Oct 14 20:28:39 2024 +0200"
      },
      "message": "patch 9.1.0784: there are several problems with python 3.13\n\nProblem:  there are several problems with python 3.13\nSolution: fix the problems in the python3 interface (Boris Staletic)\n\nThis commit does the following things:\n1) Since python 3.13.0b1, all statically defined objects are \"immortal\".\n   Besides never getting garbage collected, this also affects reference\n   counting:\n\n   - Immportal objects have a reference count of 2^32-1.\n   - Reference counting is a no-op.\n\n   All this is considered implementation details by cpython, so\n   documentation is next to non-existent.\n\n   Relevant CPython source code:\n   https://github.com/python/cpython/blob/v3.13.0/Include/object.h#L62-L107\n   https://github.com/python/cpython/blob/v3.13.0/Include/object.h#L389-L391\n\n2) Opt-out of ANSI-painted python stack traces\n\n3) Make python error message severity more consistent\n\nfixes: #15838\ncloses: #15842\n\nSigned-off-by: Boris Staletic \u003cboris.staletic@protonmail.com\u003e\nSigned-off-by: puremourning \u003cpuremourning@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "508403687d3538a99fc900ff9e9951ec788ac421",
      "tree": "08e1ed26daf432c6f337e077f4011bfd9d4d44e4",
      "parents": [
        "c0982f9f794a4c5737d3d7a3129b3121ab20e458"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Tue Sep 10 20:56:13 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Sep 10 20:56:13 2024 +0200"
      },
      "message": "patch 9.1.0726: not using correct python3 API with dynamic linking\n\nProblem:  not using correct python3 API with dynamic linking\nSolution: Use stable IncRef / DecRef in Python 3 dynamic bindings\n          (Yee Cheng Chin)\n\nPreviously, we were using the Py_DECREF macros even when using dynamic\nlinking of Python 3. This caused issues because Python\u0027s headers contain\nreferences to internal APIs like `_Py_Dealloc` and in v8.1.2201 and\nv8.2.1225 we simply hacked around the issue by manually copying the\nPython header implementation to Vim and linking in the private APIs.\nThis is fragile and prone to break. In fact, the Py_DECREF\nimplementation is different in newer versions of Python meaning that\nthis could potentially cause memory issues.\n\nInstead, simply use the API versions (`Py_DECREF` and `Py_INCREF`) which\nare functions exposed by the Python library. They could be slightly\nslower since they require a function call instead of a macro, but are\nmuch more reliable and we should only be calling these when the Python\nVim plugins are crossing the language boundary anyway which are always\ngoing to be slow.\n\nNote that this only affects dynamically linked Python builds that are\nnot using stable ABI.\n\nAlso see #15648\n\ncloses: #15653\n\nSigned-off-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "c2285a8cf397d1d694a350415fb37f7d51202ec4",
      "tree": "001856fe4805735d0d668f28a094aab1bdbd1911",
      "parents": [
        "97a5be46879ab2b24bb9b485966be031865e1191"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Mon Sep 09 19:55:24 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Sep 09 19:55:24 2024 +0200"
      },
      "message": "patch 9.1.0724: if_python: link error with python 3.13 and stable ABI\n\nProblem:  if_python: link error with python 3.13 and stable ABI\n          (zdohnal)\nSolution: Use the correct stable APIs Py_IncRef and Py_DecRef instead\n          (Yee Cheng Chin)\n\nThis fixes #15460 properly. There was an attempt to fix it in v9.1.0668,\nbut it did it by manually copy and pasting definitions from Python 3.13\nheaders, which is problematic as it makes Vim dependent on low-level\nimplementation details which are subject to change. That change also\npulls in dependencies to private APIs (`_Py_IncRef`) which is a very bad\nidea as the next version of Python could very well remove that.\n\nThe core issue was simply that `Py_INCREF` and similar functions are not\npart of the stable API. We are supposed to be using `Py_IncRef` instead\nwhich performs null-check (similar to `Py_XINCREF`) and is available as\na linkable function. We simply need to call it instead of the macro.\nWe simply remap `Py_INCREF` (and friends) to the function version in\nstable API similar to how we mapped other functions.\n\nrelated #15460\ncloses: #15648\n\nSigned-off-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "97a5be46879ab2b24bb9b485966be031865e1191",
      "tree": "407a0bcd7c06cba09dc1768f2f6971e96506fd3b",
      "parents": [
        "701c863e68fa24847100beef3c9008024615a081"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Mon Sep 09 19:46:17 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Sep 09 19:46:17 2024 +0200"
      },
      "message": "patch 9.1.0723: if_python: dynamic linking fails with python3 \u003e\u003d 3.13\n\nProblem:  if_python: dynamic linking fails with python3 \u003e\u003d 3.13\n          when using non-stable ABI (zdohnal)\nSolution: do not try to import the privat python symbol\n          _PyObject_NextNotImplemented\n          (Yee Cheng Chin)\n\nVim is importing a private Python symbol `_PyObject_NextNotImplemented`\nbecause it used to be required as part of the `PyIter_Check()` macro in\nan abstraction breaking way. Python eventually fixed the issue and in\n3.13 it removed the private symbol export, which broke Vim. Simply\nremove importing this private symbol in newer Python versions as it\u0027s no\nlonger needed for PyIter_Check to work.\n\nfixes: #15457\ncloses: #15649\n\nSigned-off-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "9abd7158d7d10b2b6a6b786c5ef0d428f690e37d",
      "tree": "0a517d522ac273f3523a2435cb7b14f2dc9a9ef8",
      "parents": [
        "181fda18e98620144a0e82a5b5a80dc47448af20"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Sat Aug 10 09:44:20 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Aug 10 09:44:20 2024 +0200"
      },
      "message": "patch 9.1.0668: build-error with python3.12 and stable ABI\n\nProblem:  build-error with python3.12 and stable ABI (zdohnal)\nSolution: Add type casts, define Py_INCREF for Python3.12 and higher\n          (Ken Takata)\n\nfixes: #15460\n\nSigned-off-by: Ken Takata \u003ckentkt@csc.jp\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "4179f193ccc26e95fec66273ffa036be1ab85e0a",
      "tree": "c9e1a0486b186a9899c35c081279dfc2368f88d6",
      "parents": [
        "f4af331d084b4f2c63710179a2f1fa360cc7d74b"
      ],
      "author": {
        "name": "Yaakov Selkowitz",
        "email": "yselkowi@redhat.com",
        "time": "Thu Jul 04 16:36:05 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Jul 04 16:36:05 2024 +0200"
      },
      "message": "patch 9.1.0521: if_py: _PyObject_CallFunction_SizeT is dropped in Python 3.13\n\nProblem:  if_py: _PyObject_CallFunction_SizeT is dropped in Python 3.13\nSolution: define PyObject_CallFunction for Python \u003e\u003d 3.13\n          (Yaakov Selkowitz)\n\nreferences: python/cpython#105051\n\ncloses: #15088\n\nSigned-off-by: Yaakov Selkowitz \u003cyselkowi@redhat.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "982ef16059bd163a77271107020defde0740bbd6",
      "tree": "42839f637580b519f8d617b92dacc231be819826",
      "parents": [
        "2b126a6892b485bc9924464fabdf2313e1100aa9"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Wed Oct 18 12:02:24 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Oct 18 12:03:41 2023 +0200"
      },
      "message": "patch 9.0.2048: python: uninitialized warning\n\nProblem:  python: uninitialized warning\nSolution: initialize \u0027minor\u0027 always\n\nwin32,py3: Fix uninitialized warning\n\nFix the following warning:\n```\nif_python3.c: In function \u0027py3_get_system_libname\u0027:\nif_python3.c:879:16: warning: \u0027minor\u0027 may be used uninitialized [-Wmaybe-uninitialized]\n  879 |             if (minor \u003d\u003d PY_MINOR_VERSION)\n      |                ^\nif_python3.c:839:24: note: \u0027minor\u0027 was declared here\n  839 |         long    major, minor;\n      |                        ^~~~~\n```\n\ncloses: #13368\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Ken Takata \u003ckentkt@csc.jp\u003e\n"
    },
    {
      "commit": "396058acd0cc66e5071d052e03d2067b134952af",
      "tree": "1569de6fb38ad992152589d8637ba775e9051542",
      "parents": [
        "8f4fb007e4d472b09ff6bed9ffa485e0c3093699"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Tue Oct 17 10:38:11 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Oct 17 10:38:11 2023 +0200"
      },
      "message": "patch 9.0.2036: if_python: rework python3.12 build dependency\n\nProblem:  if_python: rework python3.12 build dependency\n          (after 9.0.1996)\nSolution: use PyTuple_Size instead of inlining the Py_SIZE\n          into the Vim code base\n\nUse a simpler fix for Python 3.12 build issues\n\nPython 3.12 introduced link dependencies to their `Py_SIZE()` inline\nfunction, which #13290 fixed by copying the inline function to Vim\u0027s\nPython binding code. This works but it\u0027s fragile, as a future update may\nchange the implementation of `Py_SIZE` and there is no way for us to\nknow.\n\nThe reason we need `Py_SIZE` to begin with is that we use\n`PyTuple_GET_SIZE()` which calls that. Just fix it by mapping that to\n(confusingly similarly named) `PyTuple_Size()`, which we already do in\nthe stable ABI implementation. There\u0027s a minor performance cost in that\nit\u0027s not inlined and it does error checking but that\u0027s fine as we only\ncall this function rarely (in an error handler).\n\nrelated: #13290\ncloses: #13359\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "ae3cfa47d3dcee75061db598eb19879693b2393a",
      "tree": "97f5e2ea901b9427ac988a90e2678865cafcf966",
      "parents": [
        "989426be6e9ae23d2413943890206cbe15d9df38"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Sat Oct 14 11:49:09 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Oct 14 11:49:09 2023 +0200"
      },
      "message": "patch 9.0.2026: win32: python3 dll loading can be improved\n\nProblem:  win32: python3 dll loading can be improved\nSolution: Load DLL from registry path\n\nSupport loading python3.dll and/or python3xx.dll from the path written\nin the registry.  To support Stable ABI\u0027s forwarder DLL (python3.dll),\nuse the `LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR` flag for `LoadLibraryExW()`\nbecause python3xx.dll is placed in the same directory of python3.dll.\n\nIf Stable ABI is used, search the latest version from the registry (both\nfrom HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE).  If Stable ABI is not\nused, search only the matching version.\n\ncloses: #13315\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Ken Takata \u003ckentkt@csc.jp\u003e\n"
    },
    {
      "commit": "c97b3febc82c1ccacf5f328ed0bd81c8b850e97d",
      "tree": "8ab62fd87ed25bcfdc8c5394a7b104876f7f948a",
      "parents": [
        "a634b92b969e1bcb47551a39bf4e11e41ba9aa17"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Wed Oct 11 21:27:06 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Oct 11 21:27:06 2023 +0200"
      },
      "message": "patch 9.0.2013: confusing ifdefs in if_\u003clang\u003e.c\n\nProblem:  confusing ifdefs in if_\u003clang\u003e.c\nSolution: refactor ifndefs to #ifdefs\n\nif_x: Avoid using #ifndef - #else - #endif\n\nUsing #ifndef - #else - #endif is sometimes confusing.\nUse #ifdef - #else - #endif instead.\n\ncloses: #13310\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Ken Takata \u003ckentkt@csc.jp\u003e\n"
    },
    {
      "commit": "fa145f200966e47e11c403520374d6d37cfd1de7",
      "tree": "c044575d65f75505d6a51caab65fc5680ebf04d1",
      "parents": [
        "26e8f7b0ab451e76319d113038c86c79488bbbc4"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Fri Oct 06 19:27:13 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Oct 06 19:27:13 2023 +0200"
      },
      "message": "patch 9.0.1996: Cannot build with python312\n\nProblem:  Cannot build with python312\nSolution: Define wrapper types and functions for python 3.12\n\nPy_SIZE() uses PyLong_Type and PyBool_Type starting from Python 3.12.\nWe need to define our own Py_SIZE() to replace Py{Bool,Long}_Type with\npy3_Py{Bool,Long}_Type.\nWe also need to redefine PyTuple_GET_SIZE() and PyList_GET_SIZE(), because\nthey use Py_SIZE().\n\ncloses: #13281\ncloses: #13290\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Ken Takata \u003ckentkt@csc.jp\u003e\n"
    },
    {
      "commit": "119fdd9293f63614ed2ca60a78993466435db639",
      "tree": "0de7811d4f2982b04385c8d7cacf83134604c353",
      "parents": [
        "317468aaceb48e136ed7e3fa6d233345fd5360c6"
      ],
      "author": {
        "name": "Ken Takata",
        "email": "kentkt@csc.jp",
        "time": "Wed Oct 04 20:05:05 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Oct 04 20:05:05 2023 +0200"
      },
      "message": "patch 9.0.1980: win32: issues with stable python ABI\n\nProblem:  win32: issues with stable python ABI\nSolution: if_python3,win32: Fix Python3 stable ABI\n\nThere were some issues in current stable ABI implementation on Windows:\n* Python DLL name should be `python3.dll` instead of `python311.dll` and\n  so on. (See: https://docs.python.org/3/c-api/stable.html)\n* Some non-stable API functions were used:\n  - `_PyObject_NextNotImplemented`\n  - `PyStdPrinter_Type`\n* `reset_stdin()` and `hook_py_exit()` didn\u0027t work with `python3.dll`.\n  `python3.dll` is a special type of DLL called forwarder DLL.\n  It just forwards the functions to other DLL (e.g. `python311.dll`).\n  There were two issues regarding these functions:\n  - `python3.dll` doesn\u0027t have import tables. This caused a crash in\n    `get_imported_func_info()`. Add a check whether the specified DLL\n    has an import table.\n  - `reset_stdin()` and `hook_py_exit()` should be applied to the\n    forwarded DLL (e.g. `python311.dll`), not to `python3.dll`.\n    Check the export directory of `python3.dll` to find the forwarded\n    DLL and apply the functions to it.\n\ncloses: #13260\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Ken Takata \u003ckentkt@csc.jp\u003e\n"
    },
    {
      "commit": "f7f746b1672909ae57d2eec97253d6627f6c0887",
      "tree": "2f121d81a2c47cad103b793e81c5259daa727f8d",
      "parents": [
        "f3b68d4759a040ed0c4844c279ea3c779b3863ff"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Sat Sep 30 12:28:50 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Sep 30 12:32:37 2023 +0200"
      },
      "message": "patch 9.0.1960: Make CI checks more strict\n\nProblem:  Make CI checks more strict\nSolution: Add -Wstrict-prototypes -Wmissing-prototypes to CI,\n          fix uncovered problems\n\nAdd -Wstrict-prototypes -Wmissing-prototypes warnings check to CI\n\nAdd two new warnings to CI, silence some Perl related build-warnings:\n\n- `strict-prototypes` helps prevent declaring a function with an empty\n  argument list, e.g. `int func()`. In C++, that\u0027s equivalent to `int\n  func(void)`, but in C, that means a function that can take any number\n  of arguments which is rarely what we want.\n\n- `missing-prototypes` makes sure we use `static` for file-only internal\n  functions. Non-static functions should have been declared on a\n  prototype file.\n\n- Add `no-compound-token-split-by-macro` to the perl cflags, since it\n  throws out a bunch of perl-related warnings that make the CI log\n  unnecessary verbose and hard to read. This seems to happen only with\n  clang 12 and above.\n\nWhen applying those changes, it already uncovered a few warnings, so fix\nup the code as well (fix prototypes, make the code static, remove\nshadowed var declaration)\n\nGTK header needs to have #pragma warning suppressiong because GTK2\nheaders will warn on `-Wstrict-prototypes`, and it\u0027s included by gui.h\nand so we can\u0027t just turn off the warning in a couple files.\n\ncloses: #13223\ncloses: #13226\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "4927bc7d278caa022358832d96604a72a2a58a45",
      "tree": "7e276d7c7feb4f9f89d7d9b0855c8019833957c6",
      "parents": [
        "99c3849a9299982666a7b677f0565a7b3717d20c"
      ],
      "author": {
        "name": "Dominique Pellé",
        "email": "dominique.pelle@tomtom.com",
        "time": "Sun Sep 24 16:12:07 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Sep 24 16:16:06 2023 +0200"
      },
      "message": "patch 9.0.1930: compiler warnings with clang-17\n\nProblem:  compiler warnings with clang-17\nSolution: Fix function prototypes and function pointer\n\nfix: clang compilation warnings with -Wstrict-prototypes\n\nChange fixes this kind of compilation warnings with clang:\n```\nproto/if_python3.pro:13:20: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]\n   13 | int python3_version();\n      |                    ^\n      |                     void\n```\n\ncloses: #13166\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Dominique Pellé \u003cdominique.pelle@tomtom.com\u003e\n"
    },
    {
      "commit": "02c51b1dd8e8b96e969ad7e408536fa208d90ac8",
      "tree": "51fe637c77dc56e376a8167ac1ec698848ea3bc6",
      "parents": [
        "1926ae41845c3b6e2045b29225365c8a2e4eb1da"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Thu Sep 21 16:40:12 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Sep 21 16:40:12 2023 +0200"
      },
      "message": "patch 9.0.1925: if_python: still undefined behaviour with function pointer\n\nProblem:  if_python: still undefined behaviour with function pointer\nSolution: fix remaining problems\n\nFix remaining issues in the if_python code in casting incompatible\nfunction pointers leading to Clang 17 giving runtime errors during\nUBSAN.\n\ncloses: #13140\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "d606fccf6fd716bda43a8e1d11d898f438d28b82",
      "tree": "30de72950ac86aa810739d41dab22f8f3365208c",
      "parents": [
        "aa64ba1587d36de558f47519fa47c27e86c6e49a"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Wed Sep 20 19:59:47 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Sep 20 19:59:47 2023 +0200"
      },
      "message": "patch 9.0.1917: undefined behaviour with python function pointer\n\nProblem:  undefined behaviour with python function pointer\nSolution: correctly cast function pointers from void\n\nFix more undefined behaviors in if_python\n\nFix remaining UBSAN errors from Clang 17 in if_python in casting\nfunction pointers.\n\nAlso fix a mistake where `PyMem_Free()` should be returning void, by the\ndynamic build is mistakenly casting it as a function that returns an\nint.\n\ncloses: #13128\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "2ce070c27acd12ccc614afa4cecf4970a645a4af",
      "tree": "2c8287ac4450e0fc6924c851ee59eb93f6863417",
      "parents": [
        "6f00d17e8d64ed46c85625e8ac38ed0928b32c58"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Tue Sep 19 20:30:22 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Sep 19 20:30:22 2023 +0200"
      },
      "message": "patch 9.0.1913: if_python: undefined behaviour for function pointers\n\nProblem:  if_python: undefined behaviour for function pointers\nSolution: Fix if_python undefined behavior for function pointer casts\n\nIdentified by clang 17 UBSAN (see #12745). Make sure to cast function\npointers with the same signature only.\n\ncloses: #13122\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "c13b3d1350b60b94fe87f0761ea31c0e7fb6ebf3",
      "tree": "1f412e31f87c23aa12978d1d03d01e40495567d7",
      "parents": [
        "20cd8699acf6dc1071ee1bf0686bccba7df2c57c"
      ],
      "author": {
        "name": "Yee Cheng Chin",
        "email": "ychin.git@gmail.com",
        "time": "Sun Aug 20 21:18:38 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 20 21:18:38 2023 +0200"
      },
      "message": "patch 9.0.1776: No support for stable Python 3 ABI\n\nProblem:  No support for stable Python 3 ABI\nSolution: Support Python 3 stable ABI\n\nCommits:\n1) Support Python 3 stable ABI to allow mixed version interoperatbility\n\nVim currently supports embedding Python for use with plugins, and the\n\"dynamic\" linking option allows the user to specify a locally installed\nversion of Python by setting `pythonthreedll`. However, one caveat is\nthat the Python 3 libs are not binary compatible across minor versions,\nand mixing versions can potentially be dangerous (e.g. let\u0027s say Vim was\nlinked against the Python 3.10 SDK, but the user sets `pythonthreedll`\nto a 3.11 lib). Usually, nothing bad happens, but in theory this could\nlead to crashes, memory corruption, and other unpredictable behaviors.\nIt\u0027s also difficult for the user to tell something is wrong because Vim\nhas no way of reporting what Python 3 version Vim was linked with.\n\nFor Vim installed via a package manager, this usually isn\u0027t an issue\nbecause all the dependencies would already be figured out. For prebuilt\nVim binaries like MacVim (my motivation for working on this), AppImage,\nand Win32 installer this could potentially be an issue as usually a\nsingle binary is distributed. This is more tricky when a new Python\nversion is released, as there\u0027s a chicken-and-egg issue with deciding\nwhat Python version to build against and hard to keep in sync when a new\nPython version just drops and we have a mix of users of different Python\nversions, and a user just blindly upgrading to a new Python could lead to\nbad interactions with Vim.\n\nPython 3 does have a solution for this problem: stable ABI / limited API\n(see https://docs.python.org/3/c-api/stable.html). The C SDK limits the\nAPI to a set of functions that are promised to be stable across\nversions. This pull request adds an ifdef config that allows us to turn\nit on when building Vim. Vim binaries built with this option should be\nsafe to freely link with any Python 3 libraies without having the\nconstraint of having to use the same minor version.\n\nNote: Python 2 has no such concept and this doesn\u0027t change how Python 2\nintegration works (not that there is going to be a new version of Python\n2 that would cause compatibility issues in the future anyway).\n\n---\n\nTechnical details:\n\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe stable ABI can be accessed when we compile with the Python 3 limited\nAPI (by defining `Py_LIMITED_API`). The Python 3 code (in `if_python3.c`\nand `if_py_both.h`) would now handle this and switch to limited API\nmode. Without it set, Vim will still use the full API as before so this\nis an opt-in change.\n\nThe main difference is that `PyType_Object` is now an opaque struct that\nwe can\u0027t directly create \"static types\" out of, and we have to create\ntype objects as \"heap types\" instead. This is because the struct is not\nstable and changes from version to version (e.g. 3.8 added a\n`tp_vectorcall` field to it). I had to change all the types to be\nallocated on the heap instead with just a pointer to them.\n\nOther functions are also simply missing in limited API, or they are\nintroduced too late (e.g. `PyUnicode_AsUTF8AndSize` in 3.10) to it that\nwe need some other ways to do the same thing, so I had to abstract a few\nthings into macros, and sometimes re-implement functions like\n`PyObject_NEW`.\n\nOne caveat is that in limited API, `OutputType` (used for replacing\n`sys.stdout`) no longer inherits from `PyStdPrinter_Type` which I don\u0027t\nthink has any real issue other than minor differences in how they\nconvert to a string and missing a couple functions like `mode()` and\n`fileno()`.\n\nAlso fixed an existing bug where `tp_basicsize` was set incorrectly for\n`BufferObject`, `TabListObject, `WinListObject`.\n\nTechnically, there could be a small performance drop, there is a little\nmore indirection with accessing type objects, and some APIs like\n`PyUnicode_AsUTF8AndSize` are missing, but in practice I didn\u0027t see any\ndifference, and any well-written Python plugin should try to avoid\nexcessing callbacks to the `vim` module in Python anyway.\n\nI only tested limited API mode down to Python 3.7, which seemes to\ncompile and work fine. I haven\u0027t tried earlier Python versions.\n\n2) Fix PyIter_Check on older Python vers / type##Ptr unused warning\n\nFor PyIter_Check, older versions exposed them as either macros (used in\nfull API), or a function (for use in limited API). A previous change\nexposed PyIter_Check to the dynamic build because Python just moved it\nto function-only in 3.10 anyway. Because of that, just make sure we\nalways grab the function in dynamic builds in earlier versions since\nthat\u0027s what Python eventually did anyway.\n\n3) Move Py_LIMITED_API define to configure script\n\nCan now use --with-python-stable-abi flag to customize what stable ABI\nversion to target. Can also use an env var to do so as well.\n\n4) Show +python/dyn-stable in :version, and allow has() feature query\n\nNot sure if the \"/dyn-stable\" suffix would break things, or whether we\nshould do it another way. Or just don\u0027t show it in version and rely on\nhas() feature checking.\n\n5) Documentation first draft. Still need to implement v:python3_version\n\n6) Fix PyIter_Check build breaks when compiling against Python 3.8\n\n7) Add CI coverage stable ABI on Linux/Windows / make configurable on Windows\n\nThis adds configurable options for Windows make files (both MinGW and\nMSVC). CI will also now exercise both traditional full API and stable\nABI for Linux and Windows in the matrix for coverage.\n\nAlso added a \"dynamic\" option to Linux matrix as a drive-by change to\nmake other scripting languages like Ruby / Perl testable under both\nstatic and dynamic builds.\n\n8) Fix inaccuracy in Windows docs\n\nPython\u0027s own docs are confusing but you don\u0027t actually want to use\n`python3.dll` for the dynamic linkage.\n\n9) Add generated autoconf file\n\n10) Add v:python3_version support\n\nThis variable indicates the version of Python3 that Vim was built\nagainst (PY_VERSION_HEX), and will be useful to check whether the Python\nlibrary you are loading in dynamically actually fits it. When built with\nstable ABI, it will be the limited ABI version instead\n(`Py_LIMITED_API`), which indicates the minimum version of Python 3 the\nuser should have, rather than the exact match. When stable ABI is used,\nwe won\u0027t be exposing PY_VERSION_HEX in this var because it just doesn\u0027t\nseem necessary to do so (the whole point of stable ABI is the promise\nthat it will work across versions), and I don\u0027t want to confuse the user\nwith too many variables.\n\nAlso, cleaned up some documentation, and added help tags.\n\n11) Fix Python 3.7 compat issues\n\nFix a couple issues when using limited API \u003c 3.8\n\n- Crash on exit: In Python 3.7, if a heap-allocated type is destroyed\n  before all instances are, it would cause a crash later. This happens\n  when we destroyed `OptionsType` before calling `Py_Finalize` when\n  using the limited API. To make it worse, later versions changed the\n  semantics and now each instance has a strong reference to its own type\n  and the recommendation has changed to have each instance de-ref its\n  own type and have its type in GC traversal. To avoid dealing with\n  these cross-version variations, we just don\u0027t free the heap type. They\n  are static types in non-limited-API anyway and are designed to last\n  through the entirety of the app, and we also don\u0027t restart the Python\n  runtime and therefore do not need it to have absolutely 0 leaks.\n\n  See:\n  - https://docs.python.org/3/whatsnew/3.8.html#changes-in-the-c-api\n  - https://docs.python.org/3/whatsnew/3.9.html#changes-in-the-c-api\n\n- PyIter_Check: This function is not provided in limited APIs older than\n  3.8. Previously I was trying to mock it out using manual\n  PyType_GetSlot() but it was brittle and also does not actually work\n  properly for static types (it will generate a Python error). Just\n  return false. It does mean using limited API \u003c 3.8 is not recommended\n  as you lose the functionality to handle iterators, but from playing\n  with plugins I couldn\u0027t find it to be an issue.\n\n- Fix loading of PyIter_Check so it will be done when limited API \u003c 3.8.\n  Otherwise loading a 3.7 Python lib will fail even if limited API was\n  specified to use it.\n\n12) Make sure to only load `PyUnicode_AsUTF8AndSize` in needed in limited API\n\nWe don\u0027t use this function unless limited API \u003e\u003d 3.10, but we were\nloading it regardless. Usually it\u0027s ok in Unix-like systems where Python\njust has a single lib that we load from, but in Windows where there is a\nseparate python3.dll this would not work as the symbol would not have\nbeen exposed in this more limited DLL file. This makes it much clearer\nunder what condition is this function needed.\n\ncloses: #12032\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Yee Cheng Chin \u003cychin.git@gmail.com\u003e\n"
    },
    {
      "commit": "15a0a0281a060fd5968ca2f3c80e750137106adb",
      "tree": "0a37bca9a1560949672d15df5157630be645e8a3",
      "parents": [
        "7772c93a3ec1ce60469e9aea9899687ae1141f34"
      ],
      "author": {
        "name": "Zdenek Dohnal",
        "email": "zdohnal@redhat.com",
        "time": "Tue Aug 15 22:52:01 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Aug 15 22:52:01 2023 +0200"
      },
      "message": "patch 9.0.1716: Windows build with python 3.12 and clang fails\n\nProblem: Windows build with python 3.12 and clang fails\nSolution: Remove the PyBool_Type function pointer for python 3.12\n\nClang on Win doesn\u0027t like non-static functions in static struct with\nPython 3.12 - removing the new obfuscated function and protecting the\nold PyBool function for older Pythons fixes the issue.\n\ncloses: #12800\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Zdenek Dohnal \u003czdohnal@redhat.com\u003e\n"
    },
    {
      "commit": "e5e4709a6ac02dc2a17bd6e4d02e799269ba5ea9",
      "tree": "da325ce9a4783d48b63a33d96b44c54fb043eedd",
      "parents": [
        "8ef1fbc0c3ca8dca32c352f3cf30e7a4b3096a94"
      ],
      "author": {
        "name": "Zdenek Dohnal",
        "email": "zdohnal@redhat.com",
        "time": "Sun Aug 13 19:37:09 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 13 19:39:27 2023 +0200"
      },
      "message": "patch 9.0.1709: dynamic build with python 3.12 breaks\n\nProblem: dynamic build with python 3.12 breaks\nSolution: if_python3.c: Fix building dynamic Python3 interpreter\n\nThere are new extern global variables defined in python3 development\nfiles, which types are within python3 library, so they break dynamic\npython3 interpret Vim plugin.\n\nSince the variables are used in macro `Py_SIZE` which is used in other\npython3 headers, the dummy variables have to defined before including\nPython.h.\n\ncloses: #12660\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Zdenek Dohnal \u003czdohnal@redhat.com\u003e\n"
    },
    {
      "commit": "422b9dcbfadcd5c1dfad982f9782563915398430",
      "tree": "dd8fb3de151429b616c103f251e281f85af4bd5f",
      "parents": [
        "b00df7aa388994119346a21d77b0d0db2a0a5e9f"
      ],
      "author": {
        "name": "Philip H",
        "email": "47042125+pheiduck@users.noreply.github.com",
        "time": "Fri Aug 11 22:38:48 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Aug 11 22:38:48 2023 +0200"
      },
      "message": "patch 9.0.1685: silence Python 3.11 depreciations for gcc\n\nProblem: Python 3.11 interface throws deprecation warnings\nSolution: ignore those warnings for gcc and clang\n\nPython 3.11 deprecation warnings are already silenced for clang using\nthe pragma\n```\n # pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n```\n\nHowever those warnings are also emitted when using gcc. To avoid them\nfor both compilers, change use the __GNUC__ ifdef, which is defined for\ngcc as well as clang.\n\nAdditionally, instead of using the \"clang diagnostic ignored\" pragma,\nlet\u0027s make use of \u0027GCC diagnostic ignored\u0027 which is again supported by\nclang and GCC\n\ncloses: #12610\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Philip H \u003c47042125+pheiduck@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "ebfec1c531f32d424bb2aca6e7391ef3bfcbfe20",
      "tree": "d017ab5fcc15f2eef851de089c3b2aef39d7a387",
      "parents": [
        "3d79f0a4309995956bd8889940cca22f7a15881d"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jan 22 21:14:53 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jan 22 21:14:53 2023 +0000"
      },
      "message": "patch 9.0.1234: the code style has to be checked manually\n\nProblem:    The code style has to be checked manually.\nSolution:   Add basic code style checks in a test.  Fix or avoid uncovered\n            problems.\n"
    },
    {
      "commit": "0233bdfa2b487c392dc4fd1a29113e08fbace334",
      "tree": "83551e09979e7baa762cd11a65ddff2153883e4e",
      "parents": [
        "043d7b2c84cda275354aa023b5769660ea70a168"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Thu Jan 12 12:33:30 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Jan 12 12:33:30 2023 +0000"
      },
      "message": "patch 9.0.1183: code is indented more than necessary\n\nProblem:    Code is indented more than necessary.\nSolution:   Use an early return where it makes sense. (Yegappan Lakshmanan,\n            closes #11805)\n"
    },
    {
      "commit": "a7fbaa43b7dbea55b2a48093f68abf819bc71682",
      "tree": "68423dbac3d0add21b987768d9ff1500a250f334",
      "parents": [
        "b536540ab3c13db629432c411e92c05c4a3808ba"
      ],
      "author": {
        "name": "K.Takata",
        "email": "kentkt@csc.jp",
        "time": "Mon Dec 26 14:46:51 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Dec 26 14:46:51 2022 +0000"
      },
      "message": "patch 9.0.1102: complicated use of #ifdef\n\nProblem:    Complicated use of #ifdef.\nSolution:   Simplify #ifdef use. (Ken Takata, closes #11745)\n"
    },
    {
      "commit": "161b6ac04f257ab17779e9ba6f5b3e3e15d2a0fd",
      "tree": "f2d7046311159ccfdc94f337addac087d92478bf",
      "parents": [
        "dcbdd82d059a9b621e09f4447446a92ae2562e16"
      ],
      "author": {
        "name": "K.Takata",
        "email": "kentkt@csc.jp",
        "time": "Mon Nov 14 15:31:07 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 14 15:31:07 2022 +0000"
      },
      "message": "patch 9.0.0880: preprocessor indenting is off\n\nProblem:    Preprocessor indenting is off.\nSolution:   Adjust preprocessor indentation. (Ken Takata, closes #11546)\n"
    },
    {
      "commit": "5a5f17f9b3fa14c36a7d6c96ac55acaddb6247e1",
      "tree": "c546eb721dcd455db3840940107e866df456bf3a",
      "parents": [
        "6c3d3e69047438ff5b7f58d44fe66af9e2c4212b"
      ],
      "author": {
        "name": "Philip H",
        "email": "47042125+pheiduck@users.noreply.github.com",
        "time": "Sat Nov 05 14:05:31 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 05 14:05:31 2022 +0000"
      },
      "message": "patch 9.0.0832: deprecation warning causes build failure\n\nProblem:    Deprecation warning causes build failure.\nSolution:   Suppress deprecation warning. (closes #11503)\n"
    },
    {
      "commit": "6c3d3e69047438ff5b7f58d44fe66af9e2c4212b",
      "tree": "e683dc534c13d86fc8103fc85e8df7df4d1e6147",
      "parents": [
        "5375205761b5ed247f992abce341cf745dded38d"
      ],
      "author": {
        "name": "ichizok",
        "email": "gclient.gaap@gmail.com",
        "time": "Fri Nov 04 22:38:11 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Nov 04 22:38:11 2022 +0000"
      },
      "message": "patch 9.0.0831: compiler warning for redefining HAVE_DUP\n\nProblem:    Compiler warning for redefining HAVE_DUP.\nSolution:   Undefine HAVE_DUP if needed. (Ozaki Kiichi, closes #11484)\n"
    },
    {
      "commit": "fee511c1d39ecd155e27545cf70aeaa99d31b215",
      "tree": "55af7607448423902d5dd89ad0d478c82eb95504",
      "parents": [
        "1ae8c262df7083dfb4b41485508951c50eccc84c"
      ],
      "author": {
        "name": "Zdenek Dohnal",
        "email": "zdohnal@redhat.com",
        "time": "Mon Jun 27 13:59:00 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jun 27 13:59:00 2022 +0100"
      },
      "message": "patch 8.2.5168: cannot build with Python 3.11\n\nProblem:    Cannot build with Python 3.11.\nSolution:   Adjust define for _PyObject_TypeCheck. (Zdenek Dohnal,\n            closes #10627)\n"
    },
    {
      "commit": "63ff72aab91679725077eab5c5405267792268bd",
      "tree": "bdf2dba219e7c49b3504e957d5576bd9462b5950",
      "parents": [
        "b247e0622ef16b7819f5dadefd3e3f0a803b4021"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 07 13:54:01 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 07 13:54:01 2022 +0000"
      },
      "message": "patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails\n\nProblem:    MS-Windows: Vim exits when Python 3 initialisation fails.\nSolution:   Hook into the exit() function to recover from the failure.\n            (Ken Takata, closes #9710)\n"
    },
    {
      "commit": "9d00e4a8146862c17ed429dc6b1b43349acb2b5f",
      "tree": "79a1e0d0a738940dba6a9a86936376bd62e04ca3",
      "parents": [
        "d3a117814d6acbf0dca3eff1a7626843b9b3734a"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jan 05 17:49:15 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jan 05 17:49:15 2022 +0000"
      },
      "message": "patch 8.2.4010: error messages are spread out\n\nProblem:    Error messages are spread out.\nSolution:   Move more error messages to errors.h.\n"
    },
    {
      "commit": "9a846fbaa569b3690d70606f2a86e97f77a05496",
      "tree": "cbe5304927fe21586593c94342e4f023aa3e0837",
      "parents": [
        "b34689010a587e85ff724051f276513a15c634d0"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 01 21:59:18 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 01 21:59:18 2022 +0000"
      },
      "message": "patch 8.2.3977: error messages are spread out\n\nProblem:    Error messages are spread out.\nSolution:   Move more error messages to errors.h.\n"
    },
    {
      "commit": "460ae5dfca31fa627531c263184849976755cf6b",
      "tree": "d94de6a24285bc10fd62ad4ae9aecb53f9a7e913",
      "parents": [
        "b37a65e4bf08c4eec4fa5b81a5efc3945fca44de"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 01 14:19:49 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 01 14:19:49 2022 +0000"
      },
      "message": "patch 8.2.3967: error messages are spread out\n\nProblem:    Error messages are spread out.\nSolution:   Move more errors to errors.h.\n"
    },
    {
      "commit": "af4a61a85d6e8cacc35324f266934bc463a21673",
      "tree": "3b2e75b8a36bc8e79d2bc407d929a84b69fd0e0c",
      "parents": [
        "5da36052a4bb0f3a9747ec3a8ab9d85e058e39fa"
      ],
      "author": {
        "name": "Dominique Pelle",
        "email": "dominique.pelle@gmail.com",
        "time": "Mon Dec 27 17:21:41 2021 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Dec 27 17:21:41 2021 +0000"
      },
      "message": "patch 8.2.3914: various spelling mistakes in comments\n\nProblem:    Various spelling mistakes in comments.\nSolution:   Fix the mistakes. (Dominique Pellé, closes #9416)\n"
    },
    {
      "commit": "1a3e5747b7df7ddda312bbfd18e04fc2122001fb",
      "tree": "df3916d14b86db869aa32ce5a032e4d7dc09f0fa",
      "parents": [
        "5a234eb18e6e43408755bb24e813330306c11629"
      ],
      "author": {
        "name": "Martin Tournoij",
        "email": "martin@arp242.net",
        "time": "Sat Jul 24 13:57:29 2021 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jul 24 13:57:29 2021 +0200"
      },
      "message": "patch 8.2.3208: dynamic library load error does not mention why it failed\n\nProblem:    Dynamic library load error does not mention why it failed.\nSolution:   Add the error message. (Martin Tournoij, closes #8621)\n"
    },
    {
      "commit": "90478f35a8c78e2e10a4b4a8f135998dc04c91fa",
      "tree": "a0029e80520ea90fcdaff3b75361d535a9f0a52e",
      "parents": [
        "2d6d718dde7163c971d37b8f4f1ed8f2d25de130"
      ],
      "author": {
        "name": "Zdenek Dohnal",
        "email": "zdohnal@redhat.com",
        "time": "Mon Jun 14 15:08:30 2021 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jun 14 15:08:30 2021 +0200"
      },
      "message": "patch 8.2.2995: linker errors with dynamic Python 3.10\n\nProblem:    Linker errors with dynamic Python 3.10.\nSolution:   Add a couple of library entries. (Zdenek Dohnal, closes #8381,\n            closes #8356)\n"
    },
    {
      "commit": "b2f9e0e2c537bcde16dab3b62687a17e17849ce1",
      "tree": "e4801bdb4252443a817156b771d23dbd7ae0a765",
      "parents": [
        "3868f59466ed5ff1c5624f40b93c0034ce62cb82"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Dec 25 13:52:37 2020 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Dec 25 13:52:37 2020 +0100"
      },
      "message": "patch 8.2.2211: MS-Windows: can\u0027t load Python dll if not in the path\n\nProblem:    MS-Windows: can\u0027t load Python dll if not in the path.\nSolution:   Use the InstallPath registry entry. (Kelvin Lee, closes #7540)\n"
    },
    {
      "commit": "2e2f52a4a0fd560d37a11a7383a4d52b63ca6cfc",
      "tree": "c4bde05ee74541b38cfb98052cb4dd64ea91c999",
      "parents": [
        "ef2dff52de52c17fe1bd7c06cbb32d8955901f5a"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Dec 21 16:03:02 2020 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Dec 21 16:03:02 2020 +0100"
      },
      "message": "patch 8.2.2178: Python 3: non-utf8 character cannot be handled\n\nProblem:    Python 3: non-utf8 character cannot be handled.\nSolution:   Change the string decode. (Björn Linse, closes #1053)\n"
    },
    {
      "commit": "4ce5fe4c87820c7d22964d6e91d7b07e96640e6f",
      "tree": "900ca0ee352311d36d485c2dd12a9e828e274ab3",
      "parents": [
        "c58f5456e5c5f21193e960cecc434e367ef1281e"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 21 21:01:59 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 21 21:01:59 2020 +0200"
      },
      "message": "patch 8.2.1883: compiler warnings when using Python\n\nProblem:    Compiler warnings when using Python.\nSolution:   Adjust PyCFunction to also have the second argument.  Use \"int\"\n            return type for some functions.  Insert \"(void *)\" to get rid of\n            the remaining warnings.\n"
    },
    {
      "commit": "efc0d94afc48a03b07955e91315e7e67945cd079",
      "tree": "75e42d881bc5f83429372139eb0cb5f8d554fb59",
      "parents": [
        "204ade6bcb85f48f56e52e040d1ebf40548d92be"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Oct 11 18:05:02 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Oct 11 18:05:02 2020 +0200"
      },
      "message": "patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9\n\nProblem:    PyEval_InitThreads() is deprecated in Python 3.9.\nSolution:   Do not call PyEval_InitThreads in Python 3.9 and later. (Ken\n            Takata, closes #7113)  Avoid warnings for functions.\n"
    },
    {
      "commit": "c6ed254d9fda0ff54cdedce5597ff3e0d0218d18",
      "tree": "b57574dea129dce570dc8c9806639801d9400deb",
      "parents": [
        "bd6428b9e79ed85b54ea7eaa11871fa09d63ab6f"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 10 23:26:28 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 10 23:26:28 2020 +0200"
      },
      "message": "patch 8.2.1830: MS-Windows: Python3 issue with stdin\n\nProblem:    MS-Windows: Python3 issue with stdin.\nSolution:   Check if stdin is readable. (Ken Takata, closes #7106)\n"
    },
    {
      "commit": "253b16a4abdad1df350b9ddd9a709520b063934c",
      "tree": "d25ce3c76cc4f33e8b69da98d739a3931f8747b8",
      "parents": [
        "80361a5f2b134c88597d60b3d363b52084e712a1"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Oct 06 19:59:06 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Oct 06 19:59:06 2020 +0200"
      },
      "message": "patch 8.2.1806: MS-Windows with Python: Vim freezes after import command\n\nProblem:    MS-Windows with Python: Vim freezes after import command.\nSolution:   Use either \"NUL\" or \"CONIN$\" when reopening stdin. (Yasuhiro\n            Matsumoto, closes #7083)\n"
    },
    {
      "commit": "794771cfd83af2a0d1926bed301e784447e7290b",
      "tree": "972c890d396196ebda05d8b2a52bfc0c18fc440e",
      "parents": [
        "c1f0066b642fb62e37b300033223ff3ee4aafcd6"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 03 13:57:13 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 03 13:57:13 2020 +0200"
      },
      "message": "patch 8.2.1790: MS-Windows with Python: crash when executed from Vifm\n\nProblem:    MS-Windows with Python: crash when executed from Vifm.\nSolution:   Use NUL instead of CONIN. (Ken Takata, closes #7061, closes #7053)\n"
    },
    {
      "commit": "56b8dc331dc7f499c8221ed7d1c7795ad5e3bdeb",
      "tree": "4616d00af44448ab701d07504c24d14c1190ae75",
      "parents": [
        "3d945cc925dddb99a1ee86ec194b5b95221c72d7"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Aug 06 21:47:11 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Aug 06 21:47:11 2020 +0200"
      },
      "message": "patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected\n\nProblem:    MS-Windows: crash with Python 3.5 when stdin is redirected.\nSolution:   Reconnect stdin. (Yasuhiro Matsumoto, Ken Takata, closes #6641)\n"
    },
    {
      "commit": "ee1b93169d21896e5401a54a5189c9465abb7bc9",
      "tree": "4538e96a896599451f5c8d66aedaea231f23901d",
      "parents": [
        "a90afb9a590c92d537faeb16f9ccd282fc78aeff"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Jul 16 22:15:53 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Jul 16 22:15:53 2020 +0200"
      },
      "message": "patch 8.2.1225: linker errors when building with dynamic Python 3.9\n\nProblem:    Linker errors when building with dynamic Python 3.9.\nSolution:   Add #defined items. (closes #6461)\n"
    },
    {
      "commit": "ab5894638413748fcedfe28691e6c27893924520",
      "tree": "45318c835f879c4ff5f235f7774c37f5a6a9d359",
      "parents": [
        "0ad3e894d75236915e67dfbbcc821b6bb3c05d91"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jul 06 21:03:06 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jul 06 21:03:06 2020 +0200"
      },
      "message": "patch 8.2.1146: not enough testing for Python\n\nProblem:    Not enough testing for Python.\nSolution:   Add more tests.  Fix uncovered problems. (Yegappan Lakshmanan,\n            closes #6392)\n"
    },
    {
      "commit": "2027973b5be693577bea0731b50ea4904d19ea8b",
      "tree": "9d1be9f140c9ba2e03bac242fb52ee99288a6313",
      "parents": [
        "5908fdf72fa1995735e38c46f254ddde81a87c1f"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Mar 29 20:51:07 2020 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Mar 29 20:51:07 2020 +0200"
      },
      "message": "patch 8.2.0479: unloading shared libraries on exit has no purpose\n\nProblem:    Unloading shared libraries on exit has no purpose.\nSolution:   Do not unload shared libraries on exit.\n"
    },
    {
      "commit": "a65bb53514a1af1ec0dc5c4831dfaef69f139a48",
      "tree": "c06212eb25eddc0c30a77516287dc798471599cd",
      "parents": [
        "d0df1aacd81000d95815bea397257d8dc0d2c72d"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Mar 04 22:06:07 2020 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Mar 04 22:06:07 2020 +0100"
      },
      "message": "patch 8.2.0354: Python 3.9 does not define _Py_DEC_REFTOTAL\n\nProblem:    Python 3.9 does not define _Py_DEC_REFTOTAL. (Zdenek Dohnal)\nSolution:   Remove it, it was only for debugging.\n"
    },
    {
      "commit": "d672dde584effd55702ee15efec4cb2a8c77bf85",
      "tree": "742fb3cd5f535e1571827c81060572ce735ef96d",
      "parents": [
        "bc93cebb692f47488d66f078d1728031e9be35e7"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Feb 26 13:43:51 2020 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Feb 26 13:43:51 2020 +0100"
      },
      "message": "patch 8.2.0319: file missing in distribution, comments outdated\n\nProblem:    File missing in distribution, comments outdated.\nSolution:   Correct path of README file.  Update comments.\n"
    },
    {
      "commit": "2ab2e8608f9b2c85432715bb9a7f226fdbf8cd35",
      "tree": "0a361d816527e615a7b64298e7c51c16d65fb015",
      "parents": [
        "9834b96820bec95d6858229d6fb256310365efff"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Dec 04 21:24:53 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Dec 04 21:24:53 2019 +0100"
      },
      "message": "patch 8.1.2387: using old C style comments\n\nProblem:    Using old C style comments.\nSolution:   Use // comments where appropriate.\n"
    },
    {
      "commit": "13a1f3fb0c9d08bba6109fe2131c9524e6ba7e15",
      "tree": "45401da9d6cbf88c27af9c56dcaa53f6b2388b3f",
      "parents": [
        "1cac70953d3c012453ea85b1308a8b1f94359c26"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 23 21:37:25 2019 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 23 21:37:25 2019 +0200"
      },
      "message": "patch 8.1.2201: cannot build with dynamically linked Python 3.8\n\nProblem:    Cannot build with dynamically linked Python 3.8.\nSolution:   Implement py3__Py_DECREF() and py3__Py_XDECREF(). (Ken Takata,\n            closes #4080)\n"
    },
    {
      "commit": "c799fe206e61f2e2c1231bc46cbe4bb354f3da69",
      "tree": "68b3d2a8bb82519e29fc95f317d2ee02b07f95fa",
      "parents": [
        "b58a4b938c4bc7e0499700859bd7abba9acc5b11"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue May 28 23:08:19 2019 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue May 28 23:08:19 2019 +0200"
      },
      "message": "patch 8.1.1414: alloc() returning \"char_u *\" causes a lot of type casts\n\nProblem:    Alloc() returning \"char_u *\" causes a lot of type casts.\nSolution:   Have it return \"void *\". (Mike Williams)  Define ALLOC_ONE() to\n            check the simple allocations.\n"
    },
    {
      "commit": "964b3746b9c81e65887e2ac9a335f181db2bb592",
      "tree": "9afaaac41a1c4f71b359fd6706b88df00e22e7a1",
      "parents": [
        "d33a764123a8aedb20cd84aeff3b94810ee67c4c"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri May 24 18:54:09 2019 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri May 24 18:54:09 2019 +0200"
      },
      "message": "patch 8.1.1384: using \"int\" for alloc() often results in compiler warnings\n\nProblem:    Using \"int\" for alloc() often results in compiler warnings.\nSolution:   Use \"size_t\" and remove type casts.  Remove alloc_check(), Vim\n            only works with 32 bit ints anyway.\n"
    },
    {
      "commit": "abab0b0fdd6535969447b03a4fffc1947918cf6c",
      "tree": "2d43537a5dce8433ef2b2a37684c9e069392c592",
      "parents": [
        "bd9bf266fccbf7b7f09e476e09b61f0133e914db"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Mar 30 18:47:01 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Mar 30 18:47:01 2019 +0100"
      },
      "message": "patch 8.1.1086: too many curly braces\n\nProblem:    Too many curly braces.\nSolution:   Remove curly braces where they are not needed. (Hirohito Higashi,\n            closes #3982)\n"
    },
    {
      "commit": "8e9a24a127c4ef8833fdc3986623f96c7d04210f",
      "tree": "d1aee2626ace3749ccbac2766ee158037b43bf2a",
      "parents": [
        "828bff1f9b4847da79abd7a97ddc48687e257d6c"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Mar 19 22:22:55 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Mar 19 22:22:55 2019 +0100"
      },
      "message": "patch 8.1.1021: pyeval() and py3eval() leak memory\n\nProblem:    pyeval() and py3eval() leak memory.\nSolution:   Do not increase the reference count twice. (Ozaki Kiichi,\n            closes #4129)\n"
    },
    {
      "commit": "828bff1f9b4847da79abd7a97ddc48687e257d6c",
      "tree": "286bad3361bbc1b956b0c4201ab448eba098b50e",
      "parents": [
        "4eefe47ea4b6bf958617e924f52bc7a409cfb0ed"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Mar 19 22:11:41 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Mar 19 22:11:41 2019 +0100"
      },
      "message": "patch 8.1.1020: compiler warning for Python3 interface\n\nProblem:    Compiler warning for Python3 interface.\nSolution:   Add type cast. (Ozaki Kiichi, closes #4128, closes #4103)\n"
    },
    {
      "commit": "14816ad6e58336773443f5ee2e4aa9e384af65d2",
      "tree": "f53327ad0ffed33997cf4bbe9ce4725cb2221980",
      "parents": [
        "0472b6d149445579e3a63519b15f099f9adda3f7"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 18 22:04:56 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 18 22:04:56 2019 +0100"
      },
      "message": "patch 8.1.0950: using :python sets \u0027pyxversion\u0027 even when not executed\n\nProblem:    Using :python sets \u0027pyxversion\u0027 even when not executed.\nSolution:   Check the \"skip\" flag. (Shane Harper, closes #3995)\n"
    },
    {
      "commit": "4f97475d326c2773a78561fb874e4f23c25cbcd9",
      "tree": "7e066bc70556dfbb415ddb9f364e8432e8aaf189",
      "parents": [
        "78d21dae9c3a39efb30316d3e38dce120bc1abbd"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Feb 17 17:44:42 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Feb 17 17:44:42 2019 +0100"
      },
      "message": "patch 8.1.0941: macros for MS-Windows are inconsistent\n\nProblem:    Macros for MS-Windows are inconsistent, using \"32\", \"3264 and\n            others.\nSolution:   Use MSWIN for all MS-Windows builds.  Use FEAT_GUI_MSWIN for the\n            GUI build. (Hirohito Higashi, closes #3932)\n"
    },
    {
      "commit": "f9e3e09fdc93be9f0d47afbc6c7df1188c2a5a0d",
      "tree": "a6b07005c19279a4f5d01be14f14861c2657fa95",
      "parents": [
        "05500ece6282407f9f7227aaf564e24147326863"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jan 13 23:38:42 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jan 13 23:38:42 2019 +0100"
      },
      "message": "patch 8.1.0743: giving error messages is not flexible\n\nProblem:    Giving error messages is not flexible.\nSolution:   Add semsg().  Change argument from \"char_u *\" to \"char *\", also\n            for msg() and get rid of most MSG macros. (Ozaki Kiichi, closes\n            #3302)  Also make emsg() accept a \"char *\" argument.  Get rid of\n            an enormous number of type casts.\n"
    },
    {
      "commit": "6e5ea8d2a995b32bbc5972edc4f827b959f2702f",
      "tree": "b1ad7d6a83f53220227122719d5eb97dd32ff1e6",
      "parents": [
        "e3c74d249ac36404d8af25f74baf335d143b30e3"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 12 22:47:31 2019 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 12 22:47:31 2019 +0100"
      },
      "message": "patch 8.1.0735: cannot handle binary data\n\nProblem:    Cannot handle binary data.\nSolution:   Add the Blob type. (Yasuhiro Matsumoto, closes #3638)\n"
    },
    {
      "commit": "6dff58f15cede9139b2fcfc64c9064326ea3d3b0",
      "tree": "f2326055f5fe8bb5948374155f11bd220c1d9dc7",
      "parents": [
        "f45d747ebf920940b041f5c75c2bfdffb6b670ae"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Sep 30 21:43:26 2018 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Sep 30 21:43:26 2018 +0200"
      },
      "message": "patch 8.1.0443: unnecessary static function prototypes\n\nProblem:    Unnecessary static function prototypes.\nSolution:   Remove unnecessary prototypes.\n"
    },
    {
      "commit": "3b48b11c07b85520f4ca3566e92c3f6486509b72",
      "tree": "51c37e4be094f9b0666c9fa161b34d4d694d9580",
      "parents": [
        "f0447e89a52885630947510f2d1b55f665a1a20e"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jul 04 22:03:25 2018 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jul 04 22:03:25 2018 +0200"
      },
      "message": "patch 8.1.0147: compiler warning when building with Python 3.7\n\nProblem:    Compiler warning when building with Python 3.7.\nSolution:   #undef PySlice_GetIndicesEx before redefining it. (Ozaki Kiichi,\n            closes #3153)\n"
    },
    {
      "commit": "d4a8c98ef6b294d605c5f93309509a944dc97a79",
      "tree": "4af02ac4a3d6f880ce362789d9f845255499604d",
      "parents": [
        "259f26ac2d41ecfb28b82c651b2bfc1edc7c3e29"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue May 15 22:31:18 2018 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue May 15 22:31:18 2018 +0200"
      },
      "message": "patch 8.0.1846: Python interface is incompatible with lldb\n\nProblem:    Python interface is incompatible with lldb.\nSolution:   For OutputType set the base to be PyFile_Type. (Boxu Zhang)\n            Partly disabled to avoid a crash.\n"
    },
    {
      "commit": "2e324950b83fcdf60843b54a6a339183370f338a",
      "tree": "c80a94cf7de8b07ad87c83d2188e83620df86cb0",
      "parents": [
        "78a16b0f2a142aae1fdc96c50ab0f25194d0e755"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Apr 14 14:37:07 2018 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Apr 14 14:37:07 2018 +0200"
      },
      "message": "patch 8.0.1709: some non-C89 code may slip through\n\nProblem:    Some non-C89 code may slip through.\nSolution:   Enforce C89 in configure. Fix detected problems. (James McCoy,\n            closes #2735)\n"
    },
    {
      "commit": "7b24ce08fe99345cac035215fca29c7e174a6456",
      "tree": "9e4b16243f3c4eb9906a6e35950b8f14c994999a",
      "parents": [
        "1834d37396e046ccbc4aa2678ba16a38197da6b4"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Mar 29 18:15:26 2018 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Mar 29 18:15:26 2018 +0200"
      },
      "message": "patch 8.0.1654: warnings for conversion of void to function pointer\n\nProblem:    Warnings for conversion of void to function pointer.\nSolution:   Use a temp variable that is a function pointer.\n"
    },
    {
      "commit": "16d7eced1a08565a9837db8067c7b9db5ed68854",
      "tree": "a8f26d8d1bfe4d0d62442682ca394d6ca5e8614c",
      "parents": [
        "75b0a888e41bcda4163072f41bb7b5471fef7651"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Mar 24 14:06:15 2018 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Mar 24 14:06:15 2018 +0100"
      },
      "message": "patch 8.0.1635: undefining _POSIX_THREADS causes problems with Python 3\n\nProblem:    Undefining _POSIX_THREADS causes problems with Python 3. (Micah\n            Bucy, closes #2748)\nSolution:   Remove the lines.\n"
    },
    {
      "commit": "94073167e3aa8cbe18380e93a2fc8e8165438cc8",
      "tree": "2e7c3078ffc53518b95979a118b16403699381ae",
      "parents": [
        "1dd45fb4f3371f0256653b2186c8b4b3d26b3f41"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jan 31 21:49:05 2018 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jan 31 21:49:05 2018 +0100"
      },
      "message": "patch 8.0.1451: difficult to set the python home directories properly\n\nProblem:    It is difficult to set the python home directory properly for\n            Python 2.7 and 3.5 since both use $PYTHONHOME.\nSolution:   Add the \u0027pythonhome\u0027 and \u0027pythonthreehome\u0027 options. (Kazuki\n            Sakamoto, closes #1266)\n"
    },
    {
      "commit": "d057301b1f28736f094affa17b190244ad56e8d9",
      "tree": "ae20801354321a5ff0d7d23b04d8d6018c57645a",
      "parents": [
        "ef83956e1e67736b4c6b886d897b74f022622a74"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 28 21:11:06 2017 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Oct 28 21:11:06 2017 +0200"
      },
      "message": "patch 8.0.1236: Mac features are confusing\n\nProblem:    Mac features are confusing.\nSolution:   Make feature names more consistent, add \"osxdarwin\". Rename\n            feature flags, cleanup Mac code. (Kazunobu Kuriyama, closes #2178)\n"
    },
    {
      "commit": "4033c55eca575777718c0701e26635a0cc47d907",
      "tree": "8dc460ad495106198a9119b52f6505033f7a75b3",
      "parents": [
        "e738a1a033cd31cd2568ba99a9e2dca1e65b45ea"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Sep 16 20:54:51 2017 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Sep 16 20:54:51 2017 +0200"
      },
      "message": "patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs\n\nProblem:    FEAT_WINDOWS adds a lot of #ifdefs while it is nearly always\n            enabled and only adds 7% to the binary size of the tiny build.\nSolution:   Graduate FEAT_WINDOWS.\n"
    },
    {
      "commit": "c4f833808af930505017c9389d44a828601e247c",
      "tree": "577f9425a910a666e2d6d8cad51a411460ec8cca",
      "parents": [
        "8858498516108432453526f07783f14c9196e112"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Jul 07 14:50:44 2017 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Jul 07 14:50:44 2017 +0200"
      },
      "message": "patch 8.0.0698: crash on exit when using Python function in timer.\n\nProblem:    When a timer uses \":pyeval\" or another Python command and it\n            happens to be triggered while exiting a Crash may happen.\n            (Ricky Zhou)\nSolution:   Avoid running a Python command after python_end() was called.\n            Do not trigger timers while exiting.  (closes #1824)\n"
    },
    {
      "commit": "f42dd3c3901ea0ba38e67a616aea9953cae81b8d",
      "tree": "3626ca40161dbfaa5e72a4dbeaa46b24480ddc8c",
      "parents": [
        "0c0590d9827cb07a33c1552cb3558b94bddcb4dc"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 28 16:06:38 2017 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 28 16:06:38 2017 +0100"
      },
      "message": "patch 8.0.0251: not easy to select Python 2 or 3\n\nProblem:    It is not so easy to write a script that works with both Python 2\n            and Python 3, even when the Python code works with both.\nSolution:   Add \u0027pyxversion\u0027, :pyx, etc. (Marc Weber, Ken Takata)\n"
    },
    {
      "commit": "edf3f97ae2af024708ebb4ac614227327033ca47",
      "tree": "82fed9ebfc85a69d3cff613f9dab11c8750fad8b",
      "parents": [
        "965ed14973fd3f1b2aace7bae4d4722b71ca04f9"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Aug 29 22:49:24 2016 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Aug 29 22:49:24 2016 +0200"
      },
      "message": "patch 7.4.2293\nProblem:    Modelines in source code are inconsistant.\nSolution:   Use the same line in most files.  Add \u0027noet\u0027.  (Naruhiko Nishino)\n"
    },
    {
      "commit": "6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953",
      "tree": "ff1a1467afecfc2a5a630e20cf3b0756834519f3",
      "parents": [
        "d106e5ba7f10f0d2a14eaefe5d78405044416cb9"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Apr 21 20:00:56 2016 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Apr 21 20:00:56 2016 +0200"
      },
      "message": "patch 7.4.1769\nProblem:    No \"closed\", \"errors\" and \"encoding\" attribute on Python output.\nSolution:   Add attributes and more tests. (Roland Puntaier, closes #622)\n"
    },
    {
      "commit": "8110a091bc749d8748a20807a724a3af3ca6d509",
      "tree": "87a81daf5175f9c892e6eca0e36f64a6400a1cb6",
      "parents": [
        "58de0e2dcc1f2d251b74892a06d71a14973f3187"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Apr 14 15:56:09 2016 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Apr 14 15:56:09 2016 +0200"
      },
      "message": "patch 7.4.1731\nProblem:    Python: turns partial into simple funcref.\nSolution:   Use partials like partials. (Nikolai Pavlov, closes #734)\n"
    },
    {
      "commit": "1735bc988c546cc962c5f94792815b4d7cb79710",
      "tree": "5d1fcc3e5d0f0d37fa33097c2eacff4cbc2317d4",
      "parents": [
        "9cdf86b86f5fdb5a45b682f336846f9d9a9c6f1f"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Mar 14 23:05:14 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Mar 14 23:05:14 2016 +0100"
      },
      "message": "patch 7.4.1559\nProblem:    Passing cookie to a callback is clumsy.\nSolution:   Change function() to take arguments and return a partial.\n"
    },
    {
      "commit": "6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c",
      "tree": "d2277cebb1354524326ac1333b3bd47f7453c456",
      "parents": [
        "f8df7addc5f741c16fa2a458f8777ac1fdf2e01e"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 16 15:06:59 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 16 15:06:59 2016 +0100"
      },
      "message": "patch 7.4.1334\nProblem:    Many compiler warnings with MingW.\nSolution:   Add type casts. (Yasuhiro Matsumoto)\n"
    },
    {
      "commit": "7707344ddec9069b495b2a5ed41f2104466fc88b",
      "tree": "9c6b21f811c7c38a89daf010c61453d7d6eaa8da",
      "parents": [
        "e516c39ee97cb85fa230fbb1b1f54ad1346920d9"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 13 23:23:53 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 13 23:23:53 2016 +0100"
      },
      "message": "patch 7.4.1315\nProblem:    Using a channel handle does not allow for freeing it when unused.\nSolution:   Add the Channel variable type.\n"
    },
    {
      "commit": "eba6d8c66c3511a5e1bfe6ffa30c8bea47d129ad",
      "tree": "27d8583580f559176697b41838b9f7715b642fb0",
      "parents": [
        "595e64e259faefb330866852e1b9f6168544572a"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Feb 07 19:25:51 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Feb 07 19:25:51 2016 +0100"
      },
      "message": "patch 7.4.1280\nProblem:    Missing case value.\nSolution:   Add VAR_JOB.\n"
    },
    {
      "commit": "1701481c53f4e6756038c9c00d51d491a8f42c65",
      "tree": "76b2d1c8bfb703e961555f0505b02c8ec5bc20bf",
      "parents": [
        "3712792637516aea7acf76a11533be1066952820"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 06 20:32:25 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 06 20:32:25 2016 +0100"
      },
      "message": "patch 7.4.1272\nProblem:    Using future enum value.\nSolution:   Remove it.\n"
    },
    {
      "commit": "81e7a9c3fb37cad46c8f04a5ce871fb06819a371",
      "tree": "137d60842f9637b69037c043e9e5f6e6215d3402",
      "parents": [
        "4f8b8faec31a934920a723053e8dcf47b6fac08c"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 06 19:57:20 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Feb 06 19:57:20 2016 +0100"
      },
      "message": "patch 7.4.1270\nProblem:    Warnings for missing values in switch.\nSolution:   Change switch to if-else or add values.\n"
    },
    {
      "commit": "68c2f638e65d914dc6e84eb7ce2624f08af525c0",
      "tree": "051b6b7500c6ac80c45cdeff26296c5b7acb88ff",
      "parents": [
        "66f948e928d5e0cd3123af902aa8ac1613534c94"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 30 17:24:07 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 30 17:24:07 2016 +0100"
      },
      "message": "patch 7.4.1208\nProblem:    Using old style function declarations.\nSolution:   Change to new style function declarations. (script by Hirohito\n            Higashi)\n"
    },
    {
      "commit": "92b8b2d307e34117f146319872010b0ccc9d2713",
      "tree": "14592978271f07a5bebd2e7001c2c1f2e7c3a60b",
      "parents": [
        "d25c16e2f2776d50245bf31d6e4d5364f12d188e"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Jan 29 22:36:45 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Jan 29 22:36:45 2016 +0100"
      },
      "message": "patch 7.4.1198\nProblem:    Still using __ARGS.\nSolution:   Remove __ARGS in several files. (script by Hirohito Higashi)\n            Also remove use of HAVE_STDARG_H.\n"
    },
    {
      "commit": "25e4fcde767084d1a79e0926bc301c92987c0cce",
      "tree": "2e2196f2e782cd2bd143b8ed1187697774f4a3ad",
      "parents": [
        "7b877b360532713dc21a0ff3d55a76ac02eaf573"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 09 14:57:47 2016 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Jan 09 14:57:47 2016 +0100"
      },
      "message": "patch 7.4.1065\nProblem:    Cannot use the \"dll\" options on MS-Windows.\nSolution:   Support the options on all platforms.  Use the built-in name as\n            the default, so that it\u0027s clear what Vim is looking for.\n"
    },
    {
      "commit": "1000565c3a2439c9a7c9759284814dbf3b8bc20d",
      "tree": "357f2fbcb81da653f6786b30175f13e3882361b7",
      "parents": [
        "2bf2417612879de627dcea1dbb22ee2199b16963"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Dec 31 21:03:23 2015 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Dec 31 21:03:23 2015 +0100"
      },
      "message": "patch 7.4.1012\nProblem:    Vim overwrites the value of $PYTHONHOME.\nSolution:   Do not set $PYTHONHOME if it is already set. (Kazuki Sakamoto,\n            closes #500)\n"
    },
    {
      "commit": "d94464ee294a351ce7b6ba18e8bd3f24f1bef920",
      "tree": "8c3e98bb5e0f82995a6ee8e7a0729a9ec788265c",
      "parents": [
        "8a52ba791893fd55c5bdf98825c5b3e8892eaa62"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 02 15:28:18 2015 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 02 15:28:18 2015 +0100"
      },
      "message": "patch 7.4.907\nProblem:    Libraries for dynamically loading interfaces can only be defined\n            at compile time.\nSolution:   Add options to specify the dll names. (Kazuki Sakamoto,\n            closes #452)\n"
    },
    {
      "commit": "094454fa708d3297db744f095cd2b7b155a8b6ad",
      "tree": "2ea8a487dd2621214e1e7cb0a48f3bb3de9a9004",
      "parents": [
        "74b738d414b2895b3365e26ae3b7792eb82ccf47"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 07 10:39:55 2015 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 07 10:39:55 2015 +0200"
      },
      "message": "patch 7.4.890\nProblem:    Build failure when using dynamic python but not python3.\nSolution:   Adjust the #if to also include DYNAMIC_PYTHON3 and UNIX.\n"
    },
    {
      "commit": "b641df49655bb34762b44aa8c6e03e5f464f73d6",
      "tree": "b9800dc3fcfb2c4f7b24167937ad21bb8b1940d5",
      "parents": [
        "016154919e317a8ce2b7f2e33db2f39ca3a8edb9"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 03 13:16:04 2015 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 03 13:16:04 2015 +0100"
      },
      "message": "updated for version 7.4.611\nProblem:    Syntax error.\nSolution:   Change statement to return.\n"
    },
    {
      "commit": "2459a5ecaa43c8549ea53e9364253ff891676da5",
      "tree": "b503323856e11d0e1e47e6c81875d32b1541ee04",
      "parents": [
        "4ac163ae5f137af236931e778660cf7878d70c25"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 03 12:55:18 2015 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 03 12:55:18 2015 +0100"
      },
      "message": "updated for version 7.4.609\nProblem:    For complicated list and dict use the garbage collector can run\n            out of stack space.\nSolution:   Use a stack of dicts and lists to be marked, thus making it\n            iterative instead of recursive. (Ben Fritz)\n"
    },
    {
      "commit": "922a4664fe51662a24097b8e74e5f716beef12f4",
      "tree": "50014c90eafda31e97acc98fe6e750570f70c391",
      "parents": [
        "498af70e066c66b66f1737b553287c1339846842"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Mar 30 16:11:43 2014 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Mar 30 16:11:43 2014 +0200"
      },
      "message": "updated for version 7.4.228\nProblem:    Compiler warnings when building with Python 3.2.\nSolution:   Make type cast depend on Python version. (Ken Takata)\n"
    },
    {
      "commit": "5395e7afe93d38793dcd6520b277ec0d3b1882ac",
      "tree": "fadf9ada5e4b1e29d938d8bf765ffcebcf292643",
      "parents": [
        "1028f4d75ee04261f1338620c22f388a05098bb0"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jan 14 19:35:56 2014 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jan 14 19:35:56 2014 +0100"
      },
      "message": "updated for version 7.4.153\nProblem:    Compiler warning for pointer type.\nSolution:   Add type cast.\n"
    },
    {
      "commit": "063a46ba77c3251f0b5245e872dcbad003c71024",
      "tree": "e85d7ca1c040ef4ecbef8f7bbbf7d92fe4ce823c",
      "parents": [
        "14177b77bf7bb9c3f1c7c8805bc6cff1b651c136"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jan 14 16:36:51 2014 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jan 14 16:36:51 2014 +0100"
      },
      "message": "updated for version 7.4.151\nProblem:    Python: slices with steps are not supported.\nSolution:   Support slices in Python vim.List. (ZyX)\n"
    },
    {
      "commit": "0b400087d076ba1a476d753c019fbfd96d8ae58e",
      "tree": "0cc81dc7cdb88fdb263cefb6b1bad70c2138d41c",
      "parents": [
        "9db1293317abd1aca101bf2d35caef0354f66e8b"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Nov 03 00:28:25 2013 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Nov 03 00:28:25 2013 +0100"
      },
      "message": "updated for version 7.4.060\nProblem:    Declaration has wrong return type for PyObject_SetAttrString().\nSolution:   Use int instead of PyObject. (Andreas Schwab)\n"
    },
    {
      "commit": "e032461eede2a80f184f1c08e22a76eaf18a480e",
      "tree": "b0ca53997ffe6a103c6986305ac6d8506e796689",
      "parents": [
        "b69510e889a1eb102bce83567a7b958d2f25b6ff"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jul 09 17:30:55 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Jul 09 17:30:55 2013 +0200"
      },
      "message": "updated for version 7.4a.008\nProblem:    Python 3 doesn\u0027t handle multibyte characters prooperly when\n            \u0027encoding\u0027 is not utf-8.\nSolution:   Use PyUnicode_Decode() instead of PyUnicode_FromString(). (Ken\n            Takata)\n"
    },
    {
      "commit": "32ac8cdaaaa32c09b0818c214e01e8e557d88b56",
      "tree": "95d169cbeb3d98450e7991e210ef5be77412f61a",
      "parents": [
        "0f5a5ed8bb3c014ef9de0480852a3e5737c33fc6"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jul 03 18:49:17 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Jul 03 18:49:17 2013 +0200"
      },
      "message": "updated for version 7.3.1299\nProblem:    Errors when doing \"make proto\".  Didn\u0027t do \"make depend\" for a\n            while.\nSolution:   Add #ifdefs.  Update dependencies.  Update proto files.\n"
    },
    {
      "commit": "41009374747d68a12d043bcca0ae649d0c18daf4",
      "tree": "e05985bb9262965f6c4ea9a4ddde724be7b89084",
      "parents": [
        "c33916a6e06db94ea1a3dfd35eee32ca80787ec5"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jul 01 22:03:04 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jul 01 22:03:04 2013 +0200"
      },
      "message": "updated for version 7.3.1287\nProblem:    Python SystemExit exception is not handled properly.\nSolution:   Catch the exception and give an error. (Yasuhiro Matsumoto, Ken\n            Takata)\n"
    },
    {
      "commit": "dee2e315d786cbe9d5bba2d388fb72d96ad1a846",
      "tree": "3a8548edebc6f07c6b08a3d2017dcb877f351bb4",
      "parents": [
        "ede3e6383d0bc86c13f039e9013ff72e307937d2"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 16:35:47 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 16:35:47 2013 +0200"
      },
      "message": "updated for version 7.3.1236\nProblem:    Python: WindowSetattr() missing support for NUMBER_UNSIGNED.\nSolution:   Add NUMBER_UNSIGNED, add more tests. Various fixes. (ZyX)\n"
    },
    {
      "commit": "141be8a585145d2217fb425739ccc121aed4a8d4",
      "tree": "1fbdd6ad7db5cc23313f05d9ef8f4f1aaa0772f1",
      "parents": [
        "c476e52fcaf9e1ad779add6368e4f46b2c0d881c"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 14:16:57 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 14:16:57 2013 +0200"
      },
      "message": "updated for version 7.3.1231\nProblem:    Python: use of numbers not consistent.\nSolution:   Add support for Number protocol. (ZyX)\n"
    },
    {
      "commit": "c476e52fcaf9e1ad779add6368e4f46b2c0d881c",
      "tree": "dc1d97fee9e56a07f4f1475ef938245a419c72ae",
      "parents": [
        "0bd80ccd853ddfa4cc2385b6ceb3b2610245a9ed"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:46:40 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:46:40 2013 +0200"
      },
      "message": "updated for version 7.3.1230\nProblem:    Python: Exception messages are not clear.\nSolution:   Make exception messages more verbose. (ZyX)\n"
    },
    {
      "commit": "0bd80ccd853ddfa4cc2385b6ceb3b2610245a9ed",
      "tree": "a1df58e6f24ee6e84b6fa024e8a4ea822697f995",
      "parents": [
        "808c2bc8bf435917b792e172a22dc5f8c0e7066a"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:28:17 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:28:17 2013 +0200"
      },
      "message": "updated for version 7.3.1229\nProblem:    Python: not so easy to delete/restore translating.\nSolution:   Make macros do translation of exception messages. (ZyX)\n            Note: this breaks translations!\n"
    },
    {
      "commit": "808c2bc8bf435917b792e172a22dc5f8c0e7066a",
      "tree": "84a7b5846ce850af47f3bf8358818d46470e97d4",
      "parents": [
        "389a1793f40b149ed8553fb75e7ee40bc684d8c5"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:11:18 2013 +0200"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Jun 23 13:11:18 2013 +0200"
      },
      "message": "updated for version 7.3.1228\nProblem:    Python: various inconsistencies and problems.\nSolution:   StringToLine now supports both bytes() and unicode() objects.\n            Make function names consistant.  Fix memory leak fixed in\n            StringToLine. (ZyX)\n"
    }
  ],
  "next": "5f87b23229b1d5cc5bad4a263e513e72a91fe8ae"
}
