Mercurial > vim
annotate src/if_python.c @ 34686:83875247fbc0 v9.1.0224
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Commit: https://github.com/vim/vim/commit/515f734e687f28f7199b2a8042197624d9f3ec15
Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Date: Thu Mar 28 12:01:14 2024 +0100
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Problem: If a line has "right" & "below" virtual text properties,
where the "below" property may be stored first due to lack of
ordering between them, then the line height is calculated to
be 1 more and causes the cursor to far over the line.
Solution: Remove some unnecessary setting of a
`next_right_goes_below = TRUE` flag for "below" and "above"
text properties. (Dylan Thacker-Smith)
I modified a regression test I recently added to cover this case,
leveraging the fact that "after", "right" & "below" text properties are
being stored in the reverse of the order they are added in. The
previous version of this regression test was crafted to workaround this
issue so it can be addressed by this separate patch.
closes: #14317
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 28 Mar 2024 12:15:03 +0100 |
parents | 1a769647d661 |
children |
rev | line source |
---|---|
3618 | 1 /* vi:set ts=8 sts=4 sw=4 noet: |
7 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 * See README.txt for an overview of the Vim source code. | |
8 */ | |
9 /* | |
10 * Python extensions by Paul Moore. | |
11 * Changes for Unix by David Leonard. | |
12 * | |
13 * This consists of four parts: | |
14 * 1. Python interpreter main program | |
15 * 2. Python output stream: writes output via [e]msg(). | |
16 * 3. Implementation of the Vim module for Python | |
17 * 4. Utility functions for handling the interface between Vim and Python. | |
18 */ | |
19 | |
20 #include "vim.h" | |
21 | |
22 #include <limits.h> | |
23 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
24 // uncomment this if used with the debug version of python. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
25 // Checked on 2.7.4. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
26 // #define Py_DEBUG |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
27 // Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
28 // uncomment this if used with the debug version of python, but without its |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
29 // allocator |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
30 // #define Py_DEBUG_NO_PYMALLOC |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
31 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
32 // Python.h defines _POSIX_THREADS itself (if needed) |
7 | 33 #ifdef _POSIX_THREADS |
34 # undef _POSIX_THREADS | |
35 #endif | |
36 | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15719
diff
changeset
|
37 #if defined(MSWIN) && defined(HAVE_FCNTL_H) |
7 | 38 # undef HAVE_FCNTL_H |
39 #endif | |
40 | |
41 #ifdef _DEBUG | |
42 # undef _DEBUG | |
43 #endif | |
44 | |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
45 #ifdef HAVE_STRFTIME |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
46 # undef HAVE_STRFTIME |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
47 #endif |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
48 #ifdef HAVE_STRING_H |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
49 # undef HAVE_STRING_H |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
50 #endif |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
51 #ifdef HAVE_PUTENV |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
52 # undef HAVE_PUTENV |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
53 #endif |
7 | 54 #ifdef HAVE_STDARG_H |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
55 # undef HAVE_STDARG_H // Python's config.h defines it as well. |
7 | 56 #endif |
1991 | 57 #ifdef _POSIX_C_SOURCE |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
58 # undef _POSIX_C_SOURCE // pyconfig.h defines it as well. |
1991 | 59 #endif |
60 #ifdef _XOPEN_SOURCE | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
61 # undef _XOPEN_SOURCE // pyconfig.h defines it as well. |
1991 | 62 #endif |
7 | 63 |
4823
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
64 #define PY_SSIZE_T_CLEAN |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
65 |
7 | 66 #include <Python.h> |
4823
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
67 |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
68 #if !defined(PY_VERSION_HEX) || PY_VERSION_HEX < 0x02050000 |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
69 # undef PY_SSIZE_T_CLEAN |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
70 #endif |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
71 |
23264
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
72 // these are NULL for Python 2 |
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
73 #define ERRORS_DECODE_ARG NULL |
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
74 #define ERRORS_ENCODE_ARG ERRORS_DECODE_ARG |
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
75 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
76 #undef main // Defined in python.h - aargh |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
77 #undef HAVE_FCNTL_H // Clash with os_win32.h |
7 | 78 |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
79 // Perhaps leave this out for Python 2.6, which supports bytes? |
4966
620d9b59d4ed
updated for version 7.3.1228
Bram Moolenaar <bram@vim.org>
parents:
4855
diff
changeset
|
80 #define PyBytes_FromString PyString_FromString |
13353
8412df1479a3
patch 8.0.1550: various small problems in source files
Christian Brabandt <cb@256bit.org>
parents:
13154
diff
changeset
|
81 #define PyBytes_Check PyString_Check |
4966
620d9b59d4ed
updated for version 7.3.1228
Bram Moolenaar <bram@vim.org>
parents:
4855
diff
changeset
|
82 #define PyBytes_AsStringAndSize PyString_AsStringAndSize |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
83 #define PyBytes_FromStringAndSize PyString_FromStringAndSize |
2894 | 84 |
7 | 85 #if !defined(FEAT_PYTHON) && defined(PROTO) |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
86 // Use this to be able to generate prototypes without python being used. |
1607 | 87 # define PyObject Py_ssize_t |
88 # define PyThreadState Py_ssize_t | |
89 # define PyTypeObject Py_ssize_t | |
90 struct PyMethodDef { Py_ssize_t a; }; | |
91 # define PySequenceMethods Py_ssize_t | |
7 | 92 #endif |
93 | |
3638 | 94 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
95 # define PY_USE_CAPSULE | |
96 #endif | |
97 | |
1594 | 98 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 |
99 # define PyInt Py_ssize_t | |
100 # define PyInquiry lenfunc | |
101 # define PyIntArgFunc ssizeargfunc | |
102 # define PyIntIntArgFunc ssizessizeargfunc | |
103 # define PyIntObjArgProc ssizeobjargproc | |
104 # define PyIntIntObjArgProc ssizessizeobjargproc | |
1607 | 105 # define Py_ssize_t_fmt "n" |
1594 | 106 #else |
107 # define PyInt int | |
4319 | 108 # define lenfunc inquiry |
1594 | 109 # define PyInquiry inquiry |
110 # define PyIntArgFunc intargfunc | |
111 # define PyIntIntArgFunc intintargfunc | |
112 # define PyIntObjArgProc intobjargproc | |
113 # define PyIntIntObjArgProc intintobjargproc | |
1607 | 114 # define Py_ssize_t_fmt "i" |
1594 | 115 #endif |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
116 #define Py_bytes_fmt "s" |
1594 | 117 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
118 // Parser flags |
7 | 119 #define single_input 256 |
120 #define file_input 257 | |
121 #define eval_input 258 | |
122 | |
123 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x020300F0 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
124 // Python 2.3: can invoke ":python" recursively. |
7 | 125 # define PY_CAN_RECURSE |
126 #endif | |
127 | |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
128 #if defined(DYNAMIC_PYTHON) || defined(PROTO) |
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
129 # ifndef DYNAMIC_PYTHON |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
130 # define HINSTANCE long_u // for generating prototypes |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
131 # endif |
7 | 132 |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
133 # ifdef MSWIN |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
134 # define load_dll vimLoadLib |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
135 # define close_dll FreeLibrary |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
136 # define symbol_from_dll GetProcAddress |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
137 # define load_dll_error GetWin32Error |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
138 # else |
2528
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
139 # include <dlfcn.h> |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
140 # define FARPROC void* |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
141 # define HINSTANCE void* |
2641 | 142 # if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL) |
2528
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
143 # define load_dll(n) dlopen((n), RTLD_LAZY) |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
144 # else |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
145 # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
146 # endif |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
147 # define close_dll dlclose |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
148 # define symbol_from_dll dlsym |
25342
c4298ed56ffa
patch 8.2.3208: dynamic library load error does not mention why it failed
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
149 # define load_dll_error dlerror |
2528
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
150 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
2311
diff
changeset
|
151 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
152 // This makes if_python.c compile without warnings against Python 2.5 |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
153 // on Win32 and Win64. |
2528
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
154 # undef PyRun_SimpleString |
3618 | 155 # undef PyRun_String |
2528
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
156 # undef PyArg_Parse |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
157 # undef PyArg_ParseTuple |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
158 # undef Py_BuildValue |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
159 # undef Py_InitModule4 |
8bc2e8390c11
When building with both Python 2 and Python 3 don't use RTLD_GLOBAL, so that
Bram Moolenaar <bram@vim.org>
parents:
2447
diff
changeset
|
160 # undef Py_InitModule4_64 |
3618 | 161 # undef PyObject_CallMethod |
4851
96e154e825a7
updated for version 7.3.1172
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
162 # undef PyObject_CallFunction |
1607 | 163 |
7 | 164 /* |
165 * Wrapper defines | |
166 */ | |
167 # define PyArg_Parse dll_PyArg_Parse | |
168 # define PyArg_ParseTuple dll_PyArg_ParseTuple | |
2894 | 169 # define PyMem_Free dll_PyMem_Free |
3618 | 170 # define PyMem_Malloc dll_PyMem_Malloc |
7 | 171 # define PyDict_SetItemString dll_PyDict_SetItemString |
172 # define PyErr_BadArgument dll_PyErr_BadArgument | |
4409 | 173 # define PyErr_NewException dll_PyErr_NewException |
7 | 174 # define PyErr_Clear dll_PyErr_Clear |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4966
diff
changeset
|
175 # define PyErr_Format dll_PyErr_Format |
4145 | 176 # define PyErr_PrintEx dll_PyErr_PrintEx |
7 | 177 # define PyErr_NoMemory dll_PyErr_NoMemory |
178 # define PyErr_Occurred dll_PyErr_Occurred | |
179 # define PyErr_SetNone dll_PyErr_SetNone | |
180 # define PyErr_SetString dll_PyErr_SetString | |
4403 | 181 # define PyErr_SetObject dll_PyErr_SetObject |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
182 # define PyErr_ExceptionMatches dll_PyErr_ExceptionMatches |
7 | 183 # define PyEval_InitThreads dll_PyEval_InitThreads |
184 # define PyEval_RestoreThread dll_PyEval_RestoreThread | |
185 # define PyEval_SaveThread dll_PyEval_SaveThread | |
186 # ifdef PY_CAN_RECURSE | |
187 # define PyGILState_Ensure dll_PyGILState_Ensure | |
188 # define PyGILState_Release dll_PyGILState_Release | |
189 # endif | |
190 # define PyInt_AsLong dll_PyInt_AsLong | |
191 # define PyInt_FromLong dll_PyInt_FromLong | |
3618 | 192 # define PyLong_AsLong dll_PyLong_AsLong |
193 # define PyLong_FromLong dll_PyLong_FromLong | |
3828 | 194 # define PyBool_Type (*dll_PyBool_Type) |
7 | 195 # define PyInt_Type (*dll_PyInt_Type) |
3618 | 196 # define PyLong_Type (*dll_PyLong_Type) |
7 | 197 # define PyList_GetItem dll_PyList_GetItem |
637 | 198 # define PyList_Append dll_PyList_Append |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
199 # define PyList_Insert dll_PyList_Insert |
7 | 200 # define PyList_New dll_PyList_New |
201 # define PyList_SetItem dll_PyList_SetItem | |
202 # define PyList_Size dll_PyList_Size | |
203 # define PyList_Type (*dll_PyList_Type) | |
3618 | 204 # define PySequence_Check dll_PySequence_Check |
205 # define PySequence_Size dll_PySequence_Size | |
206 # define PySequence_GetItem dll_PySequence_GetItem | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
207 # define PySequence_Fast dll_PySequence_Fast |
3618 | 208 # define PyTuple_Size dll_PyTuple_Size |
209 # define PyTuple_GetItem dll_PyTuple_GetItem | |
210 # define PyTuple_Type (*dll_PyTuple_Type) | |
5608 | 211 # define PySlice_GetIndicesEx dll_PySlice_GetIndicesEx |
7 | 212 # define PyImport_ImportModule dll_PyImport_ImportModule |
637 | 213 # define PyDict_New dll_PyDict_New |
7 | 214 # define PyDict_GetItemString dll_PyDict_GetItemString |
3618 | 215 # define PyDict_Next dll_PyDict_Next |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
216 # define PyDict_Type (*dll_PyDict_Type) |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
217 # ifdef PyMapping_Keys |
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
218 # define PY_NO_MAPPING_KEYS |
3618 | 219 # else |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
220 # define PyMapping_Keys dll_PyMapping_Keys |
3618 | 221 # endif |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
222 # define PyObject_GetItem dll_PyObject_GetItem |
3618 | 223 # define PyObject_CallMethod dll_PyObject_CallMethod |
224 # define PyMapping_Check dll_PyMapping_Check | |
225 # define PyIter_Next dll_PyIter_Next | |
7 | 226 # define PyModule_GetDict dll_PyModule_GetDict |
4831
b8eabb6a9687
updated for version 7.3.1162
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
227 # define PyModule_AddObject dll_PyModule_AddObject |
7 | 228 # define PyRun_SimpleString dll_PyRun_SimpleString |
3618 | 229 # define PyRun_String dll_PyRun_String |
4435 | 230 # define PyObject_GetAttrString dll_PyObject_GetAttrString |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
231 # define PyObject_HasAttrString dll_PyObject_HasAttrString |
4435 | 232 # define PyObject_SetAttrString dll_PyObject_SetAttrString |
233 # define PyObject_CallFunctionObjArgs dll_PyObject_CallFunctionObjArgs | |
4851
96e154e825a7
updated for version 7.3.1172
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
234 # define PyObject_CallFunction dll_PyObject_CallFunction |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4645
diff
changeset
|
235 # define PyObject_Call dll_PyObject_Call |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
236 # define PyObject_Repr dll_PyObject_Repr |
7 | 237 # define PyString_AsString dll_PyString_AsString |
3798 | 238 # define PyString_AsStringAndSize dll_PyString_AsStringAndSize |
7 | 239 # define PyString_FromString dll_PyString_FromString |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
240 # define PyString_FromFormat dll_PyString_FromFormat |
7 | 241 # define PyString_FromStringAndSize dll_PyString_FromStringAndSize |
242 # define PyString_Size dll_PyString_Size | |
243 # define PyString_Type (*dll_PyString_Type) | |
3618 | 244 # define PyUnicode_Type (*dll_PyUnicode_Type) |
3642 | 245 # undef PyUnicode_AsEncodedString |
246 # define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString | |
3618 | 247 # define PyFloat_AsDouble dll_PyFloat_AsDouble |
248 # define PyFloat_FromDouble dll_PyFloat_FromDouble | |
249 # define PyFloat_Type (*dll_PyFloat_Type) | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
250 # define PyNumber_Check dll_PyNumber_Check |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
251 # define PyNumber_Long dll_PyNumber_Long |
3618 | 252 # define PyImport_AddModule (*dll_PyImport_AddModule) |
7 | 253 # define PySys_SetObject dll_PySys_SetObject |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
254 # define PySys_GetObject dll_PySys_GetObject |
7 | 255 # define PySys_SetArgv dll_PySys_SetArgv |
256 # define PyType_Type (*dll_PyType_Type) | |
13952
76a65058766f
patch 8.0.1846: Python interface is incompatible with lldb
Christian Brabandt <cb@256bit.org>
parents:
13561
diff
changeset
|
257 # define PyFile_Type (*dll_PyFile_Type) |
5608 | 258 # define PySlice_Type (*dll_PySlice_Type) |
2737 | 259 # define PyType_Ready (*dll_PyType_Ready) |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
260 # define PyType_GenericAlloc dll_PyType_GenericAlloc |
7 | 261 # define Py_BuildValue dll_Py_BuildValue |
262 # define Py_FindMethod dll_Py_FindMethod | |
263 # define Py_InitModule4 dll_Py_InitModule4 | |
2641 | 264 # define Py_SetPythonHome dll_Py_SetPythonHome |
7 | 265 # define Py_Initialize dll_Py_Initialize |
242 | 266 # define Py_Finalize dll_Py_Finalize |
267 # define Py_IsInitialized dll_Py_IsInitialized | |
7 | 268 # define _PyObject_New dll__PyObject_New |
4500 | 269 # define _PyObject_GC_New dll__PyObject_GC_New |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
270 # ifdef PyObject_GC_Del |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
271 # define Py_underscore_GC |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
272 # define _PyObject_GC_Del dll__PyObject_GC_Del |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
273 # define _PyObject_GC_UnTrack dll__PyObject_GC_UnTrack |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
274 # else |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
275 # define PyObject_GC_Del dll_PyObject_GC_Del |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
276 # define PyObject_GC_UnTrack dll_PyObject_GC_UnTrack |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
277 # endif |
3646 | 278 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
279 # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented) | |
280 # endif | |
7 | 281 # define _Py_NoneStruct (*dll__Py_NoneStruct) |
3828 | 282 # define _Py_ZeroStruct (*dll__Py_ZeroStruct) |
283 # define _Py_TrueStruct (*dll__Py_TrueStruct) | |
7 | 284 # define PyObject_Init dll__PyObject_Init |
3618 | 285 # define PyObject_GetIter dll_PyObject_GetIter |
4399 | 286 # define PyObject_IsTrue dll_PyObject_IsTrue |
7 | 287 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 |
288 # define PyType_IsSubtype dll_PyType_IsSubtype | |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
289 # ifdef Py_DEBUG |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
290 # define _Py_NegativeRefcount dll__Py_NegativeRefcount |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
291 # define _Py_RefTotal (*dll__Py_RefTotal) |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
292 # define _Py_Dealloc dll__Py_Dealloc |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
293 # endif |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
294 # endif |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
295 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
296 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
297 # define _PyObject_DebugMalloc dll__PyObject_DebugMalloc |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
298 # define _PyObject_DebugFree dll__PyObject_DebugFree |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
299 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
300 # define PyObject_Malloc dll_PyObject_Malloc |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
301 # define PyObject_Free dll_PyObject_Free |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
302 # endif |
7 | 303 # endif |
3638 | 304 # ifdef PY_USE_CAPSULE |
305 # define PyCapsule_New dll_PyCapsule_New | |
306 # define PyCapsule_GetPointer dll_PyCapsule_GetPointer | |
307 # else | |
308 # define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr | |
309 # define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr | |
310 # endif | |
6083 | 311 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
312 # define Py_NoSiteFlag (*dll_Py_NoSiteFlag) | |
313 # endif | |
7 | 314 |
315 /* | |
316 * Pointers for dynamic link | |
317 */ | |
318 static int(*dll_PyArg_Parse)(PyObject *, char *, ...); | |
319 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...); | |
33303
924e9cb09df7
patch 9.0.1917: undefined behaviour with python function pointer
Christian Brabandt <cb@256bit.org>
parents:
33295
diff
changeset
|
320 static void(*dll_PyMem_Free)(void *); |
3618 | 321 static void* (*dll_PyMem_Malloc)(size_t); |
7 | 322 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); |
323 static int(*dll_PyErr_BadArgument)(void); | |
4409 | 324 static PyObject *(*dll_PyErr_NewException)(char *, PyObject *, PyObject *); |
7 | 325 static void(*dll_PyErr_Clear)(void); |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4966
diff
changeset
|
326 static PyObject*(*dll_PyErr_Format)(PyObject *, const char *, ...); |
4145 | 327 static void(*dll_PyErr_PrintEx)(int); |
7 | 328 static PyObject*(*dll_PyErr_NoMemory)(void); |
329 static PyObject*(*dll_PyErr_Occurred)(void); | |
330 static void(*dll_PyErr_SetNone)(PyObject *); | |
331 static void(*dll_PyErr_SetString)(PyObject *, const char *); | |
4403 | 332 static void(*dll_PyErr_SetObject)(PyObject *, PyObject *); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
333 static int(*dll_PyErr_ExceptionMatches)(PyObject *); |
7 | 334 static void(*dll_PyEval_InitThreads)(void); |
335 static void(*dll_PyEval_RestoreThread)(PyThreadState *); | |
336 static PyThreadState*(*dll_PyEval_SaveThread)(void); | |
337 # ifdef PY_CAN_RECURSE | |
338 static PyGILState_STATE (*dll_PyGILState_Ensure)(void); | |
339 static void (*dll_PyGILState_Release)(PyGILState_STATE); | |
3618 | 340 # endif |
7 | 341 static long(*dll_PyInt_AsLong)(PyObject *); |
342 static PyObject*(*dll_PyInt_FromLong)(long); | |
3618 | 343 static long(*dll_PyLong_AsLong)(PyObject *); |
344 static PyObject*(*dll_PyLong_FromLong)(long); | |
3828 | 345 static PyTypeObject* dll_PyBool_Type; |
7 | 346 static PyTypeObject* dll_PyInt_Type; |
3618 | 347 static PyTypeObject* dll_PyLong_Type; |
1594 | 348 static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
349 static int(*dll_PyList_Append)(PyObject *, PyObject *); |
4986
048c69ebe8ee
updated for version 7.3.1238
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
350 static int(*dll_PyList_Insert)(PyObject *, PyInt, PyObject *); |
1594 | 351 static PyObject*(*dll_PyList_New)(PyInt size); |
352 static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *); | |
353 static PyInt(*dll_PyList_Size)(PyObject *); | |
7 | 354 static PyTypeObject* dll_PyList_Type; |
3618 | 355 static int (*dll_PySequence_Check)(PyObject *); |
356 static PyInt(*dll_PySequence_Size)(PyObject *); | |
357 static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt); | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
358 static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *); |
3618 | 359 static PyInt(*dll_PyTuple_Size)(PyObject *); |
360 static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt); | |
361 static PyTypeObject* dll_PyTuple_Type; | |
5612 | 362 static int (*dll_PySlice_GetIndicesEx)(PySliceObject *r, PyInt length, |
5608 | 363 PyInt *start, PyInt *stop, PyInt *step, |
364 PyInt *slicelen); | |
7 | 365 static PyObject*(*dll_PyImport_ImportModule)(const char *); |
637 | 366 static PyObject*(*dll_PyDict_New)(void); |
7 | 367 static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *); |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
368 static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **); |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
369 static PyTypeObject* dll_PyDict_Type; |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
370 # ifndef PY_NO_MAPPING_KEYS |
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
371 static PyObject* (*dll_PyMapping_Keys)(PyObject *); |
3618 | 372 # endif |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
373 static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *); |
3618 | 374 static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *); |
375 static int (*dll_PyMapping_Check)(PyObject *); | |
376 static PyObject* (*dll_PyIter_Next)(PyObject *); | |
7 | 377 static PyObject*(*dll_PyModule_GetDict)(PyObject *); |
4831
b8eabb6a9687
updated for version 7.3.1162
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
378 static int(*dll_PyModule_AddObject)(PyObject *, const char *, PyObject *); |
7 | 379 static int(*dll_PyRun_SimpleString)(char *); |
3618 | 380 static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *); |
4435 | 381 static PyObject* (*dll_PyObject_GetAttrString)(PyObject *, const char *); |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
382 static int (*dll_PyObject_HasAttrString)(PyObject *, const char *); |
5419 | 383 static int (*dll_PyObject_SetAttrString)(PyObject *, const char *, PyObject *); |
4435 | 384 static PyObject* (*dll_PyObject_CallFunctionObjArgs)(PyObject *, ...); |
4851
96e154e825a7
updated for version 7.3.1172
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
385 static PyObject* (*dll_PyObject_CallFunction)(PyObject *, char *, ...); |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4645
diff
changeset
|
386 static PyObject* (*dll_PyObject_Call)(PyObject *, PyObject *, PyObject *); |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
387 static PyObject* (*dll_PyObject_Repr)(PyObject *); |
7 | 388 static char*(*dll_PyString_AsString)(PyObject *); |
4986
048c69ebe8ee
updated for version 7.3.1238
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
389 static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, PyInt *); |
7 | 390 static PyObject*(*dll_PyString_FromString)(const char *); |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
391 static PyObject*(*dll_PyString_FromFormat)(const char *, ...); |
1594 | 392 static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt); |
393 static PyInt(*dll_PyString_Size)(PyObject *); | |
7 | 394 static PyTypeObject* dll_PyString_Type; |
3618 | 395 static PyTypeObject* dll_PyUnicode_Type; |
3642 | 396 static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *); |
3618 | 397 static double(*dll_PyFloat_AsDouble)(PyObject *); |
398 static PyObject*(*dll_PyFloat_FromDouble)(double); | |
399 static PyTypeObject* dll_PyFloat_Type; | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
400 static int(*dll_PyNumber_Check)(PyObject *); |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
401 static PyObject*(*dll_PyNumber_Long)(PyObject *); |
7 | 402 static int(*dll_PySys_SetObject)(char *, PyObject *); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
403 static PyObject *(*dll_PySys_GetObject)(char *); |
7 | 404 static int(*dll_PySys_SetArgv)(int, char **); |
405 static PyTypeObject* dll_PyType_Type; | |
13952
76a65058766f
patch 8.0.1846: Python interface is incompatible with lldb
Christian Brabandt <cb@256bit.org>
parents:
13561
diff
changeset
|
406 static PyTypeObject* dll_PyFile_Type; |
5608 | 407 static PyTypeObject* dll_PySlice_Type; |
2737 | 408 static int (*dll_PyType_Ready)(PyTypeObject *type); |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
409 static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems); |
7 | 410 static PyObject*(*dll_Py_BuildValue)(char *, ...); |
411 static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *); | |
412 static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int); | |
3618 | 413 static PyObject*(*dll_PyImport_AddModule)(char *); |
2641 | 414 static void(*dll_Py_SetPythonHome)(char *home); |
7 | 415 static void(*dll_Py_Initialize)(void); |
242 | 416 static void(*dll_Py_Finalize)(void); |
417 static int(*dll_Py_IsInitialized)(void); | |
7 | 418 static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *); |
4500 | 419 static PyObject*(*dll__PyObject_GC_New)(PyTypeObject *); |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
420 # ifdef Py_underscore_GC |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
421 static void(*dll__PyObject_GC_Del)(void *); |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
422 static void(*dll__PyObject_GC_UnTrack)(void *); |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
423 # else |
4500 | 424 static void(*dll_PyObject_GC_Del)(void *); |
425 static void(*dll_PyObject_GC_UnTrack)(void *); | |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
426 # endif |
7 | 427 static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *); |
3618 | 428 static PyObject* (*dll_PyObject_GetIter)(PyObject *); |
4399 | 429 static int (*dll_PyObject_IsTrue)(PyObject *); |
3646 | 430 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
3618 | 431 static iternextfunc dll__PyObject_NextNotImplemented; |
3646 | 432 # endif |
7 | 433 static PyObject* dll__Py_NoneStruct; |
3828 | 434 static PyObject* _Py_ZeroStruct; |
435 static PyObject* dll__Py_TrueStruct; | |
7 | 436 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 |
437 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *); | |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
438 # ifdef Py_DEBUG |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
439 static void (*dll__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
440 static PyInt* dll__Py_RefTotal; |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
441 static void (*dll__Py_Dealloc)(PyObject *obj); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
442 # endif |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
443 # endif |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
444 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
445 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
446 static void (*dll__PyObject_DebugFree)(void*); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
447 static void* (*dll__PyObject_DebugMalloc)(size_t); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
448 # else |
7 | 449 static void* (*dll_PyObject_Malloc)(size_t); |
450 static void (*dll_PyObject_Free)(void*); | |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
451 # endif |
7 | 452 # endif |
3638 | 453 # ifdef PY_USE_CAPSULE |
3618 | 454 static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor); |
455 static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *); | |
3638 | 456 # else |
3648 | 457 static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *)); |
458 static void* (*dll_PyCObject_AsVoidPtr)(PyObject *); | |
3638 | 459 # endif |
6083 | 460 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
461 static int* dll_Py_NoSiteFlag; | |
462 # endif | |
7 | 463 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
464 static HINSTANCE hinstPython = 0; // Instance of python.dll |
7 | 465 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
466 // Imported exception objects |
7 | 467 static PyObject *imp_PyExc_AttributeError; |
468 static PyObject *imp_PyExc_IndexError; | |
4315 | 469 static PyObject *imp_PyExc_KeyError; |
7 | 470 static PyObject *imp_PyExc_KeyboardInterrupt; |
471 static PyObject *imp_PyExc_TypeError; | |
472 static PyObject *imp_PyExc_ValueError; | |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4986
diff
changeset
|
473 static PyObject *imp_PyExc_SystemExit; |
4405 | 474 static PyObject *imp_PyExc_RuntimeError; |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
475 static PyObject *imp_PyExc_ImportError; |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
476 static PyObject *imp_PyExc_OverflowError; |
7 | 477 |
478 # define PyExc_AttributeError imp_PyExc_AttributeError | |
479 # define PyExc_IndexError imp_PyExc_IndexError | |
4315 | 480 # define PyExc_KeyError imp_PyExc_KeyError |
7 | 481 # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt |
482 # define PyExc_TypeError imp_PyExc_TypeError | |
483 # define PyExc_ValueError imp_PyExc_ValueError | |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4986
diff
changeset
|
484 # define PyExc_SystemExit imp_PyExc_SystemExit |
4405 | 485 # define PyExc_RuntimeError imp_PyExc_RuntimeError |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
486 # define PyExc_ImportError imp_PyExc_ImportError |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
487 # define PyExc_OverflowError imp_PyExc_OverflowError |
7 | 488 |
489 /* | |
490 * Table of name to function pointer of python. | |
491 */ | |
492 # define PYTHON_PROC FARPROC | |
493 static struct | |
494 { | |
495 char *name; | |
496 PYTHON_PROC *ptr; | |
497 } python_funcname_table[] = | |
498 { | |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
499 # ifdef PY_SSIZE_T_CLEAN |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
500 {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse}, |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
501 {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
502 {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue}, |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
503 # else |
7 | 504 {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse}, |
505 {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, | |
3806 | 506 {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue}, |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
507 # endif |
2894 | 508 {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free}, |
3618 | 509 {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc}, |
7 | 510 {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, |
511 {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument}, | |
4409 | 512 {"PyErr_NewException", (PYTHON_PROC*)&dll_PyErr_NewException}, |
7 | 513 {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear}, |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4966
diff
changeset
|
514 {"PyErr_Format", (PYTHON_PROC*)&dll_PyErr_Format}, |
4145 | 515 {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx}, |
7 | 516 {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory}, |
517 {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred}, | |
518 {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone}, | |
519 {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString}, | |
4403 | 520 {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
521 {"PyErr_ExceptionMatches", (PYTHON_PROC*)&dll_PyErr_ExceptionMatches}, |
7 | 522 {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads}, |
523 {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread}, | |
524 {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread}, | |
525 # ifdef PY_CAN_RECURSE | |
526 {"PyGILState_Ensure", (PYTHON_PROC*)&dll_PyGILState_Ensure}, | |
527 {"PyGILState_Release", (PYTHON_PROC*)&dll_PyGILState_Release}, | |
528 # endif | |
529 {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong}, | |
530 {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong}, | |
3618 | 531 {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong}, |
532 {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong}, | |
3828 | 533 {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type}, |
7 | 534 {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type}, |
3618 | 535 {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type}, |
7 | 536 {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem}, |
637 | 537 {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
538 {"PyList_Insert", (PYTHON_PROC*)&dll_PyList_Insert}, |
7 | 539 {"PyList_New", (PYTHON_PROC*)&dll_PyList_New}, |
540 {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem}, | |
541 {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size}, | |
542 {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type}, | |
3618 | 543 {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size}, |
544 {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check}, | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
545 {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem}, |
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
546 {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast}, |
3618 | 547 {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem}, |
548 {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size}, | |
549 {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type}, | |
5608 | 550 {"PySlice_GetIndicesEx", (PYTHON_PROC*)&dll_PySlice_GetIndicesEx}, |
7 | 551 {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule}, |
552 {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString}, | |
3618 | 553 {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next}, |
637 | 554 {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New}, |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
555 {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type}, |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
556 # ifndef PY_NO_MAPPING_KEYS |
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
557 {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys}, |
3618 | 558 # endif |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
559 {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem}, |
3618 | 560 {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod}, |
561 {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check}, | |
562 {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next}, | |
7 | 563 {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict}, |
4831
b8eabb6a9687
updated for version 7.3.1162
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
564 {"PyModule_AddObject", (PYTHON_PROC*)&dll_PyModule_AddObject}, |
7 | 565 {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString}, |
3618 | 566 {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String}, |
4435 | 567 {"PyObject_GetAttrString", (PYTHON_PROC*)&dll_PyObject_GetAttrString}, |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
568 {"PyObject_HasAttrString", (PYTHON_PROC*)&dll_PyObject_HasAttrString}, |
4435 | 569 {"PyObject_SetAttrString", (PYTHON_PROC*)&dll_PyObject_SetAttrString}, |
570 {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&dll_PyObject_CallFunctionObjArgs}, | |
4851
96e154e825a7
updated for version 7.3.1172
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
571 {"PyObject_CallFunction", (PYTHON_PROC*)&dll_PyObject_CallFunction}, |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4645
diff
changeset
|
572 {"PyObject_Call", (PYTHON_PROC*)&dll_PyObject_Call}, |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
573 {"PyObject_Repr", (PYTHON_PROC*)&dll_PyObject_Repr}, |
7 | 574 {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString}, |
3798 | 575 {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize}, |
7 | 576 {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString}, |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
577 {"PyString_FromFormat", (PYTHON_PROC*)&dll_PyString_FromFormat}, |
7 | 578 {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize}, |
579 {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size}, | |
580 {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type}, | |
3618 | 581 {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type}, |
582 {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type}, | |
583 {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble}, | |
584 {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble}, | |
585 {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule}, | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
586 {"PyNumber_Check", (PYTHON_PROC*)&dll_PyNumber_Check}, |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
587 {"PyNumber_Long", (PYTHON_PROC*)&dll_PyNumber_Long}, |
7 | 588 {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
589 {"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject}, |
7 | 590 {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv}, |
591 {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type}, | |
13952
76a65058766f
patch 8.0.1846: Python interface is incompatible with lldb
Christian Brabandt <cb@256bit.org>
parents:
13561
diff
changeset
|
592 {"PyFile_Type", (PYTHON_PROC*)&dll_PyFile_Type}, |
5608 | 593 {"PySlice_Type", (PYTHON_PROC*)&dll_PySlice_Type}, |
2737 | 594 {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready}, |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
595 {"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc}, |
7 | 596 {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod}, |
2641 | 597 {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome}, |
7 | 598 {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize}, |
242 | 599 {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize}, |
600 {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized}, | |
7 | 601 {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New}, |
4500 | 602 {"_PyObject_GC_New", (PYTHON_PROC*)&dll__PyObject_GC_New}, |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
603 # ifdef Py_underscore_GC |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
604 {"_PyObject_GC_Del", (PYTHON_PROC*)&dll__PyObject_GC_Del}, |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
605 {"_PyObject_GC_UnTrack", (PYTHON_PROC*)&dll__PyObject_GC_UnTrack}, |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
606 # else |
4500 | 607 {"PyObject_GC_Del", (PYTHON_PROC*)&dll_PyObject_GC_Del}, |
608 {"PyObject_GC_UnTrack", (PYTHON_PROC*)&dll_PyObject_GC_UnTrack}, | |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
609 # endif |
7 | 610 {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init}, |
3618 | 611 {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter}, |
4399 | 612 {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue}, |
3646 | 613 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
3618 | 614 {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented}, |
3646 | 615 # endif |
7 | 616 {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct}, |
3828 | 617 {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct}, |
618 {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct}, | |
7 | 619 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
620 # ifdef Py_DEBUG |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
621 {"_Py_NegativeRefcount", (PYTHON_PROC*)&dll__Py_NegativeRefcount}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
622 {"_Py_RefTotal", (PYTHON_PROC*)&dll__Py_RefTotal}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
623 {"_Py_Dealloc", (PYTHON_PROC*)&dll__Py_Dealloc}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
624 # endif |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
625 {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype}, |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
626 # endif |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
627 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000 |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
628 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
629 {"_PyObject_DebugFree", (PYTHON_PROC*)&dll__PyObject_DebugFree}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
630 {"_PyObject_DebugMalloc", (PYTHON_PROC*)&dll__PyObject_DebugMalloc}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
631 # else |
7 | 632 {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc}, |
633 {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free}, | |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
634 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
635 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
636 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ |
5684 | 637 && SIZEOF_SIZE_T != VIM_SIZEOF_INT |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
638 # ifdef Py_DEBUG |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
639 {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
640 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
641 {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
642 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
643 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
644 # ifdef Py_DEBUG |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
645 {"Py_InitModule4TraceRefs", (PYTHON_PROC*)&dll_Py_InitModule4}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
646 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
647 {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
648 # endif |
7 | 649 # endif |
3638 | 650 # ifdef PY_USE_CAPSULE |
3618 | 651 {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New}, |
652 {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer}, | |
3638 | 653 # else |
654 {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr}, | |
655 {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr}, | |
656 # endif | |
6083 | 657 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
658 {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag}, | |
659 # endif | |
7 | 660 {"", NULL}, |
661 }; | |
662 | |
663 /* | |
664 * Load library and get all pointers. | |
665 * Parameter 'libname' provides name of DLL. | |
666 * Return OK or FAIL. | |
667 */ | |
668 static int | |
669 python_runtime_link_init(char *libname, int verbose) | |
670 { | |
671 int i; | |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
672 PYTHON_PROC *ucs_as_encoded_string = |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
673 (PYTHON_PROC*)&py_PyUnicode_AsEncodedString; |
7 | 674 |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
675 # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3) |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
676 // Can't have Python and Python3 loaded at the same time. |
26771
fc859aea8cec
patch 8.2.3914: various spelling mistakes in comments
Bram Moolenaar <Bram@vim.org>
parents:
25342
diff
changeset
|
677 // It causes a crash, because RTLD_GLOBAL is needed for |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
678 // standard C extension libraries of one or both python versions. |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
679 if (python3_loaded()) |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
680 { |
3032 | 681 if (verbose) |
26962
85866e069c24
patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26952
diff
changeset
|
682 emsg(_(e_this_vim_cannot_execute_python_after_using_py3)); |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
683 return FAIL; |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
684 } |
15719
3f92851b9a57
patch 8.1.0867: cannot build Python interface with Python 2.4
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
685 # endif |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
686 |
7 | 687 if (hinstPython) |
688 return OK; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
2311
diff
changeset
|
689 hinstPython = load_dll(libname); |
7 | 690 if (!hinstPython) |
691 { | |
692 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
693 semsg(_(e_could_not_load_library_str_str), libname, load_dll_error()); |
7 | 694 return FAIL; |
695 } | |
696 | |
697 for (i = 0; python_funcname_table[i].ptr; ++i) | |
698 { | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
2311
diff
changeset
|
699 if ((*python_funcname_table[i].ptr = symbol_from_dll(hinstPython, |
7 | 700 python_funcname_table[i].name)) == NULL) |
701 { | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
2311
diff
changeset
|
702 close_dll(hinstPython); |
7 | 703 hinstPython = 0; |
704 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
705 semsg(_(e_could_not_load_library_function_str), python_funcname_table[i].name); |
7 | 706 return FAIL; |
707 } | |
708 } | |
3642 | 709 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
710 // Load unicode functions separately as only the ucs2 or the ucs4 functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
711 // will be present in the library. |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
712 *ucs_as_encoded_string = symbol_from_dll(hinstPython, |
3642 | 713 "PyUnicodeUCS2_AsEncodedString"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
714 if (*ucs_as_encoded_string == NULL) |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
715 *ucs_as_encoded_string = symbol_from_dll(hinstPython, |
3642 | 716 "PyUnicodeUCS4_AsEncodedString"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13353
diff
changeset
|
717 if (*ucs_as_encoded_string == NULL) |
3642 | 718 { |
719 close_dll(hinstPython); | |
720 hinstPython = 0; | |
721 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
722 semsg(_(e_could_not_load_library_function_str), "PyUnicode_UCSX_*"); |
3642 | 723 return FAIL; |
724 } | |
725 | |
7 | 726 return OK; |
727 } | |
728 | |
729 /* | |
730 * If python is enabled (there is installed python on Windows system) return | |
731 * TRUE, else FALSE. | |
732 */ | |
733 int | |
1607 | 734 python_enabled(int verbose) |
7 | 735 { |
7528
53163e4d9e4f
commit https://github.com/vim/vim/commit/25e4fcde767084d1a79e0926bc301c92987c0cce
Christian Brabandt <cb@256bit.org>
parents:
7416
diff
changeset
|
736 return python_runtime_link_init((char *)p_pydll, verbose) == OK; |
7 | 737 } |
738 | |
2447
84d353762845
Move many more common Python items to if_py_both.c.
Bram Moolenaar <bram@vim.org>
parents:
2399
diff
changeset
|
739 /* |
84d353762845
Move many more common Python items to if_py_both.c.
Bram Moolenaar <bram@vim.org>
parents:
2399
diff
changeset
|
740 * Load the standard Python exceptions - don't import the symbols from the |
7 | 741 * DLL, as this can cause errors (importing data symbols is not reliable). |
742 */ | |
743 static void | |
2447
84d353762845
Move many more common Python items to if_py_both.c.
Bram Moolenaar <bram@vim.org>
parents:
2399
diff
changeset
|
744 get_exceptions(void) |
7 | 745 { |
746 PyObject *exmod = PyImport_ImportModule("exceptions"); | |
747 PyObject *exdict = PyModule_GetDict(exmod); | |
748 imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError"); | |
749 imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError"); | |
4315 | 750 imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError"); |
7 | 751 imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt"); |
752 imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError"); | |
753 imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError"); | |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4986
diff
changeset
|
754 imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit"); |
4405 | 755 imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError"); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
756 imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError"); |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
757 imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError"); |
7 | 758 Py_XINCREF(imp_PyExc_AttributeError); |
759 Py_XINCREF(imp_PyExc_IndexError); | |
4315 | 760 Py_XINCREF(imp_PyExc_KeyError); |
7 | 761 Py_XINCREF(imp_PyExc_KeyboardInterrupt); |
762 Py_XINCREF(imp_PyExc_TypeError); | |
763 Py_XINCREF(imp_PyExc_ValueError); | |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4986
diff
changeset
|
764 Py_XINCREF(imp_PyExc_SystemExit); |
4405 | 765 Py_XINCREF(imp_PyExc_RuntimeError); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
766 Py_XINCREF(imp_PyExc_ImportError); |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
767 Py_XINCREF(imp_PyExc_OverflowError); |
7 | 768 Py_XDECREF(exmod); |
769 } | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
770 #endif // DYNAMIC_PYTHON |
7 | 771 |
3618 | 772 static int initialised = 0; |
773 #define PYINITIALISED initialised | |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
774 static int python_end_called = FALSE; |
3618 | 775 |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
776 #define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self); |
4319 | 777 |
4377 | 778 #define WIN_PYTHON_REF(win) win->w_python_ref |
779 #define BUF_PYTHON_REF(buf) buf->b_python_ref | |
4401 | 780 #define TAB_PYTHON_REF(tab) tab->tp_python_ref |
4377 | 781 |
4319 | 782 static PyObject *OutputGetattr(PyObject *, char *); |
783 static PyObject *BufferGetattr(PyObject *, char *); | |
784 static PyObject *WindowGetattr(PyObject *, char *); | |
4401 | 785 static PyObject *TabPageGetattr(PyObject *, char *); |
4319 | 786 static PyObject *RangeGetattr(PyObject *, char *); |
787 static PyObject *DictionaryGetattr(PyObject *, char*); | |
788 static PyObject *ListGetattr(PyObject *, char *); | |
789 static PyObject *FunctionGetattr(PyObject *, char *); | |
790 | |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
791 #ifndef Py_VISIT |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
792 # define Py_VISIT(obj) visit(obj, arg) |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
793 #endif |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
794 #ifndef Py_CLEAR |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
795 # define Py_CLEAR(obj) \ |
4591
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
796 { \ |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
797 Py_XDECREF(obj); \ |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
798 obj = NULL; \ |
1e8952a5a726
updated for version 7.3.1043
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
799 } |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
800 #endif |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
801 |
4645
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
802 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
803 static void * |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
804 py_memsave(void *p, size_t len) |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
805 { |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
806 void *r; |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
807 |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
808 if (!(r = PyMem_Malloc(len))) |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
809 return NULL; |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
810 mch_memmove(r, p, len); |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
811 return r; |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
812 } |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
813 |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
814 # define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1)) |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
815 #endif |
c316a30a8892
updated for version 7.3.1070
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
816 |
5768 | 817 typedef PySliceObject PySliceObject_T; |
818 | |
2399
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
819 /* |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
820 * Include the code shared with if_python3.c |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
821 */ |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
822 #include "if_py_both.h" |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
823 |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
824 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
825 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
826 // Internal function prototypes. |
7 | 827 |
828 static int PythonMod_Init(void); | |
829 | |
830 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
831 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
832 // 1. Python interpreter main program. |
7 | 833 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
834 #if PYTHON_API_VERSION < 1007 // Python 1.4 |
7 | 835 typedef PyObject PyThreadState; |
323 | 836 #endif |
837 | |
4415 | 838 #ifndef PY_CAN_RECURSE |
36 | 839 static PyThreadState *saved_python_thread = NULL; |
7 | 840 |
841 /* | |
842 * Suspend a thread of the Python interpreter, other threads are allowed to | |
843 * run. | |
844 */ | |
36 | 845 static void |
846 Python_SaveThread(void) | |
7 | 847 { |
848 saved_python_thread = PyEval_SaveThread(); | |
849 } | |
850 | |
851 /* | |
852 * Restore a thread of the Python interpreter, waits for other threads to | |
853 * block. | |
854 */ | |
36 | 855 static void |
856 Python_RestoreThread(void) | |
7 | 857 { |
858 PyEval_RestoreThread(saved_python_thread); | |
859 saved_python_thread = NULL; | |
4415 | 860 } |
323 | 861 #endif |
7 | 862 |
863 void | |
7823
bcef391c101c
commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
864 python_end(void) |
7 | 865 { |
557 | 866 static int recurse = 0; |
867 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
868 // If a crash occurs while doing this, don't try again. |
557 | 869 if (recurse != 0) |
870 return; | |
871 | |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
872 python_end_called = TRUE; |
557 | 873 ++recurse; |
874 | |
7 | 875 #ifdef DYNAMIC_PYTHON |
242 | 876 if (hinstPython && Py_IsInitialized()) |
323 | 877 { |
4415 | 878 # ifdef PY_CAN_RECURSE |
879 PyGILState_Ensure(); | |
880 # else | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
881 Python_RestoreThread(); // enter python |
4415 | 882 # endif |
856 | 883 Py_Finalize(); |
323 | 884 } |
242 | 885 #else |
886 if (Py_IsInitialized()) | |
323 | 887 { |
4415 | 888 # ifdef PY_CAN_RECURSE |
889 PyGILState_Ensure(); | |
890 # else | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
891 Python_RestoreThread(); // enter python |
4415 | 892 # endif |
856 | 893 Py_Finalize(); |
323 | 894 } |
7 | 895 #endif |
557 | 896 |
897 --recurse; | |
7 | 898 } |
899 | |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
900 #if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO) |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
901 int |
7823
bcef391c101c
commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
902 python_loaded(void) |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
903 { |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
904 return (hinstPython != 0); |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
905 } |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
906 #endif |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
907 |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
908 static char *py_home_buf = NULL; |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
909 |
7 | 910 static int |
911 Python_Init(void) | |
912 { | |
913 if (!initialised) | |
914 { | |
6083 | 915 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
916 PyObject *site; | |
917 #endif | |
918 | |
7 | 919 #ifdef DYNAMIC_PYTHON |
920 if (!python_enabled(TRUE)) | |
921 { | |
26897
d02d40f0261c
patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
922 emsg(_(e_sorry_this_command_is_disabled_python_library_could_not_be_found)); |
7 | 923 goto fail; |
924 } | |
925 #endif | |
926 | |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
927 if (*p_pyhome != NUL) |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
928 { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
929 // The string must not change later, make a copy in static memory. |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
930 py_home_buf = (char *)vim_strsave(p_pyhome); |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
931 if (py_home_buf != NULL) |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
932 Py_SetPythonHome(py_home_buf); |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
933 } |
2641 | 934 #ifdef PYTHON_HOME |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
935 else if (mch_getenv((char_u *)"PYTHONHOME") == NULL) |
7416
cd69647bb839
commit https://github.com/vim/vim/commit/1000565c3a2439c9a7c9759284814dbf3b8bc20d
Christian Brabandt <cb@256bit.org>
parents:
7196
diff
changeset
|
936 Py_SetPythonHome(PYTHON_HOME); |
2641 | 937 #endif |
938 | |
2399
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
939 init_structs(); |
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
940 |
6083 | 941 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
942 // Disable implicit 'import site', because it may cause Vim to exit |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
943 // when it can't be found. |
6083 | 944 Py_NoSiteFlag++; |
945 #endif | |
946 | |
7 | 947 Py_Initialize(); |
6083 | 948 |
949 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
950 // 'import site' explicitly. |
6083 | 951 site = PyImport_ImportModule("site"); |
952 if (site == NULL) | |
953 { | |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
954 emsg(_(e_sorry_this_command_is_disabled_python_side_module_could_not_be_loaded)); |
6083 | 955 goto fail; |
956 } | |
957 Py_DECREF(site); | |
958 #endif | |
959 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
960 // Initialise threads, and below save the state using |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
961 // PyEval_SaveThread. Without the call to PyEval_SaveThread, thread |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
962 // specific state (such as the system trace hook), will be lost |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
963 // between invocations of Python code. |
7 | 964 PyEval_InitThreads(); |
965 #ifdef DYNAMIC_PYTHON | |
966 get_exceptions(); | |
967 #endif | |
968 | |
4494 | 969 if (PythonIO_Init_io()) |
7 | 970 goto fail; |
971 | |
972 if (PythonMod_Init()) | |
973 goto fail; | |
974 | |
3618 | 975 globals = PyModule_GetDict(PyImport_AddModule("__main__")); |
976 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
977 // Remove the element from sys.path that was added because of our |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
978 // argv[0] value in PythonMod_Init(). Previously we used an empty |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
979 // string, but depending on the OS we then get an empty entry or |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
980 // the current directory in sys.path. |
1748 | 981 PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); |
982 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
983 // lock is created and acquired in PyEval_InitThreads() and thread |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
984 // state is created in Py_Initialize() |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
985 // there _PyGILState_NoteThreadState() also sets gilcounter to 1 |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
986 // (python must have threads enabled!) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
987 // so the following does both: unlock GIL and save thread state in TLS |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
988 // without deleting thread state |
4399 | 989 #ifndef PY_CAN_RECURSE |
990 saved_python_thread = | |
991 #endif | |
992 PyEval_SaveThread(); | |
7 | 993 |
994 initialised = 1; | |
995 } | |
996 | |
997 return 0; | |
998 | |
999 fail: | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1000 // We call PythonIO_Flush() here to print any Python errors. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1001 // This is OK, as it is possible to call this function even |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1002 // if PythonIO_Init_io() has not completed successfully (it will |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1003 // not do anything in this case). |
7 | 1004 PythonIO_Flush(); |
1005 return -1; | |
1006 } | |
1007 | |
1008 /* | |
1009 * External interface | |
1010 */ | |
1011 static void | |
4486 | 1012 DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg) |
7 | 1013 { |
323 | 1014 #ifndef PY_CAN_RECURSE |
7 | 1015 static int recursive = 0; |
1016 #endif | |
1017 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) | |
1018 char *saved_locale; | |
1019 #endif | |
4415 | 1020 #ifdef PY_CAN_RECURSE |
1021 PyGILState_STATE pygilstate; | |
1022 #endif | |
7 | 1023 |
1024 #ifndef PY_CAN_RECURSE | |
1025 if (recursive) | |
1026 { | |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26897
diff
changeset
|
1027 emsg(_(e_cannot_invoke_python_recursively)); |
7 | 1028 return; |
1029 } | |
1030 ++recursive; | |
1031 #endif | |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1032 if (python_end_called) |
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1033 return; |
7 | 1034 |
1035 if (Python_Init()) | |
1036 goto theend; | |
1037 | |
4486 | 1038 init_range(arg); |
1039 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1040 Python_Release_Vim(); // leave Vim |
7 | 1041 |
1042 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1043 // Python only works properly when the LC_NUMERIC locale is "C". |
7 | 1044 saved_locale = setlocale(LC_NUMERIC, NULL); |
1045 if (saved_locale == NULL || STRCMP(saved_locale, "C") == 0) | |
1046 saved_locale = NULL; | |
1047 else | |
1048 { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1049 // Need to make a copy, value may change when setting new locale. |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1050 saved_locale = (char *) PY_STRSAVE(saved_locale); |
7 | 1051 (void)setlocale(LC_NUMERIC, "C"); |
1052 } | |
1053 #endif | |
1054 | |
4415 | 1055 #ifdef PY_CAN_RECURSE |
1056 pygilstate = PyGILState_Ensure(); | |
1057 #else | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1058 Python_RestoreThread(); // enter python |
4415 | 1059 #endif |
7 | 1060 |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1061 run((char *) cmd, arg |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1062 #ifdef PY_CAN_RECURSE |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1063 , &pygilstate |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1064 #endif |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1065 ); |
7 | 1066 |
4415 | 1067 #ifdef PY_CAN_RECURSE |
1068 PyGILState_Release(pygilstate); | |
1069 #else | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1070 Python_SaveThread(); // leave python |
4415 | 1071 #endif |
7 | 1072 |
1073 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) | |
1074 if (saved_locale != NULL) | |
1075 { | |
1076 (void)setlocale(LC_NUMERIC, saved_locale); | |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1077 PyMem_Free(saved_locale); |
7 | 1078 } |
1079 #endif | |
1080 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1081 Python_Lock_Vim(); // enter vim |
7 | 1082 PythonIO_Flush(); |
1083 | |
1084 theend: | |
1085 #ifndef PY_CAN_RECURSE | |
1086 --recursive; | |
1087 #endif | |
3618 | 1088 return; |
7 | 1089 } |
1090 | |
1091 /* | |
1092 * ":python" | |
1093 */ | |
1094 void | |
1095 ex_python(exarg_T *eap) | |
1096 { | |
1097 char_u *script; | |
1098 | |
1099 script = script_get(eap, eap->arg); | |
1100 if (!eap->skip) | |
1101 { | |
15888
a83c4b1f8ea2
patch 8.1.0950: using :python sets 'pyxversion' even when not executed
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1102 if (p_pyx == 0) |
a83c4b1f8ea2
patch 8.1.0950: using :python sets 'pyxversion' even when not executed
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1103 p_pyx = 2; |
a83c4b1f8ea2
patch 8.1.0950: using :python sets 'pyxversion' even when not executed
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1104 |
4486 | 1105 DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
31702
diff
changeset
|
1106 init_range_cmd, |
4486 | 1107 (runner) run_cmd, |
1108 (void *) eap); | |
7 | 1109 } |
1110 vim_free(script); | |
1111 } | |
1112 | |
1113 #define BUFFER_SIZE 1024 | |
1114 | |
1115 /* | |
1116 * ":pyfile" | |
1117 */ | |
1118 void | |
1119 ex_pyfile(exarg_T *eap) | |
1120 { | |
1121 static char buffer[BUFFER_SIZE]; | |
1122 const char *file = (char *)eap->arg; | |
1123 char *p; | |
1124 | |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1125 if (p_pyx == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1126 p_pyx = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1127 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1128 // Have to do it like this. PyRun_SimpleFile requires you to pass a |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1129 // stdio file pointer, but Vim and the Python DLL are compiled with |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1130 // different options under Windows, meaning that stdio pointers aren't |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1131 // compatible between the two. Yuk. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1132 // |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1133 // Put the string "execfile('file')" into buffer. But, we need to |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1134 // escape any backslashes or single quotes in the file name, so that |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1135 // Python won't mangle the file name. |
7 | 1136 strcpy(buffer, "execfile('"); |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1137 p = buffer + 10; // size of "execfile('" |
7 | 1138 |
1139 while (*file && p < buffer + (BUFFER_SIZE - 3)) | |
1140 { | |
1141 if (*file == '\\' || *file == '\'') | |
1142 *p++ = '\\'; | |
1143 *p++ = *file++; | |
1144 } | |
1145 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1146 // If we didn't finish the file name, we hit a buffer overflow |
7 | 1147 if (*file != '\0') |
1148 return; | |
1149 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1150 // Put in the terminating "')" and a null |
7 | 1151 *p++ = '\''; |
1152 *p++ = ')'; | |
1153 *p++ = '\0'; | |
1154 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1155 // Execute the file |
4486 | 1156 DoPyCommand(buffer, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
31702
diff
changeset
|
1157 init_range_cmd, |
4486 | 1158 (runner) run_cmd, |
1159 (void *) eap); | |
7 | 1160 } |
1161 | |
4435 | 1162 void |
1163 ex_pydo(exarg_T *eap) | |
1164 { | |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1165 if (p_pyx == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1166 p_pyx = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1167 |
4486 | 1168 DoPyCommand((char *)eap->arg, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
31702
diff
changeset
|
1169 init_range_cmd, |
4486 | 1170 (runner)run_do, |
1171 (void *)eap); | |
4435 | 1172 } |
1173 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1174 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1175 // 2. Python output stream: writes output via [e]msg(). |
7 | 1176 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1177 // Implementation functions |
7 | 1178 |
1179 static PyObject * | |
1180 OutputGetattr(PyObject *self, char *name) | |
1181 { | |
1182 if (strcmp(name, "softspace") == 0) | |
1183 return PyInt_FromLong(((OutputObject *)(self))->softspace); | |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1184 else if (strcmp(name, "__members__") == 0) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1185 return ObjectDir(NULL, OutputAttrs); |
8967
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1186 else if (strcmp(name, "errors") == 0) |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1187 return PyString_FromString("strict"); |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1188 else if (strcmp(name, "encoding") == 0) |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1189 return PyString_FromString(ENC_OPT); |
7 | 1190 return Py_FindMethod(OutputMethods, self, name); |
1191 } | |
1192 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1193 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1194 // 3. Implementation of the Vim module for Python |
7 | 1195 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1196 // Window type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1197 // -------------------------------------- |
7 | 1198 |
1199 #define WindowType_Check(obj) ((obj)->ob_type == &WindowType) | |
1200 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1201 // Buffer type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1202 // -------------------------------------- |
7 | 1203 |
1204 #define BufferType_Check(obj) ((obj)->ob_type == &BufferType) | |
1205 | |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1206 static int BufferAssItem(PyObject *, PyInt, PyObject *); |
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1207 static int BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *); |
7 | 1208 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1209 // Line range type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1210 // -------------------------------------- |
7 | 1211 |
1212 #define RangeType_Check(obj) ((obj)->ob_type == &RangeType) | |
1213 | |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1214 static int RangeAssItem(PyObject *, PyInt, PyObject *); |
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1215 static int RangeAssSlice(PyObject *, PyInt, PyInt, PyObject *); |
7 | 1216 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1217 // Current objects type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1218 // ----------------------------------------------- |
7 | 1219 |
1220 static PySequenceMethods BufferAsSeq = { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1221 (PyInquiry) BufferLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1222 (binaryfunc) 0, // BufferConcat, sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1223 (PyIntArgFunc) 0, // BufferRepeat, sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1224 (PyIntArgFunc) BufferItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1225 (PyIntIntArgFunc) BufferSlice, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1226 (PyIntObjArgProc) BufferAssItem, // sq_ass_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1227 (PyIntIntObjArgProc) BufferAssSlice, // sq_ass_slice, x[i:j]=v |
4319 | 1228 (objobjproc) 0, |
1229 (binaryfunc) 0, | |
7 | 1230 0, |
1231 }; | |
1232 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1233 // Buffer object - Implementation |
7 | 1234 |
1235 static PyObject * | |
1236 BufferGetattr(PyObject *self, char *name) | |
1237 { | |
4319 | 1238 PyObject *r; |
7 | 1239 |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1240 if ((r = BufferAttrValid((BufferObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1241 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1242 |
4319 | 1243 if (CheckBuffer((BufferObject *)(self))) |
7 | 1244 return NULL; |
1245 | |
4319 | 1246 r = BufferAttr((BufferObject *)(self), name); |
1247 if (r || PyErr_Occurred()) | |
1248 return r; | |
7 | 1249 else |
1250 return Py_FindMethod(BufferMethods, self, name); | |
1251 } | |
1252 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1253 ////////////////// |
7 | 1254 |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1255 static int |
1594 | 1256 BufferAssItem(PyObject *self, PyInt n, PyObject *val) |
7 | 1257 { |
4387 | 1258 return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL); |
7 | 1259 } |
1260 | |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1261 static int |
1594 | 1262 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) |
7 | 1263 { |
4387 | 1264 return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL); |
7 | 1265 } |
1266 | |
1267 static PySequenceMethods RangeAsSeq = { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1268 (PyInquiry) RangeLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1269 (binaryfunc) 0, /* RangeConcat, */ // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1270 (PyIntArgFunc) 0, /* RangeRepeat, */ // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1271 (PyIntArgFunc) RangeItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1272 (PyIntIntArgFunc) RangeSlice, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1273 (PyIntObjArgProc) RangeAssItem, // sq_ass_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1274 (PyIntIntObjArgProc) RangeAssSlice, // sq_ass_slice, x[i:j]=v |
4319 | 1275 (objobjproc) 0, |
1276 #if PY_MAJOR_VERSION >= 2 | |
1277 (binaryfunc) 0, | |
1278 0, | |
1279 #endif | |
7 | 1280 }; |
1281 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1282 // Line range object - Implementation |
7 | 1283 |
1284 static PyObject * | |
1285 RangeGetattr(PyObject *self, char *name) | |
1286 { | |
1287 if (strcmp(name, "start") == 0) | |
1607 | 1288 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1); |
7 | 1289 else if (strcmp(name, "end") == 0) |
1607 | 1290 return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1); |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1291 else if (strcmp(name, "__members__") == 0) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1292 return ObjectDir(NULL, RangeAttrs); |
7 | 1293 else |
1294 return Py_FindMethod(RangeMethods, self, name); | |
1295 } | |
1296 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1297 //////////////// |
7 | 1298 |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1299 static int |
1594 | 1300 RangeAssItem(PyObject *self, PyInt n, PyObject *val) |
7 | 1301 { |
2447
84d353762845
Move many more common Python items to if_py_both.c.
Bram Moolenaar <bram@vim.org>
parents:
2399
diff
changeset
|
1302 return RBAsItem(((RangeObject *)(self))->buf, n, val, |
7 | 1303 ((RangeObject *)(self))->start, |
1304 ((RangeObject *)(self))->end, | |
1305 &((RangeObject *)(self))->end); | |
1306 } | |
1307 | |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1308 static int |
1594 | 1309 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) |
7 | 1310 { |
2894 | 1311 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, |
7 | 1312 ((RangeObject *)(self))->start, |
1313 ((RangeObject *)(self))->end, | |
1314 &((RangeObject *)(self))->end); | |
1315 } | |
1316 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1317 // TabPage object - Implementation |
4401 | 1318 |
1319 static PyObject * | |
1320 TabPageGetattr(PyObject *self, char *name) | |
1321 { | |
1322 PyObject *r; | |
1323 | |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1324 if ((r = TabPageAttrValid((TabPageObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1325 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1326 |
4401 | 1327 if (CheckTabPage((TabPageObject *)(self))) |
1328 return NULL; | |
1329 | |
1330 r = TabPageAttr((TabPageObject *)(self), name); | |
1331 if (r || PyErr_Occurred()) | |
1332 return r; | |
1333 else | |
1334 return Py_FindMethod(TabPageMethods, self, name); | |
1335 } | |
1336 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1337 // Window object - Implementation |
7 | 1338 |
1339 static PyObject * | |
1340 WindowGetattr(PyObject *self, char *name) | |
1341 { | |
4319 | 1342 PyObject *r; |
7 | 1343 |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1344 if ((r = WindowAttrValid((WindowObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1345 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4591
diff
changeset
|
1346 |
4319 | 1347 if (CheckWindow((WindowObject *)(self))) |
7 | 1348 return NULL; |
1349 | |
4319 | 1350 r = WindowAttr((WindowObject *)(self), name); |
1351 if (r || PyErr_Occurred()) | |
1352 return r; | |
7 | 1353 else |
1354 return Py_FindMethod(WindowMethods, self, name); | |
1355 } | |
1356 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1357 // Tab page list object - Definitions |
4401 | 1358 |
1359 static PySequenceMethods TabListAsSeq = { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1360 (PyInquiry) TabListLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1361 (binaryfunc) 0, // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1362 (PyIntArgFunc) 0, // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1363 (PyIntArgFunc) TabListItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1364 (PyIntIntArgFunc) 0, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1365 (PyIntObjArgProc) 0, // sq_ass_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1366 (PyIntIntObjArgProc) 0, // sq_ass_slice, x[i:j]=v |
4401 | 1367 (objobjproc) 0, |
1368 #if PY_MAJOR_VERSION >= 2 | |
1369 (binaryfunc) 0, | |
1370 0, | |
1371 #endif | |
1372 }; | |
1373 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1374 // Window list object - Definitions |
7 | 1375 |
1376 static PySequenceMethods WinListAsSeq = { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1377 (PyInquiry) WinListLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1378 (binaryfunc) 0, // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1379 (PyIntArgFunc) 0, // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1380 (PyIntArgFunc) WinListItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1381 (PyIntIntArgFunc) 0, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1382 (PyIntObjArgProc) 0, // sq_ass_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1383 (PyIntIntObjArgProc) 0, // sq_ass_slice, x[i:j]=v |
4319 | 1384 (objobjproc) 0, |
1385 #if PY_MAJOR_VERSION >= 2 | |
1386 (binaryfunc) 0, | |
7 | 1387 0, |
4319 | 1388 #endif |
7 | 1389 }; |
1390 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1391 // External interface |
7 | 1392 |
1393 void | |
1394 python_buffer_free(buf_T *buf) | |
1395 { | |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1396 BufferObject *bp = BUF_PYTHON_REF(buf); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1397 if (bp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1398 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1399 bp->buf = INVALID_BUFFER_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1400 BUF_PYTHON_REF(buf) = NULL; |
7 | 1401 } |
1402 | |
1403 void | |
1404 python_window_free(win_T *win) | |
1405 { | |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1406 WindowObject *wp = WIN_PYTHON_REF(win); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1407 if (wp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1408 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1409 wp->win = INVALID_WINDOW_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1410 WIN_PYTHON_REF(win) = NULL; |
7 | 1411 } |
4401 | 1412 |
1413 void | |
1414 python_tabpage_free(tabpage_T *tab) | |
1415 { | |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1416 TabPageObject *tp = TAB_PYTHON_REF(tab); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1417 if (tp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1418 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1419 tp->tab = INVALID_TABPAGE_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1420 TAB_PYTHON_REF(tab) = NULL; |
4401 | 1421 } |
7 | 1422 |
4494 | 1423 static int |
7 | 1424 PythonMod_Init(void) |
1425 { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1426 // The special value is removed from sys.path in Python_Init(). |
4851
96e154e825a7
updated for version 7.3.1172
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
1427 static char *(argv[2]) = {"/must>not&exist/foo", NULL}; |
7 | 1428 |
4494 | 1429 if (init_types()) |
1430 return -1; | |
7 | 1431 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1432 // Set sys.argv[] to avoid a crash in warn(). |
7 | 1433 PySys_SetArgv(1, argv); |
1434 | |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1435 vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL, |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1436 (PyObject *)NULL, PYTHON_API_VERSION); |
7 | 1437 |
4982
39980afcf54a
updated for version 7.3.1236
Bram Moolenaar <bram@vim.org>
parents:
4972
diff
changeset
|
1438 if (populate_module(vim_module)) |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1439 return -1; |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1440 |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1441 if (init_sys_path()) |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1442 return -1; |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1443 |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4831
diff
changeset
|
1444 return 0; |
7 | 1445 } |
1446 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1447 ////////////////////////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1448 // 4. Utility functions for handling the interface between Vim and Python. |
7 | 1449 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1450 // Convert a Vim line into a Python string. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1451 // All internal newlines are replaced by null characters. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1452 // |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1453 // On errors, the Python exception data is set, and NULL is returned. |
7 | 1454 static PyObject * |
1455 LineToString(const char *str) | |
1456 { | |
1457 PyObject *result; | |
1594 | 1458 PyInt len = strlen(str); |
7 | 1459 char *p; |
1460 | |
26771
fc859aea8cec
patch 8.2.3914: various spelling mistakes in comments
Bram Moolenaar <Bram@vim.org>
parents:
25342
diff
changeset
|
1461 // Allocate a Python string object, with uninitialised contents. We |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1462 // must do it this way, so that we can modify the string in place |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1463 // later. See the Python source, Objects/stringobject.c for details. |
7 | 1464 result = PyString_FromStringAndSize(NULL, len); |
1465 if (result == NULL) | |
1466 return NULL; | |
1467 | |
1468 p = PyString_AsString(result); | |
1469 | |
1470 while (*str) | |
1471 { | |
1472 if (*str == '\n') | |
1473 *p = '\0'; | |
1474 else | |
1475 *p = *str; | |
1476 | |
1477 ++p; | |
1478 ++str; | |
1479 } | |
1480 | |
1481 return result; | |
1482 } | |
1483 | |
3618 | 1484 static PyObject * |
1485 DictionaryGetattr(PyObject *self, char *name) | |
1486 { | |
3828 | 1487 DictionaryObject *this = ((DictionaryObject *) (self)); |
1488 | |
1489 if (strcmp(name, "locked") == 0) | |
1490 return PyInt_FromLong(this->dict->dv_lock); | |
1491 else if (strcmp(name, "scope") == 0) | |
1492 return PyInt_FromLong(this->dict->dv_scope); | |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1493 else if (strcmp(name, "__members__") == 0) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1494 return ObjectDir(NULL, DictionaryAttrs); |
3828 | 1495 |
3618 | 1496 return Py_FindMethod(DictionaryMethods, self, name); |
1497 } | |
1498 | |
1499 static PyObject * | |
1500 ListGetattr(PyObject *self, char *name) | |
1501 { | |
3828 | 1502 if (strcmp(name, "locked") == 0) |
1503 return PyInt_FromLong(((ListObject *)(self))->list->lv_lock); | |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1504 else if (strcmp(name, "__members__") == 0) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1505 return ObjectDir(NULL, ListAttrs); |
3828 | 1506 |
3618 | 1507 return Py_FindMethod(ListMethods, self, name); |
1508 } | |
1509 | |
1510 static PyObject * | |
1511 FunctionGetattr(PyObject *self, char *name) | |
1512 { | |
8889
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
1513 PyObject *r; |
3618 | 1514 |
8889
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
1515 r = FunctionAttr((FunctionObject *)(self), name); |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
1516 |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
1517 if (r || PyErr_Occurred()) |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
1518 return r; |
3618 | 1519 else |
1520 return Py_FindMethod(FunctionMethods, self, name); | |
1521 } | |
1522 | |
1523 void | |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1524 do_pyeval(char_u *str, typval_T *rettv) |
3618 | 1525 { |
4486 | 1526 DoPyCommand((char *) str, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
31702
diff
changeset
|
1527 init_range_eval, |
4486 | 1528 (runner) run_eval, |
1529 (void *) rettv); | |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1530 if (rettv->v_type == VAR_UNKNOWN) |
3618 | 1531 { |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1532 rettv->v_type = VAR_NUMBER; |
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1533 rettv->vval.v_number = 0; |
3618 | 1534 } |
1535 } | |
7 | 1536 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1537 // Don't generate a prototype for the next function, it generates an error on |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1538 // newer Python versions. |
7 | 1539 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */ && !defined(PROTO) |
1540 | |
1541 char * | |
1542 Py_GetProgramName(void) | |
1543 { | |
1544 return "vim"; | |
1545 } | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1546 #endif // Python 1.4 |
2399
76f0c4918f5c
Move some common code from if_python.c and if_python3.c to if_py_both.h.
Bram Moolenaar <bram@vim.org>
parents:
2384
diff
changeset
|
1547 |
6565 | 1548 int |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1549 set_ref_in_python(int copyID) |
3618 | 1550 { |
6565 | 1551 return set_ref_in_py(copyID); |
3618 | 1552 } |