Mercurial > vim
annotate src/if_python3.c @ 33713:9aa03e12b2b5 v9.0.2090
patch 9.0.2090: complete_info() skips entries with 'noselect'
Commit: https://github.com/vim/vim/commit/57f9ce1a0977da13e5923214086795ffa2d28ce1
Author: Christian Brabandt <cb@256bit.org>
Date: Sat Nov 4 09:58:14 2023 +0100
patch 9.0.2090: complete_info() skips entries with 'noselect'
Problem: complete_info() skips entries with 'noselect'
Solution: Check, if first entry is at original text state
Unfortunately, Commit daef8c74375141974d61b85199b383017644978c
introduced a regression, that when ':set completeopt+=noselect' is set
and no completion item has been selected yet, it did not fill the
complete_info['items'] list.
This happened, because the current match item did not have the
CP_ORIGINAL_TEXT flag set and then the cp->prev pointer did point to the
original flag item, which caused the following while loop to not being
run but being skipped instead.
So when the 'noselect' is set, only start with to the previous selection
item, if the initial completion item has the CP_ORIGINAL_TEXT flag set,
else use the 2nd previous item instead.
fixes: #13451
closes: #13452
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 04 Nov 2023 10:15:04 +0100 |
parents | 129f04151d75 |
children | 0c7f00b67e65 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
8967
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2 * |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
4 * |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
8 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
9 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
10 * Python extensions by Paul Moore. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
11 * Changes for Unix by David Leonard. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
12 * |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
13 * This consists of four parts: |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
14 * 1. Python interpreter main program |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
15 * 2. Python output stream: writes output via [e]msg(). |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
16 * 3. Implementation of the Vim module for Python |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
17 * 4. Utility functions for handling the interface between Vim and Python. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
18 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
19 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
20 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
21 * Roland Puntaier 2009/sept/16: |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
22 * Adaptations to support both python3.x and python2.x |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
23 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
24 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
25 // 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:
18414
diff
changeset
|
26 // #define Py_DEBUG |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
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:
18414
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:
18414
diff
changeset
|
29 // allocator |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
30 // #define Py_DEBUG_NO_PYMALLOC |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
31 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
32 #include "vim.h" |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
33 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
34 #include <limits.h> |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
35 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
36 #if defined(MSWIN) && defined(HAVE_FCNTL_H) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
37 # undef HAVE_FCNTL_H |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
38 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
39 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
40 #ifdef _DEBUG |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
41 # undef _DEBUG |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
42 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
43 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
44 #ifdef F_BLANK |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
45 # undef F_BLANK |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
46 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
47 |
30992
c207a462320a
patch 9.0.0831: compiler warning for redefining HAVE_DUP
Bram Moolenaar <Bram@vim.org>
parents:
29303
diff
changeset
|
48 #ifdef HAVE_DUP |
c207a462320a
patch 9.0.0831: compiler warning for redefining HAVE_DUP
Bram Moolenaar <Bram@vim.org>
parents:
29303
diff
changeset
|
49 # undef HAVE_DUP |
c207a462320a
patch 9.0.0831: compiler warning for redefining HAVE_DUP
Bram Moolenaar <Bram@vim.org>
parents:
29303
diff
changeset
|
50 #endif |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
51 #ifdef HAVE_STRFTIME |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
52 # undef HAVE_STRFTIME |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
53 #endif |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
54 #ifdef HAVE_STRING_H |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
55 # undef HAVE_STRING_H |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
56 #endif |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
57 #ifdef HAVE_PUTENV |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
58 # undef HAVE_PUTENV |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
59 #endif |
2340
99c1eba60b2d
Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents:
2330
diff
changeset
|
60 #ifdef HAVE_STDARG_H |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
61 # undef HAVE_STDARG_H // Python's config.h defines it as well. |
2340
99c1eba60b2d
Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents:
2330
diff
changeset
|
62 #endif |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
63 #ifdef _POSIX_C_SOURCE // defined in feature.h |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
64 # undef _POSIX_C_SOURCE |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
65 #endif |
2340
99c1eba60b2d
Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents:
2330
diff
changeset
|
66 #ifdef _XOPEN_SOURCE |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
67 # undef _XOPEN_SOURCE // pyconfig.h defines it as well. |
2340
99c1eba60b2d
Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents:
2330
diff
changeset
|
68 #endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
69 |
4823
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
70 #define PY_SSIZE_T_CLEAN |
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
71 |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
72 #ifdef Py_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
73 # define USE_LIMITED_API // Using Python 3 limited ABI |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
74 #endif |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
75 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
76 #include <Python.h> |
4823
46077370bc60
updated for version 7.3.1158
Bram Moolenaar <bram@vim.org>
parents:
4704
diff
changeset
|
77 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
78 #undef main // Defined in python.h - aargh |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
79 #undef HAVE_FCNTL_H // Clash with os_win32.h |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
80 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
81 // The "surrogateescape" error handler is new in Python 3.1 |
2955 | 82 #if PY_VERSION_HEX >= 0x030100f0 |
83 # define CODEC_ERROR_HANDLER "surrogateescape" | |
84 #else | |
85 # define CODEC_ERROR_HANDLER NULL | |
86 #endif | |
87 | |
30994
dfc507ccfaa5
patch 9.0.0832: deprecation warning causes build failure
Bram Moolenaar <Bram@vim.org>
parents:
30992
diff
changeset
|
88 // Suppress Python 3.11 depreciations to see useful warnings |
32730
078630443def
patch 9.0.1685: silence Python 3.11 depreciations for gcc
Christian Brabandt <cb@256bit.org>
parents:
31804
diff
changeset
|
89 #ifdef __GNUC__ |
078630443def
patch 9.0.1685: silence Python 3.11 depreciations for gcc
Christian Brabandt <cb@256bit.org>
parents:
31804
diff
changeset
|
90 # pragma GCC diagnostic push |
078630443def
patch 9.0.1685: silence Python 3.11 depreciations for gcc
Christian Brabandt <cb@256bit.org>
parents:
31804
diff
changeset
|
91 # pragma GCC diagnostic ignored "-Wdeprecated-declarations" |
30994
dfc507ccfaa5
patch 9.0.0832: deprecation warning causes build failure
Bram Moolenaar <Bram@vim.org>
parents:
30992
diff
changeset
|
92 #endif |
dfc507ccfaa5
patch 9.0.0832: deprecation warning causes build failure
Bram Moolenaar <Bram@vim.org>
parents:
30992
diff
changeset
|
93 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
94 // Python 3 does not support CObjects, always use Capsules |
3638 | 95 #define PY_USE_CAPSULE |
96 | |
23264
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
97 #define ERRORS_DECODE_ARG CODEC_ERROR_HANDLER |
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
98 #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
|
99 |
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
|
100 #define PyInt Py_ssize_t |
5112
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
101 #ifndef PyString_Check |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
102 # define PyString_Check(obj) PyUnicode_Check(obj) |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
103 #endif |
5164
b3bd43ef012d
updated for version 7.4a.008
Bram Moolenaar <bram@vim.org>
parents:
5112
diff
changeset
|
104 #define PyString_FromString(repr) \ |
23264
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
105 PyUnicode_Decode(repr, STRLEN(repr), ENC_OPT, ERRORS_DECODE_ARG) |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
106 #define PyString_FromFormat PyUnicode_FromFormat |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
107 #ifdef PyUnicode_FromFormat |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
108 # define Py_UNICODE_USE_UCS_FUNCTIONS |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
109 #endif |
5112
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
110 #ifndef PyInt_Check |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
111 # define PyInt_Check(obj) PyLong_Check(obj) |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
112 #endif |
3826 | 113 #define PyInt_FromLong(i) PyLong_FromLong(i) |
114 #define PyInt_AsLong(obj) PyLong_AsLong(obj) | |
4319 | 115 #define Py_ssize_t_fmt "n" |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
116 #define Py_bytes_fmt "y" |
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
|
117 |
5608 | 118 #define PyIntArgFunc ssizeargfunc |
119 #define PyIntObjArgProc ssizeobjargproc | |
120 | |
5768 | 121 /* |
122 * PySlice_GetIndicesEx(): first argument type changed from PySliceObject | |
123 * to PyObject in Python 3.2 or later. | |
124 */ | |
125 #if PY_VERSION_HEX >= 0x030200f0 | |
126 typedef PyObject PySliceObject_T; | |
127 #else | |
128 typedef PySliceObject PySliceObject_T; | |
129 #endif | |
130 | |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
131 #ifndef MSWIN |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
132 # define HINSTANCE void * |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
133 #endif |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
134 #if defined(DYNAMIC_PYTHON3) || defined(MSWIN) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
135 static HINSTANCE hinstPy3 = 0; // Instance of python.dll |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
136 #endif |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
137 |
2716 | 138 #if defined(DYNAMIC_PYTHON3) || defined(PROTO) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
139 |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
140 # ifdef MSWIN |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
141 # define load_dll vimLoadLib |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
142 # define close_dll FreeLibrary |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
143 # define symbol_from_dll GetProcAddress |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
144 # define load_dll_error GetWin32Error |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
145 # 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
|
146 # 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
|
147 # define FARPROC void* |
2641 | 148 # 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
|
149 # 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
|
150 # 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
|
151 # 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
|
152 # 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
|
153 # 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
|
154 # 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:
24916
diff
changeset
|
155 # 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
|
156 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
157 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
158 * Wrapper defines |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
159 */ |
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
|
160 # undef PyArg_Parse |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
161 # define PyArg_Parse py3_PyArg_Parse |
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
|
162 # undef PyArg_ParseTuple |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
163 # define PyArg_ParseTuple py3_PyArg_ParseTuple |
2894 | 164 # define PyMem_Free py3_PyMem_Free |
3618 | 165 # define PyMem_Malloc py3_PyMem_Malloc |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
166 # define PyDict_SetItemString py3_PyDict_SetItemString |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
167 # define PyErr_BadArgument py3_PyErr_BadArgument |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
168 # define PyErr_Clear py3_PyErr_Clear |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
169 # define PyErr_Format py3_PyErr_Format |
4145 | 170 # define PyErr_PrintEx py3_PyErr_PrintEx |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
171 # define PyErr_NoMemory py3_PyErr_NoMemory |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
172 # define PyErr_Occurred py3_PyErr_Occurred |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
173 # define PyErr_SetNone py3_PyErr_SetNone |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
174 # define PyErr_SetString py3_PyErr_SetString |
4403 | 175 # define PyErr_SetObject py3_PyErr_SetObject |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
176 # define PyErr_ExceptionMatches py3_PyErr_ExceptionMatches |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
177 # define PyEval_InitThreads py3_PyEval_InitThreads |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
178 # define PyEval_RestoreThread py3_PyEval_RestoreThread |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
179 # define PyEval_SaveThread py3_PyEval_SaveThread |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
180 # define PyGILState_Ensure py3_PyGILState_Ensure |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
181 # define PyGILState_Release py3_PyGILState_Release |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
182 # define PyLong_AsLong py3_PyLong_AsLong |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
183 # define PyLong_FromLong py3_PyLong_FromLong |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
184 # define PyList_GetItem py3_PyList_GetItem |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
185 # define PyList_Append py3_PyList_Append |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
186 # define PyList_Insert py3_PyList_Insert |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
187 # define PyList_New py3_PyList_New |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
188 # define PyList_SetItem py3_PyList_SetItem |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
189 # define PyList_Size py3_PyList_Size |
3618 | 190 # define PySequence_Check py3_PySequence_Check |
191 # define PySequence_Size py3_PySequence_Size | |
192 # define PySequence_GetItem py3_PySequence_GetItem | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
193 # define PySequence_Fast py3_PySequence_Fast |
3618 | 194 # define PyTuple_Size py3_PyTuple_Size |
195 # define PyTuple_GetItem py3_PyTuple_GetItem | |
14262
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
196 # if PY_VERSION_HEX >= 0x030601f0 |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
197 # define PySlice_AdjustIndices py3_PySlice_AdjustIndices |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
198 # define PySlice_Unpack py3_PySlice_Unpack |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
199 # endif |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
200 # undef PySlice_GetIndicesEx |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
201 # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
202 # define PyImport_ImportModule py3_PyImport_ImportModule |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
203 # define PyObject_Init py3__PyObject_Init |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
204 # define PyDict_New py3_PyDict_New |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
205 # define PyDict_GetItemString py3_PyDict_GetItemString |
3618 | 206 # define PyDict_Next py3_PyDict_Next |
207 # define PyMapping_Check py3_PyMapping_Check | |
5112
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
208 # ifndef PyMapping_Keys |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
209 # define PyMapping_Keys py3_PyMapping_Keys |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
210 # endif |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
211 # if (defined(USE_LIMITED_API) && Py_LIMITED_API >= 0x03080000) || \ |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
212 (!defined(USE_LIMITED_API) && PY_VERSION_HEX >= 0x03080000) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
213 # undef PyIter_Check |
24916
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
214 # define PyIter_Check py3_PyIter_Check |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
215 # endif |
3618 | 216 # define PyIter_Next py3_PyIter_Next |
217 # define PyObject_GetIter py3_PyObject_GetIter | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
218 # define PyObject_Repr py3_PyObject_Repr |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
219 # define PyObject_GetItem py3_PyObject_GetItem |
4399 | 220 # define PyObject_IsTrue py3_PyObject_IsTrue |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
221 # define PyModule_GetDict py3_PyModule_GetDict |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
222 # ifdef USE_LIMITED_API |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
223 # define Py_CompileString py3_Py_CompileString |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
224 # define PyEval_EvalCode py3_PyEval_EvalCode |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
225 # else |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
226 # undef PyRun_SimpleString |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
227 # define PyRun_SimpleString py3_PyRun_SimpleString |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
228 # undef PyRun_String |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
229 # define PyRun_String py3_PyRun_String |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
230 # endif |
4417 | 231 # define PyObject_GetAttrString py3_PyObject_GetAttrString |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
232 # define PyObject_HasAttrString py3_PyObject_HasAttrString |
4417 | 233 # define PyObject_SetAttrString py3_PyObject_SetAttrString |
234 # define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs | |
4855
52850ef928f8
updated for version 7.3.1174
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
235 # define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
236 # define PyObject_Call py3_PyObject_Call |
4417 | 237 # define PyEval_GetLocals py3_PyEval_GetLocals |
238 # define PyEval_GetGlobals py3_PyEval_GetGlobals | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
239 # define PySys_SetObject py3_PySys_SetObject |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
240 # define PySys_GetObject py3_PySys_GetObject |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
241 # define PySys_SetArgv py3_PySys_SetArgv |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
242 # define PyType_Ready py3_PyType_Ready |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
243 # if PY_VERSION_HEX >= 0x03040000 |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
244 # define PyType_GetFlags py3_PyType_GetFlags |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
245 # endif |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
246 # undef Py_BuildValue |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
247 # define Py_BuildValue py3_Py_BuildValue |
2641 | 248 # define Py_SetPythonHome py3_Py_SetPythonHome |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
249 # define Py_Initialize py3_Py_Initialize |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
250 # define Py_Finalize py3_Py_Finalize |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
251 # define Py_IsInitialized py3_Py_IsInitialized |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
252 # define _Py_NoneStruct (*py3__Py_NoneStruct) |
3828 | 253 # define _Py_FalseStruct (*py3__Py_FalseStruct) |
254 # define _Py_TrueStruct (*py3__Py_TrueStruct) | |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
255 # ifndef USE_LIMITED_API |
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
256 # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented) |
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
257 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
258 # define PyModule_AddObject py3_PyModule_AddObject |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
259 # define PyImport_AppendInittab py3_PyImport_AppendInittab |
4417 | 260 # define PyImport_AddModule py3_PyImport_AddModule |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
261 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
262 # if Py_LIMITED_API >= 0x030a0000 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
263 # define PyUnicode_AsUTF8AndSize py3_PyUnicode_AsUTF8AndSize |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
264 # endif |
3863 | 265 # else |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
266 # if PY_VERSION_HEX >= 0x030300f0 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
267 # define PyUnicode_AsUTF8AndSize py3_PyUnicode_AsUTF8AndSize |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
268 # else |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
269 # define _PyUnicode_AsString py3__PyUnicode_AsString |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
270 # endif |
3863 | 271 # endif |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
272 # undef PyUnicode_CompareWithASCIIString |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
273 # define PyUnicode_CompareWithASCIIString py3_PyUnicode_CompareWithASCIIString |
2894 | 274 # undef PyUnicode_AsEncodedString |
275 # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString | |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
276 # undef PyUnicode_AsUTF8String |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
277 # define PyUnicode_AsUTF8String py3_PyUnicode_AsUTF8String |
2894 | 278 # undef PyBytes_AsString |
279 # define PyBytes_AsString py3_PyBytes_AsString | |
5112
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
280 # ifndef PyBytes_AsStringAndSize |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
281 # define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize |
f063be86b632
updated for version 7.3.1299
Bram Moolenaar <bram@vim.org>
parents:
5088
diff
changeset
|
282 # endif |
3618 | 283 # undef PyBytes_FromString |
284 # define PyBytes_FromString py3_PyBytes_FromString | |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
285 # undef PyBytes_FromStringAndSize |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
286 # define PyBytes_FromStringAndSize py3_PyBytes_FromStringAndSize |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
287 # if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0 || defined(USE_LIMITED_API) |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
288 # define _Py_Dealloc py3__Py_Dealloc |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
289 # endif |
3618 | 290 # define PyFloat_FromDouble py3_PyFloat_FromDouble |
291 # define PyFloat_AsDouble py3_PyFloat_AsDouble | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
292 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr |
3828 | 293 # define PyType_Type (*py3_PyType_Type) |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
294 # ifndef USE_LIMITED_API |
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
295 # define PyStdPrinter_Type (*py3_PyStdPrinter_Type) |
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
296 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
297 # define PySlice_Type (*py3_PySlice_Type) |
3618 | 298 # define PyFloat_Type (*py3_PyFloat_Type) |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
299 # define PyNumber_Check (*py3_PyNumber_Check) |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
300 # define PyNumber_Long (*py3_PyNumber_Long) |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
301 # define PyBool_Type (*py3_PyBool_Type) |
2894 | 302 # define PyErr_NewException py3_PyErr_NewException |
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
|
303 # ifdef Py_DEBUG |
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
|
304 # define _Py_NegativeRefcount py3__Py_NegativeRefcount |
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
|
305 # define _Py_RefTotal (*py3__Py_RefTotal) |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
306 # define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
307 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
308 # define PyModule_Create2 py3_PyModule_Create2 |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
309 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
310 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
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
|
311 # define _PyObject_DebugMalloc py3__PyObject_DebugMalloc |
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
|
312 # define _PyObject_DebugFree py3__PyObject_DebugFree |
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
|
313 # 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
|
314 # define PyObject_Malloc py3_PyObject_Malloc |
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
|
315 # define PyObject_Free py3_PyObject_Free |
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
|
316 # endif |
4500 | 317 # define _PyObject_GC_New py3__PyObject_GC_New |
318 # define PyObject_GC_Del py3_PyObject_GC_Del | |
319 # define PyObject_GC_UnTrack py3_PyObject_GC_UnTrack | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
320 # define PyType_GenericAlloc py3_PyType_GenericAlloc |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
321 # define PyType_GenericNew py3_PyType_GenericNew |
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
|
322 # undef PyUnicode_FromString |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
323 # define PyUnicode_FromString py3_PyUnicode_FromString |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
324 # ifdef Py_UNICODE_USE_UCS_FUNCTIONS |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
325 # ifdef Py_UNICODE_WIDE |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
326 # define PyUnicodeUCS4_FromFormat py3_PyUnicodeUCS4_FromFormat |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
327 # else |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
328 # define PyUnicodeUCS2_FromFormat py3_PyUnicodeUCS2_FromFormat |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
329 # endif |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
330 # else |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
331 # define PyUnicode_FromFormat py3_PyUnicode_FromFormat |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
332 # endif |
2894 | 333 # undef PyUnicode_Decode |
334 # define PyUnicode_Decode py3_PyUnicode_Decode | |
3618 | 335 # define PyType_IsSubtype py3_PyType_IsSubtype |
336 # define PyCapsule_New py3_PyCapsule_New | |
337 # define PyCapsule_GetPointer py3_PyCapsule_GetPointer | |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
338 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
339 # define PyType_GetSlot py3_PyType_GetSlot |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
340 # define PyType_FromSpec py3_PyType_FromSpec |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
341 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
342 |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
343 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
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
|
344 # undef PyObject_NEW |
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
|
345 # define PyObject_NEW(type, typeobj) \ |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
346 ( (type *) PyObject_Init( \ |
2330 | 347 (PyObject *) _PyObject_DebugMalloc( _PyObject_SIZE(typeobj) ), (typeobj)) ) |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
348 # elif PY_VERSION_HEX >= 0x030900b0 |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
349 # undef PyObject_NEW |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
350 # define PyObject_NEW(type, typeobj) \ |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
351 ((type *)py3__PyObject_New(typeobj)) |
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
|
352 # 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
|
353 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
354 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
355 * Pointers for dynamic link |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
356 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
357 static int (*py3_PySys_SetArgv)(int, wchar_t **); |
2641 | 358 static void (*py3_Py_SetPythonHome)(wchar_t *home); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
359 static void (*py3_Py_Initialize)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
360 static PyObject* (*py3_PyList_New)(Py_ssize_t size); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
361 static PyGILState_STATE (*py3_PyGILState_Ensure)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
362 static void (*py3_PyGILState_Release)(PyGILState_STATE); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
363 static int (*py3_PySys_SetObject)(char *, PyObject *); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
364 static PyObject* (*py3_PySys_GetObject)(char *); |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
365 static int (*py3_PyList_Append)(PyObject *, PyObject *); |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
366 static int (*py3_PyList_Insert)(PyObject *, int, PyObject *); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
367 static Py_ssize_t (*py3_PyList_Size)(PyObject *); |
3618 | 368 static int (*py3_PySequence_Check)(PyObject *); |
369 static Py_ssize_t (*py3_PySequence_Size)(PyObject *); | |
370 static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t); | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
371 static PyObject* (*py3_PySequence_Fast)(PyObject *, const char *); |
3618 | 372 static Py_ssize_t (*py3_PyTuple_Size)(PyObject *); |
373 static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t); | |
374 static int (*py3_PyMapping_Check)(PyObject *); | |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
375 static PyObject* (*py3_PyMapping_Keys)(PyObject *); |
14262
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
376 # if PY_VERSION_HEX >= 0x030601f0 |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
377 static int (*py3_PySlice_AdjustIndices)(Py_ssize_t length, |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
378 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step); |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
379 static int (*py3_PySlice_Unpack)(PyObject *slice, |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
380 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
381 # endif |
5768 | 382 static int (*py3_PySlice_GetIndicesEx)(PySliceObject_T *r, Py_ssize_t length, |
5608 | 383 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, |
384 Py_ssize_t *slicelen); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
385 static PyObject* (*py3_PyErr_NoMemory)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
386 static void (*py3_Py_Finalize)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
387 static void (*py3_PyErr_SetString)(PyObject *, const char *); |
4403 | 388 static void (*py3_PyErr_SetObject)(PyObject *, PyObject *); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
389 static int (*py3_PyErr_ExceptionMatches)(PyObject *); |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
390 # ifdef USE_LIMITED_API |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
391 static PyObject* (*py3_Py_CompileString)(const char *, const char *, int); |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
392 static PyObject* (*py3_PyEval_EvalCode)(PyObject *co, PyObject *globals, PyObject *locals); |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
393 # else |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
394 static int (*py3_PyRun_SimpleString)(char *); |
3618 | 395 static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
396 # endif |
4417 | 397 static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *); |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
398 static int (*py3_PyObject_HasAttrString)(PyObject *, const char *); |
5419 | 399 static int (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *); |
4417 | 400 static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...); |
4855
52850ef928f8
updated for version 7.3.1174
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
401 static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...); |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
402 static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *); |
33404
9b35b4c6df4c
patch 9.0.1960: Make CI checks more strict
Christian Brabandt <cb@256bit.org>
parents:
33330
diff
changeset
|
403 static PyObject* (*py3_PyEval_GetGlobals)(void); |
9b35b4c6df4c
patch 9.0.1960: Make CI checks more strict
Christian Brabandt <cb@256bit.org>
parents:
33330
diff
changeset
|
404 static PyObject* (*py3_PyEval_GetLocals)(void); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
405 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
406 static PyObject* (*py3_PyImport_ImportModule)(const char *); |
3618 | 407 static PyObject* (*py3_PyImport_AddModule)(const char *); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
408 static int (*py3_PyErr_BadArgument)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
409 static PyObject* (*py3_PyErr_Occurred)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
410 static PyObject* (*py3_PyModule_GetDict)(PyObject *); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
411 static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
412 static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *); |
3618 | 413 static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
414 static PyObject* (*py3_PyLong_FromLong)(long); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
415 static PyObject* (*py3_PyDict_New)(void); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
416 # if (defined(USE_LIMITED_API) && Py_LIMITED_API >= 0x03080000) || \ |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
417 (!defined(USE_LIMITED_API) && PY_VERSION_HEX >= 0x03080000) |
24916
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
418 static int (*py3_PyIter_Check)(PyObject *o); |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
419 # endif |
3618 | 420 static PyObject* (*py3_PyIter_Next)(PyObject *); |
421 static PyObject* (*py3_PyObject_GetIter)(PyObject *); | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
422 static PyObject* (*py3_PyObject_Repr)(PyObject *); |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
423 static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *); |
4399 | 424 static int (*py3_PyObject_IsTrue)(PyObject *); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
425 static PyObject* (*py3_Py_BuildValue)(char *, ...); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
426 # if PY_VERSION_HEX >= 0x03040000 |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
427 static int (*py3_PyType_GetFlags)(PyTypeObject *o); |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
428 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
429 static int (*py3_PyType_Ready)(PyTypeObject *type); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
430 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
431 static PyObject* (*py3_PyUnicode_FromString)(const char *u); |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
432 # ifdef Py_UNICODE_USE_UCS_FUNCTIONS |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
433 # ifdef Py_UNICODE_WIDE |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
434 static PyObject* (*py3_PyUnicodeUCS4_FromFormat)(const char *u, ...); |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
435 # else |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
436 static PyObject* (*py3_PyUnicodeUCS2_FromFormat)(const char *u, ...); |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
437 # endif |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
438 # else |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
439 static PyObject* (*py3_PyUnicode_FromFormat)(const char *u, ...); |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
440 # endif |
2894 | 441 static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size, |
442 const char *encoding, const char *errors); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
443 static long (*py3_PyLong_AsLong)(PyObject *); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
444 static void (*py3_PyErr_SetNone)(PyObject *); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
445 static void (*py3_PyEval_InitThreads)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
446 static void(*py3_PyEval_RestoreThread)(PyThreadState *); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
447 static PyThreadState*(*py3_PyEval_SaveThread)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
448 static int (*py3_PyArg_Parse)(PyObject *, char *, ...); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
449 static int (*py3_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
|
450 static void (*py3_PyMem_Free)(void *); |
3618 | 451 static void* (*py3_PyMem_Malloc)(size_t); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
452 static int (*py3_Py_IsInitialized)(void); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
453 static void (*py3_PyErr_Clear)(void); |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
454 static PyObject* (*py3_PyErr_Format)(PyObject *, const char *, ...); |
4145 | 455 static void (*py3_PyErr_PrintEx)(int); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
456 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *); |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
457 # ifndef USE_LIMITED_API |
3618 | 458 static iternextfunc py3__PyObject_NextNotImplemented; |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
459 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
460 static PyObject* py3__Py_NoneStruct; |
3828 | 461 static PyObject* py3__Py_FalseStruct; |
462 static PyObject* py3__Py_TrueStruct; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
463 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
464 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void)); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
465 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
466 # if Py_LIMITED_API >= 0x030a0000 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
467 static char* (*py3_PyUnicode_AsUTF8AndSize)(PyObject *unicode, Py_ssize_t *size); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
468 # endif |
3910 | 469 # else |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
470 # if PY_VERSION_HEX >= 0x030300f0 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
471 static char* (*py3_PyUnicode_AsUTF8AndSize)(PyObject *unicode, Py_ssize_t *size); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
472 # else |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
473 static char* (*py3__PyUnicode_AsString)(PyObject *unicode); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
474 # endif |
3910 | 475 # endif |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
476 static int (*py3_PyUnicode_CompareWithASCIIString)(PyObject *unicode, const char* string); |
2894 | 477 static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
478 static PyObject* (*py3_PyUnicode_AsUTF8String)(PyObject *unicode); |
2894 | 479 static char* (*py3_PyBytes_AsString)(PyObject *bytes); |
4966
620d9b59d4ed
updated for version 7.3.1228
Bram Moolenaar <bram@vim.org>
parents:
4881
diff
changeset
|
480 static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length); |
3618 | 481 static PyObject* (*py3_PyBytes_FromString)(char *str); |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
482 static PyObject* (*py3_PyBytes_FromStringAndSize)(char *str, Py_ssize_t length); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
483 # if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0 || defined(USE_LIMITED_API) |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
484 static void (*py3__Py_Dealloc)(PyObject *obj); |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
485 # endif |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
486 # if PY_VERSION_HEX >= 0x030900b0 |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
487 static PyObject* (*py3__PyObject_New)(PyTypeObject *); |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
488 # endif |
3618 | 489 static PyObject* (*py3_PyFloat_FromDouble)(double num); |
490 static double (*py3_PyFloat_AsDouble)(PyObject *); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
491 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
492 static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
493 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds); |
3828 | 494 static PyTypeObject* py3_PyType_Type; |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
495 # ifndef USE_LIMITED_API |
13952
76a65058766f
patch 8.0.1846: Python interface is incompatible with lldb
Christian Brabandt <cb@256bit.org>
parents:
13674
diff
changeset
|
496 static PyTypeObject* py3_PyStdPrinter_Type; |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
497 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
498 static PyTypeObject* py3_PySlice_Type; |
3618 | 499 static PyTypeObject* py3_PyFloat_Type; |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
500 static PyTypeObject* py3_PyBool_Type; |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
501 static int (*py3_PyNumber_Check)(PyObject *); |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
502 static PyObject* (*py3_PyNumber_Long)(PyObject *); |
2894 | 503 static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict); |
3618 | 504 static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor); |
505 static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *); | |
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
|
506 # ifdef Py_DEBUG |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
507 static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
508 static Py_ssize_t* py3__Py_RefTotal; |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
509 static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version); |
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
|
510 # else |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
511 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
512 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
513 # 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
|
514 static void (*py3__PyObject_DebugFree)(void*); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
515 static void* (*py3__PyObject_DebugMalloc)(size_t); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
516 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
517 static void (*py3_PyObject_Free)(void*); |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
518 static void* (*py3_PyObject_Malloc)(size_t); |
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
|
519 # endif |
4500 | 520 static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *); |
521 static void(*py3_PyObject_GC_Del)(void *); | |
522 static void(*py3_PyObject_GC_UnTrack)(void *); | |
3618 | 523 static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *); |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
524 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
525 static void* (*py3_PyType_GetSlot)(PyTypeObject *, int); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
526 static PyObject* (*py3_PyType_FromSpec)(PyType_Spec *); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
527 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
528 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
529 // Imported exception objects |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
530 static PyObject *p3imp_PyExc_AttributeError; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
531 static PyObject *p3imp_PyExc_IndexError; |
4315 | 532 static PyObject *p3imp_PyExc_KeyError; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
533 static PyObject *p3imp_PyExc_KeyboardInterrupt; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
534 static PyObject *p3imp_PyExc_TypeError; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
535 static PyObject *p3imp_PyExc_ValueError; |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
536 static PyObject *p3imp_PyExc_SystemExit; |
4405 | 537 static PyObject *p3imp_PyExc_RuntimeError; |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
538 static PyObject *p3imp_PyExc_ImportError; |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
539 static PyObject *p3imp_PyExc_OverflowError; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
540 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
541 # define PyExc_AttributeError p3imp_PyExc_AttributeError |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
542 # define PyExc_IndexError p3imp_PyExc_IndexError |
4315 | 543 # define PyExc_KeyError p3imp_PyExc_KeyError |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
544 # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
545 # define PyExc_TypeError p3imp_PyExc_TypeError |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
546 # define PyExc_ValueError p3imp_PyExc_ValueError |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
547 # define PyExc_SystemExit p3imp_PyExc_SystemExit |
4405 | 548 # define PyExc_RuntimeError p3imp_PyExc_RuntimeError |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
549 # define PyExc_ImportError p3imp_PyExc_ImportError |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
550 # define PyExc_OverflowError p3imp_PyExc_OverflowError |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
551 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
552 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
553 * Table of name to function pointer of python. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
554 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
555 # define PYTHON_PROC FARPROC |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
556 static struct |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
557 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
558 char *name; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
559 PYTHON_PROC *ptr; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
560 } py3_funcname_table[] = |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
561 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
562 {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv}, |
2641 | 563 {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
564 {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize}, |
3806 | 565 {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, |
566 {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue}, | |
2894 | 567 {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free}, |
3618 | 568 {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
569 {"PyList_New", (PYTHON_PROC*)&py3_PyList_New}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
570 {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
571 {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
572 {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
573 {"PySys_GetObject", (PYTHON_PROC*)&py3_PySys_GetObject}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
574 {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
575 {"PyList_Insert", (PYTHON_PROC*)&py3_PyList_Insert}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
576 {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size}, |
3618 | 577 {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check}, |
578 {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size}, | |
579 {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem}, | |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
580 {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast}, |
3618 | 581 {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size}, |
582 {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem}, | |
14262
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
583 # if PY_VERSION_HEX >= 0x030601f0 |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
584 {"PySlice_AdjustIndices", (PYTHON_PROC*)&py3_PySlice_AdjustIndices}, |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
585 {"PySlice_Unpack", (PYTHON_PROC*)&py3_PySlice_Unpack}, |
281c1e6e17ea
patch 8.1.0147: compiler warning when building with Python 3.7
Christian Brabandt <cb@256bit.org>
parents:
13952
diff
changeset
|
586 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
587 {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
588 {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
589 {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
590 {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString}, |
4403 | 591 {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject}, |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
592 {"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches}, |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
593 # ifdef USE_LIMITED_API |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
594 {"Py_CompileString", (PYTHON_PROC*)&py3_Py_CompileString}, |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
595 {"PyEval_EvalCode", (PYTHON_PROC*)&PyEval_EvalCode}, |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
596 # else |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
597 {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString}, |
3618 | 598 {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
599 # endif |
4417 | 600 {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString}, |
4627
18ba89e06fab
updated for version 7.3.1061
Bram Moolenaar <bram@vim.org>
parents:
4623
diff
changeset
|
601 {"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString}, |
4417 | 602 {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString}, |
603 {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs}, | |
4855
52850ef928f8
updated for version 7.3.1174
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
604 {"_PyObject_CallFunction_SizeT", (PYTHON_PROC*)&py3__PyObject_CallFunction_SizeT}, |
4704
542af01979be
updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents:
4635
diff
changeset
|
605 {"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call}, |
4417 | 606 {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals}, |
607 {"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals}, | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
608 {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
609 {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule}, |
3618 | 610 {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
611 {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
612 {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
613 {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
614 {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
615 {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString}, |
3618 | 616 {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next}, |
617 {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check}, | |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
618 {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
619 # if (defined(USE_LIMITED_API) && Py_LIMITED_API >= 0x03080000) || \ |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
620 (!defined(USE_LIMITED_API) && PY_VERSION_HEX >= 0x03080000) |
24916
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
621 {"PyIter_Check", (PYTHON_PROC*)&py3_PyIter_Check}, |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
622 # endif |
3618 | 623 {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next}, |
624 {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter}, | |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
625 {"PyObject_Repr", (PYTHON_PROC*)&py3_PyObject_Repr}, |
4635
07c534fe9b6c
updated for version 7.3.1065
Bram Moolenaar <bram@vim.org>
parents:
4627
diff
changeset
|
626 {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem}, |
4399 | 627 {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
628 {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
629 {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
630 # if PY_VERSION_HEX >= 0x03040000 |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
631 {"PyType_GetFlags", (PYTHON_PROC*)&py3_PyType_GetFlags}, |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
632 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
633 {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
634 {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
635 {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
636 {"PyErr_SetNone", (PYTHON_PROC*)&py3_PyErr_SetNone}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
637 {"PyEval_InitThreads", (PYTHON_PROC*)&py3_PyEval_InitThreads}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
638 {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
639 {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread}, |
4881
7b8991e084f9
updated for version 7.3.1186
Bram Moolenaar <bram@vim.org>
parents:
4855
diff
changeset
|
640 {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&py3_PyArg_Parse}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
641 {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized}, |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
642 # ifndef USE_LIMITED_API |
3618 | 643 {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented}, |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
644 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
645 {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct}, |
3828 | 646 {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct}, |
647 {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct}, | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
648 {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear}, |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
649 {"PyErr_Format", (PYTHON_PROC*)&py3_PyErr_Format}, |
4145 | 650 {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx}, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
651 {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
652 {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
653 {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
654 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
655 # if Py_LIMITED_API >= 0x030a0000 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
656 {"PyUnicode_AsUTF8AndSize", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8AndSize}, |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
657 # endif |
3910 | 658 # else |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
659 # if PY_VERSION_HEX >= 0x030300f0 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
660 {"PyUnicode_AsUTF8AndSize", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8AndSize}, |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
661 # else |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
662 {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
663 # endif |
3910 | 664 # endif |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
665 {"PyUnicode_CompareWithASCIIString", (PYTHON_PROC*)&py3_PyUnicode_CompareWithASCIIString}, |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
666 {"PyUnicode_AsUTF8String", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8String}, |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
667 # ifdef Py_UNICODE_USE_UCS_FUNCTIONS |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
668 # ifdef Py_UNICODE_WIDE |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
669 {"PyUnicodeUCS4_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS4_FromFormat}, |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
670 # else |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
671 {"PyUnicodeUCS2_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS2_FromFormat}, |
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
672 # endif |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
673 # else |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
674 {"PyUnicode_FromFormat", (PYTHON_PROC*)&py3_PyUnicode_FromFormat}, |
4623
548b889fe3cf
updated for version 7.3.1059
Bram Moolenaar <bram@vim.org>
parents:
4599
diff
changeset
|
675 # endif |
2894 | 676 {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, |
3798 | 677 {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize}, |
3618 | 678 {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
679 {"PyBytes_FromStringAndSize", (PYTHON_PROC*)&py3_PyBytes_FromStringAndSize}, |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
680 # if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0 || defined(USE_LIMITED_API) |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
681 {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc}, |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
682 # endif |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
683 # if PY_VERSION_HEX >= 0x030900b0 |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
684 {"_PyObject_New", (PYTHON_PROC*)&py3__PyObject_New}, |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
685 # endif |
3618 | 686 {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, |
687 {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
688 {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
689 {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
690 {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew}, |
3828 | 691 {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type}, |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
692 # ifndef USE_LIMITED_API |
13952
76a65058766f
patch 8.0.1846: Python interface is incompatible with lldb
Christian Brabandt <cb@256bit.org>
parents:
13674
diff
changeset
|
693 {"PyStdPrinter_Type", (PYTHON_PROC*)&py3_PyStdPrinter_Type}, |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
694 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
695 {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type}, |
3618 | 696 {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type}, |
3828 | 697 {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type}, |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
698 {"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check}, |
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
699 {"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long}, |
2894 | 700 {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException}, |
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
|
701 # ifdef Py_DEBUG |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
702 {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
703 {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal}, |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
704 {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
705 # else |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
706 {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
707 # endif |
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
708 # if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
709 {"_PyObject_DebugFree", (PYTHON_PROC*)&py3__PyObject_DebugFree}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
710 {"_PyObject_DebugMalloc", (PYTHON_PROC*)&py3__PyObject_DebugMalloc}, |
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
|
711 # else |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
712 {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
713 {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free}, |
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
|
714 # endif |
4500 | 715 {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New}, |
716 {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del}, | |
717 {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack}, | |
3618 | 718 {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype}, |
719 {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New}, | |
720 {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer}, | |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
721 # ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
722 # if PY_VERSION_HEX >= 0x03040000 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
723 {"PyType_GetSlot", (PYTHON_PROC*)&py3_PyType_GetSlot}, |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
724 # endif |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
725 {"PyType_FromSpec", (PYTHON_PROC*)&py3_PyType_FromSpec}, |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
726 # endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
727 {"", NULL}, |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
728 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
729 |
18414
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
730 # if PY_VERSION_HEX >= 0x030800f0 |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
731 static inline void |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
732 py3__Py_DECREF(const char *filename UNUSED, int lineno UNUSED, PyObject *op) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
733 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
734 if (--op->ob_refcnt != 0) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
735 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
736 # ifdef Py_REF_DEBUG |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
737 if (op->ob_refcnt < 0) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
738 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
739 _Py_NegativeRefcount(filename, lineno, op); |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
740 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
741 # endif |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
742 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
743 else |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
744 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
745 _Py_Dealloc(op); |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
746 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
747 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
748 |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
749 # undef Py_DECREF |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
750 # define Py_DECREF(op) py3__Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
751 |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
752 static inline void |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
753 py3__Py_XDECREF(PyObject *op) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
754 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
755 if (op != NULL) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
756 { |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
757 Py_DECREF(op); |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
758 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
759 } |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
760 |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
761 # undef Py_XDECREF |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
762 # define Py_XDECREF(op) py3__Py_XDECREF(_PyObject_CAST(op)) |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
763 # endif |
6b8508ea90d7
patch 8.1.2201: cannot build with dynamically linked Python 3.8
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
764 |
21349
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
765 # if PY_VERSION_HEX >= 0x030900b0 |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
766 static inline int |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
767 py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature) |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
768 { |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
769 return ((PyType_GetFlags(type) & feature) != 0); |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
770 } |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
771 # define PyType_HasFeature(t,f) py3_PyType_HasFeature(t,f) |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
772 # endif |
8488d9cc3ccd
patch 8.2.1225: linker errors when building with dynamic Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
21190
diff
changeset
|
773 |
24916
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
774 # if PY_VERSION_HEX >= 0x030a00b2 |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
775 static inline int |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
776 py3__PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
777 { |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
778 return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type); |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
779 } |
29303
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
780 # if PY_VERSION_HEX >= 0x030b00b3 |
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
781 # undef PyObject_TypeCheck |
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
782 # define PyObject_TypeCheck(o,t) py3__PyObject_TypeCheck(o,t) |
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
783 # else |
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
784 # define _PyObject_TypeCheck(o,t) py3__PyObject_TypeCheck(o,t) |
b15485413b9a
patch 8.2.5168: cannot build with Python 3.11
Bram Moolenaar <Bram@vim.org>
parents:
27581
diff
changeset
|
785 # endif |
24916
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
786 # endif |
275a8ced3ba2
patch 8.2.2995: linker errors with dynamic Python 3.10
Bram Moolenaar <Bram@vim.org>
parents:
23336
diff
changeset
|
787 |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
788 # if !defined(USE_LIMITED_API) && PY_VERSION_HEX >= 0x030c00b0 |
33583
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
789 // PyTuple_GET_SIZE/PyList_GET_SIZE are inlined functions that use Py_SIZE(), |
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
790 // which started to introduce linkage dependency from Python 3.12. When we |
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
791 // build Python in dynamic mode, we don't link against it in build time, and |
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
792 // this would fail to build. Just use the non-inlined version instead. |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
793 # undef PyTuple_GET_SIZE |
33583
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
794 # define PyTuple_GET_SIZE(o) PyTuple_Size(o) |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
795 # undef PyList_GET_SIZE |
33583
123acdc8e64c
patch 9.0.2036: if_python: rework python3.12 build dependency
Christian Brabandt <cb@256bit.org>
parents:
33557
diff
changeset
|
796 # define PyList_GET_SIZE(o) PyList_Size(o) |
33491
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
797 # endif |
e6c00b4c3ee5
patch 9.0.1996: Cannot build with python312
Christian Brabandt <cb@256bit.org>
parents:
33452
diff
changeset
|
798 |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
799 # ifdef MSWIN |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
800 /* |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
801 * Look up the library "libname" using the InstallPath registry key. |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
802 * Return NULL when failed. Return an allocated string when successful. |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
803 */ |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
804 static WCHAR * |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
805 py3_get_system_libname(const char *libname) |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
806 { |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
807 const WCHAR *pythoncore = L"Software\\Python\\PythonCore"; |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
808 const char *cp = libname; |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
809 WCHAR subkey[128]; |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
810 HKEY hKey; |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
811 int i; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
812 DWORD j, len; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
813 LSTATUS ret; |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
814 |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
815 while (*cp != '\0') |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
816 { |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
817 if (*cp == ':' || *cp == '\\' || *cp == '/') |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
818 { |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
819 // Bail out if "libname" contains path separator, assume it is |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
820 // an absolute path. |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
821 return NULL; |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
822 } |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
823 ++cp; |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
824 } |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
825 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
826 WCHAR keyfound[32]; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
827 HKEY hKeyTop[] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
828 HKEY hKeyFound = NULL; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
829 # ifdef USE_LIMITED_API |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
830 long maxminor = -1; |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
831 # endif |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
832 for (i = 0; i < ARRAY_LENGTH(hKeyTop); i++) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
833 { |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
834 long major, minor; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
835 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
836 ret = RegOpenKeyExW(hKeyTop[i], pythoncore, 0, KEY_READ, &hKey); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
837 if (ret != ERROR_SUCCESS) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
838 continue; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
839 for (j = 0;; j++) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
840 { |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
841 WCHAR keyname[32]; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
842 WCHAR *wp; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
843 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
844 len = ARRAY_LENGTH(keyname); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
845 ret = RegEnumKeyExW(hKey, j, keyname, &len, |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
846 NULL, NULL, NULL, NULL); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
847 if (ret == ERROR_NO_MORE_ITEMS) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
848 break; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
849 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
850 major = wcstol(keyname, &wp, 10); |
33609
129f04151d75
patch 9.0.2048: python: uninitialized warning
Christian Brabandt <cb@256bit.org>
parents:
33583
diff
changeset
|
851 if (*wp != L'.') |
129f04151d75
patch 9.0.2048: python: uninitialized warning
Christian Brabandt <cb@256bit.org>
parents:
33583
diff
changeset
|
852 continue; |
129f04151d75
patch 9.0.2048: python: uninitialized warning
Christian Brabandt <cb@256bit.org>
parents:
33583
diff
changeset
|
853 minor = wcstol(wp + 1, &wp, 10); |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
854 # ifdef _WIN64 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
855 if (*wp != L'\0') |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
856 continue; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
857 # else |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
858 if (wcscmp(wp, L"-32") != 0) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
859 continue; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
860 # endif |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
861 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
862 if (major != PY_MAJOR_VERSION) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
863 continue; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
864 # ifdef USE_LIMITED_API |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
865 // Search the latest version. |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
866 if ((minor > maxminor) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
867 && (minor >= ((Py_LIMITED_API >> 16) & 0xff))) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
868 { |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
869 maxminor = minor; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
870 wcscpy(keyfound, keyname); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
871 hKeyFound = hKeyTop[i]; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
872 } |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
873 # else |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
874 // Check if it matches with the compiled version. |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
875 if (minor == PY_MINOR_VERSION) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
876 { |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
877 wcscpy(keyfound, keyname); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
878 hKeyFound = hKeyTop[i]; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
879 break; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
880 } |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
881 # endif |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
882 } |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
883 RegCloseKey(hKey); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
884 # ifdef USE_LIMITED_API |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
885 if (hKeyFound != NULL) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
886 break; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
887 # endif |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
888 } |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
889 if (hKeyFound == NULL) |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
890 return NULL; |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
891 |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
892 swprintf(subkey, ARRAY_LENGTH(subkey), L"%ls\\%ls\\InstallPath", |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
893 pythoncore, keyfound); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
894 ret = RegGetValueW(hKeyFound, subkey, NULL, RRF_RT_REG_SZ, |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
895 NULL, NULL, &len); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
896 if (ret != ERROR_MORE_DATA && ret != ERROR_SUCCESS) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
897 return NULL; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
898 size_t len2 = len / sizeof(WCHAR) + 1 + strlen(libname); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
899 WCHAR *path = alloc(len2 * sizeof(WCHAR)); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
900 if (path == NULL) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
901 return NULL; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
902 ret = RegGetValueW(hKeyFound, subkey, NULL, RRF_RT_REG_SZ, |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
903 NULL, path, &len); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
904 if (ret != ERROR_SUCCESS) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
905 { |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
906 vim_free(path); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
907 return NULL; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
908 } |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
909 // Remove trailing path separators. |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
910 size_t len3 = wcslen(path); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
911 if ((len3 > 0) && (path[len3 - 1] == L'/' || path[len3 - 1] == L'\\')) |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
912 --len3; |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
913 swprintf(path + len3, len2 - len3, L"\\%hs", libname); |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
914 return path; |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
915 } |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
916 # endif |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
917 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
918 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
919 * Load library and get all pointers. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
920 * Parameter 'libname' provides name of DLL. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
921 * Return OK or FAIL. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
922 */ |
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
|
923 static int |
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
|
924 py3_runtime_link_init(char *libname, int verbose) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
925 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
926 int i; |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
927 PYTHON_PROC *ucs_from_string = (PYTHON_PROC *)&py3_PyUnicode_FromString; |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
928 PYTHON_PROC *ucs_decode = (PYTHON_PROC *)&py3_PyUnicode_Decode; |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
929 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:
13523
diff
changeset
|
930 (PYTHON_PROC *)&py3_PyUnicode_AsEncodedString; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
931 |
2641 | 932 # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON) |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
933 // 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
|
934 // 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:
18414
diff
changeset
|
935 // 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
|
936 if (python_loaded()) |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
937 { |
3032 | 938 if (verbose) |
26962
85866e069c24
patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26897
diff
changeset
|
939 emsg(_(e_this_vim_cannot_execute_py3_after_using_python)); |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
940 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
|
941 } |
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
|
942 # 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
|
943 |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
944 if (hinstPy3 != 0) |
2330 | 945 return OK; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
946 hinstPy3 = load_dll(libname); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
947 |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
948 # ifdef MSWIN |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
949 if (!hinstPy3) |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
950 { |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
951 // Attempt to use the path from InstallPath as stored in the registry. |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
952 WCHAR *syslibname = py3_get_system_libname(libname); |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
953 |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
954 if (syslibname != NULL) |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
955 { |
33557
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
956 hinstPy3 = LoadLibraryExW(syslibname, NULL, |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
957 LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | |
e9038f9de714
patch 9.0.2026: win32: python3 dll loading can be improved
Christian Brabandt <cb@256bit.org>
parents:
33531
diff
changeset
|
958 LOAD_LIBRARY_SEARCH_SYSTEM32); |
23336
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
959 vim_free(syslibname); |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
960 } |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
961 } |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
962 # endif |
9c8353f58076
patch 8.2.2211: MS-Windows: can't load Python dll if not in the path
Bram Moolenaar <Bram@vim.org>
parents:
23264
diff
changeset
|
963 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
964 if (!hinstPy3) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
965 { |
2330 | 966 if (verbose) |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
967 semsg(_(e_could_not_load_library_str_str), libname, load_dll_error()); |
2330 | 968 return FAIL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
969 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
970 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
971 for (i = 0; py3_funcname_table[i].ptr; ++i) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
972 { |
2330 | 973 if ((*py3_funcname_table[i].ptr = symbol_from_dll(hinstPy3, |
974 py3_funcname_table[i].name)) == NULL) | |
975 { | |
976 close_dll(hinstPy3); | |
977 hinstPy3 = 0; | |
978 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
979 semsg(_(e_could_not_load_library_function_str), py3_funcname_table[i].name); |
2330 | 980 return FAIL; |
981 } | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
982 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
983 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
984 // 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:
18414
diff
changeset
|
985 // will be present in the library. |
3910 | 986 # if PY_VERSION_HEX >= 0x030300f0 |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
987 *ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString"); |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
988 *ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode"); |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
989 *ucs_as_encoded_string = symbol_from_dll(hinstPy3, |
3863 | 990 "PyUnicode_AsEncodedString"); |
3910 | 991 # else |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
992 *ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString"); |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
993 *ucs_decode = symbol_from_dll(hinstPy3, |
2894 | 994 "PyUnicodeUCS2_Decode"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
995 *ucs_as_encoded_string = symbol_from_dll(hinstPy3, |
2894 | 996 "PyUnicodeUCS2_AsEncodedString"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
997 if (*ucs_from_string == NULL || *ucs_decode == NULL |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
998 || *ucs_as_encoded_string == NULL) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
999 { |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
1000 *ucs_from_string = symbol_from_dll(hinstPy3, |
2330 | 1001 "PyUnicodeUCS4_FromString"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
1002 *ucs_decode = symbol_from_dll(hinstPy3, |
2894 | 1003 "PyUnicodeUCS4_Decode"); |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
1004 *ucs_as_encoded_string = symbol_from_dll(hinstPy3, |
2894 | 1005 "PyUnicodeUCS4_AsEncodedString"); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1006 } |
3910 | 1007 # endif |
13561
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
1008 if (*ucs_from_string == NULL || *ucs_decode == NULL |
417a01a1aaaa
patch 8.0.1654: warnings for conversion of void to function pointer
Christian Brabandt <cb@256bit.org>
parents:
13523
diff
changeset
|
1009 || *ucs_as_encoded_string == NULL) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1010 { |
2330 | 1011 close_dll(hinstPy3); |
1012 hinstPy3 = 0; | |
1013 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
1014 semsg(_(e_could_not_load_library_function_str), "PyUnicode_UCSX_*"); |
2330 | 1015 return FAIL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1016 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1017 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1018 return OK; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1019 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1020 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1021 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1022 * If python is enabled (there is installed python on Windows system) return |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1023 * TRUE, else FALSE. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1024 */ |
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
|
1025 int |
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
|
1026 python3_enabled(int verbose) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1027 { |
7528
53163e4d9e4f
commit https://github.com/vim/vim/commit/25e4fcde767084d1a79e0926bc301c92987c0cce
Christian Brabandt <cb@256bit.org>
parents:
7416
diff
changeset
|
1028 return py3_runtime_link_init((char *)p_py3dll, verbose) == OK; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1029 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1030 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1031 /* |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1032 * Load the standard Python exceptions - don't import the symbols from the |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1033 * DLL, as this can cause errors (importing data symbols is not reliable). |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1034 */ |
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
|
1035 static void |
7823
bcef391c101c
commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
1036 get_py3_exceptions(void) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1037 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1038 PyObject *exmod = PyImport_ImportModule("builtins"); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1039 PyObject *exdict = PyModule_GetDict(exmod); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1040 p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError"); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1041 p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError"); |
4315 | 1042 p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError"); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1043 p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt"); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1044 p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError"); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1045 p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError"); |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
1046 p3imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit"); |
4405 | 1047 p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError"); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
1048 p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError"); |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
1049 p3imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError"); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1050 Py_XINCREF(p3imp_PyExc_AttributeError); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1051 Py_XINCREF(p3imp_PyExc_IndexError); |
4315 | 1052 Py_XINCREF(p3imp_PyExc_KeyError); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1053 Py_XINCREF(p3imp_PyExc_KeyboardInterrupt); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1054 Py_XINCREF(p3imp_PyExc_TypeError); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1055 Py_XINCREF(p3imp_PyExc_ValueError); |
5088
34c629c3b4ba
updated for version 7.3.1287
Bram Moolenaar <bram@vim.org>
parents:
4982
diff
changeset
|
1056 Py_XINCREF(p3imp_PyExc_SystemExit); |
4405 | 1057 Py_XINCREF(p3imp_PyExc_RuntimeError); |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
1058 Py_XINCREF(p3imp_PyExc_ImportError); |
4972
537bbfff0c5c
updated for version 7.3.1231
Bram Moolenaar <bram@vim.org>
parents:
4970
diff
changeset
|
1059 Py_XINCREF(p3imp_PyExc_OverflowError); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1060 Py_XDECREF(exmod); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1061 } |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1062 #endif // DYNAMIC_PYTHON3 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1063 |
3618 | 1064 static int py3initialised = 0; |
1065 #define PYINITIALISED py3initialised | |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1066 static int python_end_called = FALSE; |
3618 | 1067 |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1068 #ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1069 # define DESTRUCTOR_FINISH(self) \ |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1070 ((freefunc)PyType_GetSlot(Py_TYPE(self), Py_tp_free))((PyObject*)self) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1071 #else |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1072 # define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1073 #endif |
3618 | 1074 |
4377 | 1075 #define WIN_PYTHON_REF(win) win->w_python3_ref |
1076 #define BUF_PYTHON_REF(buf) buf->b_python3_ref | |
4401 | 1077 #define TAB_PYTHON_REF(tab) tab->tp_python3_ref |
4377 | 1078 |
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
|
1079 static void |
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
|
1080 call_PyObject_Free(void *p) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1081 { |
4585
b9f87487d935
updated for version 7.3.1040
Bram Moolenaar <bram@vim.org>
parents:
4511
diff
changeset
|
1082 #if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1083 _PyObject_DebugFree(p); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1084 #else |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1085 PyObject_Free(p); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1086 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1087 } |
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
|
1088 |
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
|
1089 static PyObject * |
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
|
1090 call_PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1091 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1092 return PyType_GenericNew(type,args,kwds); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1093 } |
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
|
1094 |
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
|
1095 static PyObject * |
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
|
1096 call_PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1097 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1098 return PyType_GenericAlloc(type,nitems); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1099 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1100 |
4319 | 1101 static PyObject *OutputGetattro(PyObject *, PyObject *); |
1102 static int OutputSetattro(PyObject *, PyObject *, PyObject *); | |
1103 static PyObject *BufferGetattro(PyObject *, PyObject *); | |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1104 static int BufferSetattro(PyObject *, PyObject *, PyObject *); |
4401 | 1105 static PyObject *TabPageGetattro(PyObject *, PyObject *); |
4319 | 1106 static PyObject *WindowGetattro(PyObject *, PyObject *); |
1107 static int WindowSetattro(PyObject *, PyObject *, PyObject *); | |
1108 static PyObject *RangeGetattro(PyObject *, PyObject *); | |
1109 static PyObject *CurrentGetattro(PyObject *, PyObject *); | |
1110 static int CurrentSetattro(PyObject *, PyObject *, PyObject *); | |
1111 static PyObject *DictionaryGetattro(PyObject *, PyObject *); | |
1112 static int DictionarySetattro(PyObject *, PyObject *, PyObject *); | |
1113 static PyObject *ListGetattro(PyObject *, PyObject *); | |
1114 static int ListSetattro(PyObject *, PyObject *, PyObject *); | |
1115 static PyObject *FunctionGetattro(PyObject *, PyObject *); | |
1116 | |
1117 static struct PyModuleDef vimmodule; | |
1118 | |
4511
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1119 #define PY_CAN_RECURSE |
ce94a870b59b
updated for version 7.3.1003
Bram Moolenaar <bram@vim.org>
parents:
4500
diff
changeset
|
1120 |
4319 | 1121 /* |
1122 * Include the code shared with if_python.c | |
1123 */ | |
1124 #include "if_py_both.h" | |
1125 | |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1126 #ifdef USE_LIMITED_API |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1127 # if Py_LIMITED_API >= 0x030A0000 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1128 # define PY_UNICODE_GET_UTF8_CHARS(obj) PyUnicode_AsUTF8AndSize(obj, NULL) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1129 # else |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1130 // Python limited API before 3.10 lack easy ways to query the raw UTF-8 chars. |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1131 // We need to first convert the string to bytes, and then extract the chars. |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1132 // This function is only used for attribute string comparisons, which have |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1133 // known short length. As such, just allocate a short static buffer to hold |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1134 // the characters instead of having to allocate/deallcoate it. |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1135 // |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1136 // An alternative would be to convert all attribute string comparisons to use |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1137 // PyUnicode_CompareWithASCIIString to skip having to extract the chars. |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1138 static char py3_unicode_utf8_chars[20]; |
33404
9b35b4c6df4c
patch 9.0.1960: Make CI checks more strict
Christian Brabandt <cb@256bit.org>
parents:
33330
diff
changeset
|
1139 static char* PY_UNICODE_GET_UTF8_CHARS(PyObject* str) |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1140 { |
32949 | 1141 py3_unicode_utf8_chars[0] = '\0'; |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1142 PyObject* bytes = PyUnicode_AsUTF8String(str); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1143 if (bytes) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1144 { |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1145 char *chars; |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1146 Py_ssize_t len; |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1147 if (PyBytes_AsStringAndSize(bytes, &chars, &len) != -1) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1148 { |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1149 if (len < (Py_ssize_t)sizeof(py3_unicode_utf8_chars)) |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1150 // PyBytes_AsStringAndSize guarantees null-termination |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1151 memcpy(py3_unicode_utf8_chars, chars, len + 1); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1152 } |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1153 Py_DECREF(bytes); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1154 } |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1155 return py3_unicode_utf8_chars; |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1156 } |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1157 # endif |
33531
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1158 #else // !USE_LIMITED_API |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1159 # if PY_VERSION_HEX >= 0x030300f0 |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1160 # define PY_UNICODE_GET_UTF8_CHARS(obj) PyUnicode_AsUTF8AndSize(obj, NULL) |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1161 # else |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1162 # define PY_UNICODE_GET_UTF8_CHARS _PyUnicode_AsString |
1a769647d661
patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents:
33491
diff
changeset
|
1163 # endif |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1164 #endif |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1165 |
16030
6694659c6ad6
patch 8.1.1020: compiler warning for Python3 interface
Bram Moolenaar <Bram@vim.org>
parents:
15888
diff
changeset
|
1166 // NOTE: Must always be used at the start of a block, since it declares "name". |
4319 | 1167 #define GET_ATTR_STRING(name, nameobj) \ |
1168 char *name = ""; \ | |
1169 if (PyUnicode_Check(nameobj)) \ | |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1170 name = (char *)PY_UNICODE_GET_UTF8_CHARS(nameobj) |
4319 | 1171 |
1172 #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0) | |
1173 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1174 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1175 // Internal function prototypes. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1176 |
3951 | 1177 static PyObject *Py3Init_vim(void); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1178 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1179 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1180 // 1. Python interpreter main program. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1181 |
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
|
1182 void |
7823
bcef391c101c
commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
1183 python3_end(void) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1184 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1185 static int recurse = 0; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1186 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1187 // If a crash occurs while doing this, don't try again. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1188 if (recurse != 0) |
2330 | 1189 return; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1190 |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1191 python_end_called = TRUE; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1192 ++recurse; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1193 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1194 #ifdef DYNAMIC_PYTHON3 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1195 if (hinstPy3) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1196 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1197 if (Py_IsInitialized()) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1198 { |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1199 #ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1200 shutdown_types(); |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1201 #endif |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
1202 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1203 // acquire lock before finalizing |
4415 | 1204 PyGILState_Ensure(); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1205 |
2330 | 1206 Py_Finalize(); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1207 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1208 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1209 --recurse; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1210 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1211 |
7158
43ac8dc380c7
commit https://github.com/vim/vim/commit/094454fa708d3297db744f095cd2b7b155a8b6ad
Christian Brabandt <cb@256bit.org>
parents:
6569
diff
changeset
|
1212 #if (defined(DYNAMIC_PYTHON3) && defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON) && defined(UNIX)) || defined(PROTO) |
2384
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
1213 int |
7823
bcef391c101c
commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
1214 python3_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
|
1215 { |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
1216 return (hinstPy3 != 0); |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
1217 } |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
1218 #endif |
aeea25941392
Temporary solution for crashing when using both :py and :py3: disallow both in
Bram Moolenaar <bram@vim.org>
parents:
2374
diff
changeset
|
1219 |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1220 static wchar_t *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
|
1221 |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1222 #if defined(MSWIN) && (PY_VERSION_HEX >= 0x030500f0) |
22563
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1223 /* |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1224 * Return TRUE if stdin is readable from Python 3. |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1225 */ |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1226 static BOOL |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1227 is_stdin_readable(void) |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1228 { |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1229 DWORD mode, eventnum; |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1230 struct _stat st; |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1231 int fd = fileno(stdin); |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1232 HANDLE hstdin = (HANDLE)_get_osfhandle(fd); |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1233 |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1234 // Check if stdin is connected to the console. |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1235 if (GetConsoleMode(hstdin, &mode)) |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1236 // Check if it is opened as input. |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1237 return GetNumberOfConsoleInputEvents(hstdin, &eventnum); |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1238 |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1239 return _fstat(fd, &st) == 0; |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1240 } |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1241 |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1242 // Python 3.5 or later will abort inside Py_Initialize() when stdin has |
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1243 // been closed (i.e. executed by "vim -"). Reconnect stdin to CONIN$. |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1244 // Note that the python DLL is linked to its own stdio DLL which can be |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1245 // differ from Vim's stdio. |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1246 static void |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1247 reset_stdin(void) |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1248 { |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1249 FILE *(*py__acrt_iob_func)(unsigned) = NULL; |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1250 FILE *(*pyfreopen)(const char *, const char *, FILE *) = NULL; |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
1251 HINSTANCE hinst = get_forwarded_dll(hinstPy3); |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1252 |
22563
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1253 if (hinst == NULL || is_stdin_readable()) |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1254 return; |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1255 |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1256 // Get "freopen" and "stdin" which are used in the python DLL. |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1257 // "stdin" is defined as "__acrt_iob_func(0)" in VC++ 2015 or later. |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1258 py__acrt_iob_func = get_dll_import_func(hinst, "__acrt_iob_func"); |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1259 if (py__acrt_iob_func) |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1260 { |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1261 HINSTANCE hpystdiodll = find_imported_module_by_funcname(hinst, |
22516
c174ec901f7e
patch 8.2.1806: MS-Windows with Python: Vim freezes after import command
Bram Moolenaar <Bram@vim.org>
parents:
22484
diff
changeset
|
1262 "__acrt_iob_func"); |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1263 if (hpystdiodll) |
22516
c174ec901f7e
patch 8.2.1806: MS-Windows with Python: Vim freezes after import command
Bram Moolenaar <Bram@vim.org>
parents:
22484
diff
changeset
|
1264 pyfreopen = (void *)GetProcAddress(hpystdiodll, "freopen"); |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1265 } |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1266 |
22563
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1267 // Reconnect stdin to CONIN$. |
22516
c174ec901f7e
patch 8.2.1806: MS-Windows with Python: Vim freezes after import command
Bram Moolenaar <Bram@vim.org>
parents:
22484
diff
changeset
|
1268 if (pyfreopen != NULL) |
22563
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1269 pyfreopen("CONIN$", "r", py__acrt_iob_func(0)); |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1270 else |
22563
48454576b23c
patch 8.2.1830: MS-Windows: Python3 issue with stdin
Bram Moolenaar <Bram@vim.org>
parents:
22516
diff
changeset
|
1271 freopen("CONIN$", "r", stdin); |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1272 } |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1273 #else |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1274 # define reset_stdin() |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1275 #endif |
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1276 |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1277 // Python 3.2 or later will abort inside Py_Initialize() when mandatory |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1278 // modules cannot be loaded (e.g. 'pythonthreehome' is wrongly set.). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1279 // Install a hook to python dll's exit() and recover from it. |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1280 #if defined(MSWIN) && (PY_VERSION_HEX >= 0x030200f0) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1281 # define HOOK_EXIT |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1282 # include <setjmp.h> |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1283 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1284 static jmp_buf exit_hook_jump_buf; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1285 static void *orig_exit = NULL; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1286 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1287 /* |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1288 * Function that replaces exit() while calling Py_Initialize(). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1289 */ |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1290 static void |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1291 hooked_exit(int ret) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1292 { |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1293 // Recover from exit. |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1294 longjmp(exit_hook_jump_buf, 1); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1295 } |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1296 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1297 /* |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1298 * Install a hook to python dll's exit(). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1299 */ |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1300 static void |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1301 hook_py_exit(void) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1302 { |
33452
ed8db57d1034
patch 9.0.1980: win32: issues with stable python ABI
Christian Brabandt <cb@256bit.org>
parents:
33404
diff
changeset
|
1303 HINSTANCE hinst = get_forwarded_dll(hinstPy3); |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1304 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1305 if (hinst == NULL || orig_exit != NULL) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1306 return; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1307 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1308 orig_exit = hook_dll_import_func(hinst, "exit", (void *)hooked_exit); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1309 } |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1310 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1311 /* |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1312 * Remove the hook installed by hook_py_exit(). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1313 */ |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1314 static void |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1315 restore_py_exit(void) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1316 { |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1317 HINSTANCE hinst = hinstPy3; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1318 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1319 if (hinst == NULL) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1320 return; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1321 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1322 if (orig_exit != NULL) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1323 hook_dll_import_func(hinst, "exit", orig_exit); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1324 orig_exit = NULL; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1325 } |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1326 #endif |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1327 |
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
|
1328 static int |
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
|
1329 Python3_Init(void) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1330 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1331 if (!py3initialised) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1332 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1333 #ifdef DYNAMIC_PYTHON3 |
2330 | 1334 if (!python3_enabled(TRUE)) |
1335 { | |
26897
d02d40f0261c
patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1336 emsg(_(e_sorry_this_command_is_disabled_python_library_could_not_be_found)); |
2330 | 1337 goto fail; |
1338 } | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1339 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1340 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1341 init_structs(); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1342 |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1343 if (*p_py3home != NUL) |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1344 { |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1345 size_t len = mbstowcs(NULL, (char *)p_py3home, 0) + 1; |
2641 | 1346 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1347 // The string must not change later, make a copy in static memory. |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
1348 py_home_buf = ALLOC_MULT(wchar_t, len); |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1349 if (py_home_buf != NULL && mbstowcs( |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1350 py_home_buf, (char *)p_py3home, len) != (size_t)-1) |
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1351 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
|
1352 } |
2641 | 1353 #ifdef PYTHON3_HOME |
13154
53cc7ea77c54
patch 8.0.1451: difficult to set the python home directories properly
Christian Brabandt <cb@256bit.org>
parents:
12716
diff
changeset
|
1354 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
|
1355 Py_SetPythonHome(PYTHON3_HOME); |
2641 | 1356 #endif |
1357 | |
3863 | 1358 PyImport_AppendInittab("vim", Py3Init_vim); |
1359 | |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1360 #if !defined(DYNAMIC_PYTHON3) && defined(MSWIN) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1361 hinstPy3 = GetModuleHandle(PYTHON3_DLL); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1362 #endif |
21662
21304d9c47e9
patch 8.2.1381: MS-Windows: crash with Python 3.5 when stdin is redirected
Bram Moolenaar <Bram@vim.org>
parents:
21349
diff
changeset
|
1363 reset_stdin(); |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1364 |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1365 #ifdef HOOK_EXIT |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1366 // Catch exit() called in Py_Initialize(). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1367 hook_py_exit(); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1368 if (setjmp(exit_hook_jump_buf) == 0) |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1369 { |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1370 Py_Initialize(); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1371 restore_py_exit(); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1372 } |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1373 else |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1374 { |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1375 // exit() was called in Py_Initialize(). |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1376 restore_py_exit(); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1377 emsg(_(e_critical_error_in_python3_initialization_check_your_installation)); |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1378 goto fail; |
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1379 } |
31539
a337bd6f7603
patch 9.0.1102: complicated use of #ifdef
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1380 #else |
a337bd6f7603
patch 9.0.1102: complicated use of #ifdef
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1381 Py_Initialize(); |
27581
78e3b38b0d33
patch 8.2.4317: MS-Windows: Vim exits when Python 3 initialisation fails
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1382 #endif |
12716
351cf7c67bbe
patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
1383 |
22572
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1384 #if PY_VERSION_HEX < 0x03090000 |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1385 // Initialise threads. This is deprecated since Python 3.9. |
2877 | 1386 PyEval_InitThreads(); |
22572
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1387 #endif |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1388 #ifdef DYNAMIC_PYTHON3 |
2330 | 1389 get_py3_exceptions(); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1390 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1391 |
4494 | 1392 if (PythonIO_Init_io()) |
2330 | 1393 goto fail; |
1394 | |
3618 | 1395 globals = PyModule_GetDict(PyImport_AddModule("__main__")); |
1396 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1397 // 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:
18414
diff
changeset
|
1398 // argv[0] value in Py3Init_vim(). Previously we used an empty |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1399 // 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:
18414
diff
changeset
|
1400 // the current directory in sys.path. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1401 // Only after vim has been imported, the element does exist in |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1402 // sys.path. |
2894 | 1403 PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))"); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1404 |
22572
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1405 // Without the call to PyEval_SaveThread, thread specific state (such |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1406 // as the system trace hook), will be lost between invocations of |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1407 // Python code. |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1408 // GIL may have been created and acquired in PyEval_InitThreads() and |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1409 // thread state is created in Py_Initialize(); there |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1410 // _PyGILState_NoteThreadState() also sets gilcounter to 1 (python must |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1411 // have threads enabled!), so the following does both: unlock GIL and |
0fd4d7548b07
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9
Bram Moolenaar <Bram@vim.org>
parents:
22563
diff
changeset
|
1412 // save thread state in TLS without deleting thread state |
4109 | 1413 PyEval_SaveThread(); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1414 |
2330 | 1415 py3initialised = 1; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1416 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1417 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1418 return 0; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1419 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1420 fail: |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1421 // 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:
18414
diff
changeset
|
1422 // 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:
18414
diff
changeset
|
1423 // 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:
18414
diff
changeset
|
1424 // not do anything in this case). |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1425 PythonIO_Flush(); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1426 return -1; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1427 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1428 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1429 /* |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1430 * External interface |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1431 */ |
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
|
1432 static void |
4486 | 1433 DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1434 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1435 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
2330 | 1436 char *saved_locale; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1437 #endif |
2894 | 1438 PyObject *cmdstr; |
1439 PyObject *cmdbytes; | |
4415 | 1440 PyGILState_STATE pygilstate; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1441 |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1442 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
|
1443 goto theend; |
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1444 |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1445 if (Python3_Init()) |
2330 | 1446 goto theend; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1447 |
4486 | 1448 init_range(arg); |
1449 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1450 Python_Release_Vim(); // leave Vim |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1451 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1452 #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:
18414
diff
changeset
|
1453 // Python only works properly when the LC_NUMERIC locale is "C". |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1454 saved_locale = setlocale(LC_NUMERIC, NULL); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1455 if (saved_locale == NULL || STRCMP(saved_locale, "C") == 0) |
2330 | 1456 saved_locale = NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1457 else |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1458 { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1459 // Need to make a copy, value may change when setting new locale. |
2330 | 1460 saved_locale = (char *)vim_strsave((char_u *)saved_locale); |
1461 (void)setlocale(LC_NUMERIC, "C"); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1462 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1463 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1464 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1465 pygilstate = PyGILState_Ensure(); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1466 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1467 // PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1468 // SyntaxError (unicode error). |
2955 | 1469 cmdstr = PyUnicode_Decode(cmd, strlen(cmd), |
23264
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
1470 (char *)ENC_OPT, 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
|
1471 cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", ERRORS_ENCODE_ARG); |
2894 | 1472 Py_XDECREF(cmdstr); |
3618 | 1473 |
4486 | 1474 run(PyBytes_AsString(cmdbytes), arg, &pygilstate); |
2894 | 1475 Py_XDECREF(cmdbytes); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1476 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1477 PyGILState_Release(pygilstate); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1478 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1479 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1480 if (saved_locale != NULL) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1481 { |
2330 | 1482 (void)setlocale(LC_NUMERIC, saved_locale); |
1483 vim_free(saved_locale); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1484 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1485 #endif |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1486 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1487 Python_Lock_Vim(); // enter Vim |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1488 PythonIO_Flush(); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1489 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1490 theend: |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1491 return; // keeps lint happy |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1492 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1493 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1494 /* |
2350
06feaf4fe36a
Rename some "python3" symbols to "py3", as the command name.
Bram Moolenaar <bram@vim.org>
parents:
2342
diff
changeset
|
1495 * ":py3" |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1496 */ |
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
|
1497 void |
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
|
1498 ex_py3(exarg_T *eap) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1499 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1500 char_u *script; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1501 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1502 script = script_get(eap, eap->arg); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1503 if (!eap->skip) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1504 { |
15888
a83c4b1f8ea2
patch 8.1.0950: using :python sets 'pyxversion' even when not executed
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1505 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
|
1506 p_pyx = 3; |
a83c4b1f8ea2
patch 8.1.0950: using :python sets 'pyxversion' even when not executed
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1507 |
4486 | 1508 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:
32949
diff
changeset
|
1509 init_range_cmd, |
4486 | 1510 (runner) run_cmd, |
1511 (void *) eap); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1512 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1513 vim_free(script); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1514 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1515 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1516 #define BUFFER_SIZE 2048 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1517 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1518 /* |
2340
99c1eba60b2d
Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents:
2330
diff
changeset
|
1519 * ":py3file" |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1520 */ |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1521 void |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1522 ex_py3file(exarg_T *eap) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1523 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1524 static char buffer[BUFFER_SIZE]; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1525 const char *file; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1526 char *p; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1527 int i; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1528 |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1529 if (p_pyx == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1530 p_pyx = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1531 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1532 // 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:
18414
diff
changeset
|
1533 // 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:
18414
diff
changeset
|
1534 // 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:
18414
diff
changeset
|
1535 // compatible between the two. Yuk. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1536 // |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1537 // construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec')) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1538 // |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1539 // Using bytes so that Python can detect the source encoding as it normally |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1540 // does. The doc does not say "compile" accept bytes, though. |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1541 // |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1542 // We need to 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:
18414
diff
changeset
|
1543 // Python won't mangle the file name. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1544 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1545 strcpy(buffer, "exec(compile(open('"); |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1546 p = buffer + 19; // size of "exec(compile(open('" |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1547 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1548 for (i=0; i<2; ++i) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1549 { |
2330 | 1550 file = (char *)eap->arg; |
1551 while (*file && p < buffer + (BUFFER_SIZE - 3)) | |
1552 { | |
1553 if (*file == '\\' || *file == '\'') | |
1554 *p++ = '\\'; | |
1555 *p++ = *file++; | |
1556 } | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1557 // If we didn't finish the file name, we hit a buffer overflow |
2330 | 1558 if (*file != '\0') |
1559 return; | |
1560 if (i==0) | |
1561 { | |
2894 | 1562 strcpy(p,"','rb').read(),'"); |
1563 p += 16; | |
2330 | 1564 } |
1565 else | |
1566 { | |
1567 strcpy(p,"','exec'))"); | |
1568 p += 10; | |
1569 } | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1570 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1571 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1572 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1573 // Execute the file |
4486 | 1574 DoPyCommand(buffer, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
32949
diff
changeset
|
1575 init_range_cmd, |
4486 | 1576 (runner) run_cmd, |
1577 (void *) eap); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1578 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1579 |
4421 | 1580 void |
1581 ex_py3do(exarg_T *eap) | |
4417 | 1582 { |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1583 if (p_pyx == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1584 p_pyx = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1585 |
4486 | 1586 DoPyCommand((char *)eap->arg, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
32949
diff
changeset
|
1587 init_range_cmd, |
4486 | 1588 (runner)run_do, |
1589 (void *)eap); | |
4417 | 1590 } |
1591 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1592 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1593 // 2. Python output stream: writes output via [e]msg(). |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1594 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1595 // Implementation functions |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1596 |
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
|
1597 static PyObject * |
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
|
1598 OutputGetattro(PyObject *self, PyObject *nameobj) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1599 { |
3826 | 1600 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1601 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1602 if (strcmp(name, "softspace") == 0) |
2330 | 1603 return PyLong_FromLong(((OutputObject *)(self))->softspace); |
8967
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1604 else if (strcmp(name, "errors") == 0) |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1605 return PyString_FromString("strict"); |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1606 else if (strcmp(name, "encoding") == 0) |
df5f9284fcba
commit https://github.com/vim/vim/commit/6d4431e7b675ba7a0194c0b8eb84b7d92e4e7953
Christian Brabandt <cb@256bit.org>
parents:
8889
diff
changeset
|
1607 return PyString_FromString(ENC_OPT); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1608 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1609 return PyObject_GenericGetAttr(self, nameobj); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1610 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1611 |
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
|
1612 static int |
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
|
1613 OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1614 { |
3826 | 1615 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1616 |
33320
a9f0f0eae10e
patch 9.0.1925: if_python: still undefined behaviour with function pointer
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
1617 return OutputSetattr(self, name, val); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1618 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1619 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1620 /////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1621 // 3. Implementation of the Vim module for Python |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1622 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1623 // Window type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1624 // -------------------------------------- |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1625 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1626 #define WindowType_Check(obj) ((obj)->ob_base.ob_type == &WindowType) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1627 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1628 // Buffer type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1629 // -------------------------------------- |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1630 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1631 #define BufferType_Check(obj) ((obj)->ob_base.ob_type == &BufferType) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1632 |
3070 | 1633 static PyObject* BufferSubscript(PyObject *self, PyObject *idx); |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1634 static int BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1635 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1636 // Line range type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1637 // -------------------------------------- |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1638 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1639 #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1640 |
3070 | 1641 static PyObject* RangeSubscript(PyObject *self, PyObject *idx); |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1642 static int RangeAsItem(PyObject *, Py_ssize_t, PyObject *); |
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1643 static int RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1644 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1645 // Current objects type - Implementation functions |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1646 // ----------------------------------------------- |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1647 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1648 static PySequenceMethods BufferAsSeq = { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1649 (lenfunc) BufferLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1650 (binaryfunc) 0, // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1651 (ssizeargfunc) 0, // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1652 (ssizeargfunc) BufferItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1653 0, // was_sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1654 0, // sq_ass_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1655 0, // sq_ass_slice, x[i:j]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1656 0, // sq_contains |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1657 0, // sq_inplace_concat |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1658 0, // sq_inplace_repeat |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1659 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1660 |
4319 | 1661 static PyMappingMethods BufferAsMapping = { |
2330 | 1662 /* mp_length */ (lenfunc)BufferLength, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1663 /* mp_subscript */ (binaryfunc)BufferSubscript, |
2894 | 1664 /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1665 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1666 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1667 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1668 // Buffer object |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1669 |
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
|
1670 static PyObject * |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1671 BufferGetattro(PyObject *self, PyObject *nameobj) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1672 { |
4319 | 1673 PyObject *r; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1674 |
3826 | 1675 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1676 |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1677 if ((r = BufferAttrValid((BufferObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1678 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1679 |
4319 | 1680 if (CheckBuffer((BufferObject *)(self))) |
2330 | 1681 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1682 |
4319 | 1683 r = BufferAttr((BufferObject *)(self), name); |
1684 if (r || PyErr_Occurred()) | |
1685 return r; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1686 else |
2330 | 1687 return PyObject_GenericGetAttr(self, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1688 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1689 |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1690 static int |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1691 BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val) |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1692 { |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1693 GET_ATTR_STRING(name, nameobj); |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1694 |
33320
a9f0f0eae10e
patch 9.0.1925: if_python: still undefined behaviour with function pointer
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
1695 return BufferSetattr(self, name, val); |
4589
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1696 } |
fa39483a1363
updated for version 7.3.1042
Bram Moolenaar <bram@vim.org>
parents:
4585
diff
changeset
|
1697 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1698 ////////////////// |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1699 |
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
|
1700 static PyObject * |
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
|
1701 BufferSubscript(PyObject *self, PyObject* idx) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1702 { |
3618 | 1703 if (PyLong_Check(idx)) |
1704 { | |
2330 | 1705 long _idx = PyLong_AsLong(idx); |
4488 | 1706 return BufferItem((BufferObject *)(self), _idx); |
31804
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1707 } |
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1708 else if (PySlice_Check(idx)) |
3618 | 1709 { |
2330 | 1710 Py_ssize_t start, stop, step, slicelen; |
1711 | |
4387 | 1712 if (CheckBuffer((BufferObject *) self)) |
1713 return NULL; | |
1714 | |
5768 | 1715 if (PySlice_GetIndicesEx((PySliceObject_T *)idx, |
4389 | 1716 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, |
2330 | 1717 &start, &stop, |
3618 | 1718 &step, &slicelen) < 0) |
2330 | 1719 return NULL; |
4488 | 1720 return BufferSlice((BufferObject *)(self), start, stop); |
3618 | 1721 } |
1722 else | |
1723 { | |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
1724 RAISE_INVALID_INDEX_TYPE(idx); |
2330 | 1725 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1726 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1727 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1728 |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1729 static int |
2894 | 1730 BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val) |
1731 { | |
3618 | 1732 if (PyLong_Check(idx)) |
1733 { | |
2894 | 1734 long n = PyLong_AsLong(idx); |
21190
10eb6c38938c
patch 8.2.1146: not enough testing for Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1735 |
10eb6c38938c
patch 8.2.1146: not enough testing for Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1736 if (CheckBuffer((BufferObject *) self)) |
10eb6c38938c
patch 8.2.1146: not enough testing for Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1737 return -1; |
10eb6c38938c
patch 8.2.1146: not enough testing for Python
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
1738 |
2894 | 1739 return RBAsItem((BufferObject *)(self), n, val, 1, |
1740 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, | |
1741 NULL); | |
31804
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1742 } |
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1743 else if (PySlice_Check(idx)) |
3618 | 1744 { |
2894 | 1745 Py_ssize_t start, stop, step, slicelen; |
1746 | |
4387 | 1747 if (CheckBuffer((BufferObject *) self)) |
1748 return -1; | |
1749 | |
5768 | 1750 if (PySlice_GetIndicesEx((PySliceObject_T *)idx, |
4389 | 1751 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, |
2894 | 1752 &start, &stop, |
3618 | 1753 &step, &slicelen) < 0) |
2894 | 1754 return -1; |
1755 return RBAsSlice((BufferObject *)(self), start, stop, val, 1, | |
1756 (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count, | |
1757 NULL); | |
3618 | 1758 } |
1759 else | |
1760 { | |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
1761 RAISE_INVALID_INDEX_TYPE(idx); |
2894 | 1762 return -1; |
1763 } | |
1764 } | |
1765 | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1766 static PySequenceMethods RangeAsSeq = { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1767 (lenfunc) RangeLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1768 (binaryfunc) 0, // RangeConcat, sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1769 (ssizeargfunc) 0, // RangeRepeat, sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1770 (ssizeargfunc) RangeItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1771 0, // was_sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1772 (ssizeobjargproc) RangeAsItem, // sq_as_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1773 0, // sq_ass_slice, x[i:j]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1774 0, // sq_contains |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1775 0, // sq_inplace_concat |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1776 0, // sq_inplace_repeat |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1777 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1778 |
4319 | 1779 static PyMappingMethods RangeAsMapping = { |
2330 | 1780 /* mp_length */ (lenfunc)RangeLength, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1781 /* mp_subscript */ (binaryfunc)RangeSubscript, |
3070 | 1782 /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript, |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1783 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1784 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1785 // Line range object - Implementation |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1786 |
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
|
1787 static PyObject * |
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
|
1788 RangeGetattro(PyObject *self, PyObject *nameobj) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1789 { |
3826 | 1790 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1791 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1792 if (strcmp(name, "start") == 0) |
2330 | 1793 return Py_BuildValue("n", ((RangeObject *)(self))->start - 1); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1794 else if (strcmp(name, "end") == 0) |
2330 | 1795 return Py_BuildValue("n", ((RangeObject *)(self))->end - 1); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1796 else |
2330 | 1797 return PyObject_GenericGetAttr(self, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1798 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1799 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1800 //////////////// |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1801 |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1802 static int |
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
|
1803 RangeAsItem(PyObject *self, Py_ssize_t n, PyObject *val) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1804 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1805 return RBAsItem(((RangeObject *)(self))->buf, n, val, |
2330 | 1806 ((RangeObject *)(self))->start, |
1807 ((RangeObject *)(self))->end, | |
1808 &((RangeObject *)(self))->end); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1809 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1810 |
3070 | 1811 static Py_ssize_t |
1812 RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val) | |
1813 { | |
1814 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, | |
1815 ((RangeObject *)(self))->start, | |
1816 ((RangeObject *)(self))->end, | |
1817 &((RangeObject *)(self))->end); | |
1818 } | |
1819 | |
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
|
1820 static PyObject * |
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
|
1821 RangeSubscript(PyObject *self, PyObject* idx) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1822 { |
3618 | 1823 if (PyLong_Check(idx)) |
1824 { | |
2330 | 1825 long _idx = PyLong_AsLong(idx); |
4488 | 1826 return RangeItem((RangeObject *)(self), _idx); |
31804
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1827 } |
50555279168b
patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents:
31702
diff
changeset
|
1828 else if (PySlice_Check(idx)) |
3618 | 1829 { |
2330 | 1830 Py_ssize_t start, stop, step, slicelen; |
1831 | |
5768 | 1832 if (PySlice_GetIndicesEx((PySliceObject_T *)idx, |
2330 | 1833 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1, |
1834 &start, &stop, | |
3618 | 1835 &step, &slicelen) < 0) |
2330 | 1836 return NULL; |
4488 | 1837 return RangeSlice((RangeObject *)(self), start, stop); |
3618 | 1838 } |
1839 else | |
1840 { | |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
1841 RAISE_INVALID_INDEX_TYPE(idx); |
2330 | 1842 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1843 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1844 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1845 |
22669
3ceb24835183
patch 8.2.1883: compiler warnings when using Python
Bram Moolenaar <Bram@vim.org>
parents:
22572
diff
changeset
|
1846 static int |
3070 | 1847 RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val) |
1848 { | |
3618 | 1849 if (PyLong_Check(idx)) |
1850 { | |
3070 | 1851 long n = PyLong_AsLong(idx); |
1852 return RangeAsItem(self, n, val); | |
16162
cd5c83115ec6
patch 8.1.1086: too many curly braces
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1853 } |
cd5c83115ec6
patch 8.1.1086: too many curly braces
Bram Moolenaar <Bram@vim.org>
parents:
16032
diff
changeset
|
1854 else if (PySlice_Check(idx)) |
3618 | 1855 { |
3070 | 1856 Py_ssize_t start, stop, step, slicelen; |
1857 | |
5768 | 1858 if (PySlice_GetIndicesEx((PySliceObject_T *)idx, |
3070 | 1859 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1, |
1860 &start, &stop, | |
3618 | 1861 &step, &slicelen) < 0) |
3070 | 1862 return -1; |
1863 return RangeAsSlice(self, start, stop, val); | |
3618 | 1864 } |
1865 else | |
1866 { | |
4970
f5c822e5a0eb
updated for version 7.3.1230
Bram Moolenaar <bram@vim.org>
parents:
4968
diff
changeset
|
1867 RAISE_INVALID_INDEX_TYPE(idx); |
3070 | 1868 return -1; |
1869 } | |
1870 } | |
1871 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1872 // TabPage object - Implementation |
4401 | 1873 |
1874 static PyObject * | |
1875 TabPageGetattro(PyObject *self, PyObject *nameobj) | |
1876 { | |
1877 PyObject *r; | |
1878 | |
1879 GET_ATTR_STRING(name, nameobj); | |
1880 | |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1881 if ((r = TabPageAttrValid((TabPageObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1882 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1883 |
4401 | 1884 if (CheckTabPage((TabPageObject *)(self))) |
1885 return NULL; | |
1886 | |
1887 r = TabPageAttr((TabPageObject *)(self), name); | |
1888 if (r || PyErr_Occurred()) | |
1889 return r; | |
1890 else | |
1891 return PyObject_GenericGetAttr(self, nameobj); | |
1892 } | |
1893 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1894 // Window object - Implementation |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1895 |
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
|
1896 static PyObject * |
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
|
1897 WindowGetattro(PyObject *self, PyObject *nameobj) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1898 { |
4319 | 1899 PyObject *r; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1900 |
3826 | 1901 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1902 |
4593
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1903 if ((r = WindowAttrValid((WindowObject *)(self), name))) |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1904 return r; |
0cf552b325b5
updated for version 7.3.1044
Bram Moolenaar <bram@vim.org>
parents:
4589
diff
changeset
|
1905 |
4319 | 1906 if (CheckWindow((WindowObject *)(self))) |
2330 | 1907 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1908 |
4319 | 1909 r = WindowAttr((WindowObject *)(self), name); |
1910 if (r || PyErr_Occurred()) | |
1911 return r; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1912 else |
2330 | 1913 return PyObject_GenericGetAttr(self, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1914 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1915 |
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
|
1916 static int |
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
|
1917 WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1918 { |
3826 | 1919 GET_ATTR_STRING(name, nameobj); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1920 |
33320
a9f0f0eae10e
patch 9.0.1925: if_python: still undefined behaviour with function pointer
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
1921 return WindowSetattr(self, name, val); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1922 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1923 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1924 // Tab page list object - Definitions |
4401 | 1925 |
1926 static PySequenceMethods TabListAsSeq = { | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1927 (lenfunc) TabListLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1928 (binaryfunc) 0, // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1929 (ssizeargfunc) 0, // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1930 (ssizeargfunc) TabListItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1931 0, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1932 (ssizeobjargproc)0, // sq_as_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1933 0, // sq_ass_slice, x[i:j]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1934 0, // sq_contains |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1935 0, // sq_inplace_concat |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1936 0, // sq_inplace_repeat |
4401 | 1937 }; |
1938 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1939 // Window list object - Definitions |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1940 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1941 static PySequenceMethods WinListAsSeq = { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1942 (lenfunc) WinListLength, // sq_length, len(x) |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1943 (binaryfunc) 0, // sq_concat, x+y |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1944 (ssizeargfunc) 0, // sq_repeat, x*n |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1945 (ssizeargfunc) WinListItem, // sq_item, x[i] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1946 0, // sq_slice, x[i:j] |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1947 (ssizeobjargproc)0, // sq_as_item, x[i]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1948 0, // sq_ass_slice, x[i:j]=v |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1949 0, // sq_contains |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1950 0, // sq_inplace_concat |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1951 0, // sq_inplace_repeat |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1952 }; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1953 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1954 /* |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1955 * Current items object - Implementation |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1956 */ |
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
|
1957 static PyObject * |
4319 | 1958 CurrentGetattro(PyObject *self, PyObject *nameobj) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1959 { |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1960 PyObject *r; |
3826 | 1961 GET_ATTR_STRING(name, nameobj); |
4599
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1962 if (!(r = CurrentGetattr(self, name))) |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1963 return PyObject_GenericGetAttr(self, nameobj); |
89bec74fd793
updated for version 7.3.1047
Bram Moolenaar <bram@vim.org>
parents:
4593
diff
changeset
|
1964 return r; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1965 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1966 |
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
|
1967 static int |
4319 | 1968 CurrentSetattro(PyObject *self, PyObject *nameobj, PyObject *value) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1969 { |
4319 | 1970 GET_ATTR_STRING(name, nameobj); |
1971 return CurrentSetattr(self, name, value); | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1972 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
1973 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1974 // Dictionary object - Definitions |
3618 | 1975 |
3828 | 1976 static PyObject * |
1977 DictionaryGetattro(PyObject *self, PyObject *nameobj) | |
1978 { | |
1979 DictionaryObject *this = ((DictionaryObject *) (self)); | |
1980 | |
1981 GET_ATTR_STRING(name, nameobj); | |
1982 | |
1983 if (strcmp(name, "locked") == 0) | |
1984 return PyLong_FromLong(this->dict->dv_lock); | |
1985 else if (strcmp(name, "scope") == 0) | |
1986 return PyLong_FromLong(this->dict->dv_scope); | |
1987 | |
1988 return PyObject_GenericGetAttr(self, nameobj); | |
1989 } | |
1990 | |
1991 static int | |
1992 DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val) | |
1993 { | |
1994 GET_ATTR_STRING(name, nameobj); | |
33320
a9f0f0eae10e
patch 9.0.1925: if_python: still undefined behaviour with function pointer
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
1995 return DictionarySetattr(self, name, val); |
3618 | 1996 } |
1997 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
1998 // List object - Definitions |
3618 | 1999 |
3828 | 2000 static PyObject * |
2001 ListGetattro(PyObject *self, PyObject *nameobj) | |
2002 { | |
2003 GET_ATTR_STRING(name, nameobj); | |
2004 | |
2005 if (strcmp(name, "locked") == 0) | |
2006 return PyLong_FromLong(((ListObject *) (self))->list->lv_lock); | |
2007 | |
2008 return PyObject_GenericGetAttr(self, nameobj); | |
2009 } | |
2010 | |
2011 static int | |
2012 ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val) | |
2013 { | |
2014 GET_ATTR_STRING(name, nameobj); | |
33320
a9f0f0eae10e
patch 9.0.1925: if_python: still undefined behaviour with function pointer
Christian Brabandt <cb@256bit.org>
parents:
33303
diff
changeset
|
2015 return ListSetattr(self, name, val); |
3618 | 2016 } |
2017 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2018 // Function object - Definitions |
3618 | 2019 |
2020 static PyObject * | |
2021 FunctionGetattro(PyObject *self, PyObject *nameobj) | |
2022 { | |
8889
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2023 PyObject *r; |
3618 | 2024 FunctionObject *this = (FunctionObject *)(self); |
3826 | 2025 |
2026 GET_ATTR_STRING(name, nameobj); | |
3618 | 2027 |
8889
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2028 r = FunctionAttr(this, name); |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2029 if (r || PyErr_Occurred()) |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2030 return r; |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2031 else |
8755d57debaa
commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents:
8538
diff
changeset
|
2032 return PyObject_GenericGetAttr(self, nameobj); |
3618 | 2033 } |
2034 | |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2035 // External interface |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2036 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2037 void |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2038 python3_buffer_free(buf_T *buf) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2039 { |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2040 BufferObject *bp = BUF_PYTHON_REF(buf); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2041 if (bp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2042 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2043 bp->buf = INVALID_BUFFER_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2044 BUF_PYTHON_REF(buf) = NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2045 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2046 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2047 void |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2048 python3_window_free(win_T *win) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2049 { |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2050 WindowObject *wp = WIN_PYTHON_REF(win); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2051 if (wp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2052 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2053 wp->win = INVALID_WINDOW_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2054 WIN_PYTHON_REF(win) = NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2055 } |
4401 | 2056 |
2057 void | |
2058 python3_tabpage_free(tabpage_T *tab) | |
2059 { | |
31702
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2060 TabPageObject *tp = TAB_PYTHON_REF(tab); |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2061 if (tp == NULL) |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2062 return; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2063 tp->tab = INVALID_TABPAGE_VALUE; |
27c9212d10aa
patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31539
diff
changeset
|
2064 TAB_PYTHON_REF(tab) = NULL; |
4401 | 2065 } |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2066 |
3951 | 2067 static PyObject * |
2068 Py3Init_vim(void) | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2069 { |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2070 // The special value is removed from sys.path in Python3_Init(). |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2071 static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL}; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2072 |
4494 | 2073 if (init_types()) |
2074 return NULL; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2075 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2076 // Set sys.argv[] to avoid a crash in warn(). |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2077 PySys_SetArgv(1, argv); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2078 |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
2079 if ((vim_module = PyModule_Create(&vimmodule)) == NULL) |
2894 | 2080 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2081 |
4982
39980afcf54a
updated for version 7.3.1236
Bram Moolenaar <bram@vim.org>
parents:
4972
diff
changeset
|
2082 if (populate_module(vim_module)) |
2330 | 2083 return NULL; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2084 |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
2085 if (init_sys_path()) |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
2086 return NULL; |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
2087 |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4823
diff
changeset
|
2088 return vim_module; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2089 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2090 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2091 ////////////////////////////////////////////////////////////////////////// |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2092 // 4. Utility functions for handling the interface between Vim and Python. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2093 |
18798
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2094 /* |
f0f9692d4487
patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18414
diff
changeset
|
2095 * Convert a Vim line into a Python string. |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2096 * All internal newlines are replaced by null characters. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2097 * |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2098 * On errors, the Python exception data is set, and NULL is returned. |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2099 */ |
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
|
2100 static PyObject * |
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
|
2101 LineToString(const char *str) |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2102 { |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2103 PyObject *result; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2104 Py_ssize_t len = strlen(str); |
19524
4a6a412e4565
patch 8.2.0319: file missing in distribution, comments outdated
Bram Moolenaar <Bram@vim.org>
parents:
18798
diff
changeset
|
2105 char *tmp, *p; |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2106 |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
2107 tmp = alloc(len + 1); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2108 p = tmp; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2109 if (p == NULL) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2110 { |
2330 | 2111 PyErr_NoMemory(); |
2112 return NULL; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2113 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2114 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2115 while (*str) |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2116 { |
2330 | 2117 if (*str == '\n') |
2118 *p = '\0'; | |
2119 else | |
2120 *p = *str; | |
2121 | |
2122 ++p; | |
2123 ++str; | |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2124 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2125 *p = '\0'; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2126 |
23264
f9526a3c9bbf
patch 8.2.2178: Python 3: non-utf8 character cannot be handled
Bram Moolenaar <Bram@vim.org>
parents:
22669
diff
changeset
|
2127 result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, ERRORS_DECODE_ARG); |
2329
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2128 |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2129 vim_free(tmp); |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2130 return result; |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2131 } |
ad2889f48843
Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff
changeset
|
2132 |
3618 | 2133 void |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
16030
diff
changeset
|
2134 do_py3eval(char_u *str, typval_T *rettv) |
3618 | 2135 { |
4486 | 2136 DoPyCommand((char *) str, |
33295
a43861545866
patch 9.0.1913: if_python: undefined behaviour for function pointers
Christian Brabandt <cb@256bit.org>
parents:
32949
diff
changeset
|
2137 init_range_eval, |
4486 | 2138 (runner) run_eval, |
2139 (void *) rettv); | |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
16030
diff
changeset
|
2140 if (rettv->v_type == VAR_UNKNOWN) |
3618 | 2141 { |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
16030
diff
changeset
|
2142 rettv->v_type = VAR_NUMBER; |
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
16030
diff
changeset
|
2143 rettv->vval.v_number = 0; |
3618 | 2144 } |
2145 } | |
2146 | |
6565 | 2147 int |
16032
831f9e74eded
patch 8.1.1021: pyeval() and py3eval() leak memory
Bram Moolenaar <Bram@vim.org>
parents:
16030
diff
changeset
|
2148 set_ref_in_python3(int copyID) |
3618 | 2149 { |
6569 | 2150 return set_ref_in_py(copyID); |
3618 | 2151 } |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2152 |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2153 int |
33330
3af53f2895dc
patch 9.0.1930: compiler warnings with clang-17
Christian Brabandt <cb@256bit.org>
parents:
33320
diff
changeset
|
2154 python3_version(void) |
32936
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2155 { |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2156 #ifdef USE_LIMITED_API |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2157 return Py_LIMITED_API; |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2158 #else |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2159 return PY_VERSION_HEX; |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2160 #endif |
c517845bd10e
patch 9.0.1776: No support for stable Python 3 ABI
Christian Brabandt <cb@256bit.org>
parents:
32800
diff
changeset
|
2161 } |