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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
82 #if PY_VERSION_HEX >= 0x030100f0
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
83 # define CODEC_ERROR_HANDLER "surrogateescape"
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
84 #else
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
85 # define CODEC_ERROR_HANDLER NULL
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
86 #endif
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
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
80ed6aa7b9eb updated for version 7.3.579
Bram Moolenaar <bram@vim.org>
parents: 3618
diff changeset
95 #define PY_USE_CAPSULE
80ed6aa7b9eb updated for version 7.3.579
Bram Moolenaar <bram@vim.org>
parents: 3618
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
113 #define PyInt_FromLong(i) PyLong_FromLong(i)
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
114 #define PyInt_AsLong(obj) PyLong_AsLong(obj)
4319
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
ec02e1474bc2 updated for version 7.4.151
Bram Moolenaar <bram@vim.org>
parents: 5419
diff changeset
118 #define PyIntArgFunc ssizeargfunc
ec02e1474bc2 updated for version 7.4.151
Bram Moolenaar <bram@vim.org>
parents: 5419
diff changeset
119 #define PyIntObjArgProc ssizeobjargproc
ec02e1474bc2 updated for version 7.4.151
Bram Moolenaar <bram@vim.org>
parents: 5419
diff changeset
120
5768
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
121 /*
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
122 * PySlice_GetIndicesEx(): first argument type changed from PySliceObject
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
123 * to PyObject in Python 3.2 or later.
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
124 */
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
125 #if PY_VERSION_HEX >= 0x030200f0
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
126 typedef PyObject PySliceObject_T;
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
127 #else
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
128 typedef PySliceObject PySliceObject_T;
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
129 #endif
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
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
0b4a515b1254 updated for version 7.3.132
Bram Moolenaar <bram@vim.org>
parents: 2641
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
164 # define PyMem_Free py3_PyMem_Free
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
6b1f3fc893cd updated for version 7.3.825
Bram Moolenaar <bram@vim.org>
parents: 4109
diff changeset
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
d4816e7c3328 updated for version 7.3.950
Bram Moolenaar <bram@vim.org>
parents: 4401
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
190 # define PySequence_Check py3_PySequence_Check
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
191 # define PySequence_Size py3_PySequence_Size
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
194 # define PyTuple_Size py3_PyTuple_Size
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
206 # define PyDict_Next py3_PyDict_Next
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
216 # define PyIter_Next py3_PyIter_Next
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
a6f0544df95e updated for version 7.3.948
Bram Moolenaar <bram@vim.org>
parents: 4397
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
233 # define PyObject_SetAttrString py3_PyObject_SetAttrString
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
237 # define PyEval_GetLocals py3_PyEval_GetLocals
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
253 # define _Py_FalseStruct (*py3__Py_FalseStruct)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
2696da84d370 updated for version 7.3.688
Bram Moolenaar <bram@vim.org>
parents: 3828
diff changeset
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
2696da84d370 updated for version 7.3.688
Bram Moolenaar <bram@vim.org>
parents: 3828
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
274 # undef PyUnicode_AsEncodedString
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
278 # undef PyBytes_AsString
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
283 # undef PyBytes_FromString
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
290 # define PyFloat_FromDouble py3_PyFloat_FromDouble
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
317 # define _PyObject_GC_New py3__PyObject_GC_New
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
318 # define PyObject_GC_Del py3_PyObject_GC_Del
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
333 # undef PyUnicode_Decode
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
334 # define PyUnicode_Decode py3_PyUnicode_Decode
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
335 # define PyType_IsSubtype py3_PyType_IsSubtype
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
336 # define PyCapsule_New py3_PyCapsule_New
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
368 static int (*py3_PySequence_Check)(PyObject *);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
369 static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
372 static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
373 static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
382 static int (*py3_PySlice_GetIndicesEx)(PySliceObject_T *r, Py_ssize_t length,
5608
ec02e1474bc2 updated for version 7.4.151
Bram Moolenaar <bram@vim.org>
parents: 5419
diff changeset
383 Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
ec02e1474bc2 updated for version 7.4.151
Bram Moolenaar <bram@vim.org>
parents: 5419
diff changeset
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
d4816e7c3328 updated for version 7.3.950
Bram Moolenaar <bram@vim.org>
parents: 4401
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
46ca8fcee525 updated for version 7.4.060
Bram Moolenaar <bram@vim.org>
parents: 5164
diff changeset
399 static int (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
4417
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
420 static PyObject* (*py3_PyIter_Next)(PyObject *);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
a6f0544df95e updated for version 7.3.948
Bram Moolenaar <bram@vim.org>
parents: 4397
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
441 static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
6b1f3fc893cd updated for version 7.3.825
Bram Moolenaar <bram@vim.org>
parents: 4109
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
461 static PyObject* py3__Py_FalseStruct;
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
489 static PyObject* (*py3_PyFloat_FromDouble)(double num);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
503 static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
504 static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
520 static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *);
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
521 static void(*py3_PyObject_GC_Del)(void *);
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
522 static void(*py3_PyObject_GC_UnTrack)(void *);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
9f3da1dea7c0 updated for version 7.3.907
Bram Moolenaar <bram@vim.org>
parents: 4145
diff changeset
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
907b1f035ee7 updated for version 7.3.951
Bram Moolenaar <bram@vim.org>
parents: 4403
diff changeset
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
9f3da1dea7c0 updated for version 7.3.907
Bram Moolenaar <bram@vim.org>
parents: 4145
diff changeset
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
907b1f035ee7 updated for version 7.3.951
Bram Moolenaar <bram@vim.org>
parents: 4403
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
5e909c379a1e updated for version 7.3.661
Bram Moolenaar <bram@vim.org>
parents: 3800
diff changeset
565 {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
5e909c379a1e updated for version 7.3.661
Bram Moolenaar <bram@vim.org>
parents: 3800
diff changeset
566 {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
567 {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
577 {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
578 {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
581 {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
d4816e7c3328 updated for version 7.3.950
Bram Moolenaar <bram@vim.org>
parents: 4401
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
602 {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString},
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
606 {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals},
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
616 {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
623 {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
a6f0544df95e updated for version 7.3.948
Bram Moolenaar <bram@vim.org>
parents: 4397
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
646 {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
6b1f3fc893cd updated for version 7.3.825
Bram Moolenaar <bram@vim.org>
parents: 4109
diff changeset
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
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
676 {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
3798
3958b0e672d6 updated for version 7.3.657
Bram Moolenaar <bram@vim.org>
parents: 3796
diff changeset
677 {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
686 {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
696 {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
3828
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
715 {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New},
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
716 {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del},
47e6dec5ce3c updated for version 7.3.998
Bram Moolenaar <bram@vim.org>
parents: 4494
diff changeset
717 {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack},
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
718 {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
719 {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
e4f3fa1a474e updated for version 7.3.288
Bram Moolenaar <bram@vim.org>
parents: 2955
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
973 if ((*py3_funcname_table[i].ptr = symbol_from_dll(hinstPy3,
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
974 py3_funcname_table[i].name)) == NULL)
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
975 {
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
976 close_dll(hinstPy3);
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
977 hinstPy3 = 0;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
980 return FAIL;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
2696da84d370 updated for version 7.3.688
Bram Moolenaar <bram@vim.org>
parents: 3828
diff changeset
990 "PyUnicode_AsEncodedString");
3910
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1005 "PyUnicodeUCS4_AsEncodedString");
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1006 }
3910
2a7b2943be22 updated for version 7.3.711
Bram Moolenaar <bram@vim.org>
parents: 3883
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1011 close_dll(hinstPy3);
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1012 hinstPy3 = 0;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
9f3da1dea7c0 updated for version 7.3.907
Bram Moolenaar <bram@vim.org>
parents: 4145
diff changeset
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
907b1f035ee7 updated for version 7.3.951
Bram Moolenaar <bram@vim.org>
parents: 4403
diff changeset
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
9f3da1dea7c0 updated for version 7.3.907
Bram Moolenaar <bram@vim.org>
parents: 4145
diff changeset
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
907b1f035ee7 updated for version 7.3.951
Bram Moolenaar <bram@vim.org>
parents: 4403
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1064 static int py3initialised = 0;
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1074
4377
8ec7323f417d updated for version 7.3.937
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1075 #define WIN_PYTHON_REF(win) win->w_python3_ref
8ec7323f417d updated for version 7.3.937
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1076 #define BUF_PYTHON_REF(buf) buf->b_python3_ref
4401
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1077 #define TAB_PYTHON_REF(tab) tab->tp_python3_ref
4377
8ec7323f417d updated for version 7.3.937
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1101 static PyObject *OutputGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1102 static int OutputSetattro(PyObject *, PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1105 static PyObject *TabPageGetattro(PyObject *, PyObject *);
4319
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1106 static PyObject *WindowGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1107 static int WindowSetattro(PyObject *, PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1108 static PyObject *RangeGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1109 static PyObject *CurrentGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1110 static int CurrentSetattro(PyObject *, PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1111 static PyObject *DictionaryGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1112 static int DictionarySetattro(PyObject *, PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1113 static PyObject *ListGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1114 static int ListSetattro(PyObject *, PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1115 static PyObject *FunctionGetattro(PyObject *, PyObject *);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1116
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1117 static struct PyModuleDef vimmodule;
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1121 /*
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1122 * Include the code shared with if_python.c
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1123 */
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1124 #include "if_py_both.h"
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
6e346800670c Add missing changes
Christian Brabandt <cb@256bit.org>
parents: 32936
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1167 #define GET_ATTR_STRING(name, nameobj) \
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1168 char *name = ""; \
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1171
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1172 #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
778ff2e87806 updated for version 7.3.731
Bram Moolenaar <bram@vim.org>
parents: 3921
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
0bbacb6a83bd updated for version 7.3.956
Bram Moolenaar <bram@vim.org>
parents: 4409
diff changeset
1204 PyGILState_Ensure();
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1205
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1334 if (!python3_enabled(TRUE))
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1337 goto fail;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
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
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1356 #endif
b803b2776880 updated for version 7.3.062
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1357
3863
2696da84d370 updated for version 7.3.688
Bram Moolenaar <bram@vim.org>
parents: 3828
diff changeset
1358 PyImport_AppendInittab("vim", Py3Init_vim);
2696da84d370 updated for version 7.3.688
Bram Moolenaar <bram@vim.org>
parents: 3828
diff changeset
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
6bbdb9c7a425 updated for version 7.3.212
Bram Moolenaar <bram@vim.org>
parents: 2716
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
6d517f6e5f0b updated for version 7.3.995
Bram Moolenaar <bram@vim.org>
parents: 4492
diff changeset
1392 if (PythonIO_Init_io())
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1393 goto fail;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1394
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1395 globals = PyModule_GetDict(PyImport_AddModule("__main__"));
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
3b2a771abb39 updated for version 7.3.808
Bram Moolenaar <bram@vim.org>
parents: 3951
diff changeset
1413 PyEval_SaveThread();
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1414
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1436 char *saved_locale;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1437 #endif
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1438 PyObject *cmdstr;
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1439 PyObject *cmdbytes;
4415
0bbacb6a83bd updated for version 7.3.956
Bram Moolenaar <bram@vim.org>
parents: 4409
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1446 goto theend;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1447
4486
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1448 init_range(arg);
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1460 saved_locale = (char *)vim_strsave((char_u *)saved_locale);
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
f909f4f0f38c updated for version 7.3.250
Bram Moolenaar <bram@vim.org>
parents: 2927
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1472 Py_XDECREF(cmdstr);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1473
4486
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1474 run(PyBytes_AsString(cmdbytes), arg, &pygilstate);
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1482 (void)setlocale(LC_NUMERIC, saved_locale);
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1510 (runner) run_cmd,
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1550 file = (char *)eap->arg;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1551 while (*file && p < buffer + (BUFFER_SIZE - 3))
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1552 {
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1553 if (*file == '\\' || *file == '\'')
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1554 *p++ = '\\';
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1555 *p++ = *file++;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1558 if (*file != '\0')
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1559 return;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1560 if (i==0)
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1561 {
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1562 strcpy(p,"','rb').read(),'");
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1563 p += 16;
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1564 }
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1565 else
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1566 {
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1567 strcpy(p,"','exec'))");
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1568 p += 10;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1576 (runner) run_cmd,
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
ef6b11bb183d updated for version 7.3.959
Bram Moolenaar <bram@vim.org>
parents: 4417
diff changeset
1580 void
ef6b11bb183d updated for version 7.3.959
Bram Moolenaar <bram@vim.org>
parents: 4417
diff changeset
1581 ex_py3do(exarg_T *eap)
4417
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1588 (runner)run_do,
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
1589 (void *)eap);
4417
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
1590 }
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4415
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1661 static PyMappingMethods BufferAsMapping = {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1673 PyObject *r;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1674
3826
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1680 if (CheckBuffer((BufferObject *)(self)))
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1681 return NULL;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1682
4319
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1683 r = BufferAttr((BufferObject *)(self), name);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1684 if (r || PyErr_Occurred())
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1685 return r;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1686 else
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1703 if (PyLong_Check(idx))
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1704 {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1705 long _idx = PyLong_AsLong(idx);
4488
89ea7593fc0c updated for version 7.3.992
Bram Moolenaar <bram@vim.org>
parents: 4486
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1709 {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1710 Py_ssize_t start, stop, step, slicelen;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1711
4387
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1712 if (CheckBuffer((BufferObject *) self))
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1713 return NULL;
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1714
5768
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
1715 if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
4389
736b8e18a3bc updated for version 7.3.943
Bram Moolenaar <bram@vim.org>
parents: 4387
diff changeset
1716 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1717 &start, &stop,
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1718 &step, &slicelen) < 0)
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1719 return NULL;
4488
89ea7593fc0c updated for version 7.3.992
Bram Moolenaar <bram@vim.org>
parents: 4486
diff changeset
1720 return BufferSlice((BufferObject *)(self), start, stop);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1721 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1722 else
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1730 BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1731 {
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1732 if (PyLong_Check(idx))
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1733 {
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1739 return RBAsItem((BufferObject *)(self), n, val, 1,
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1740 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1744 {
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1745 Py_ssize_t start, stop, step, slicelen;
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1746
4387
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1747 if (CheckBuffer((BufferObject *) self))
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1748 return -1;
358c10968c7f updated for version 7.3.942
Bram Moolenaar <bram@vim.org>
parents: 4377
diff changeset
1749
5768
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
1750 if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
4389
736b8e18a3bc updated for version 7.3.943
Bram Moolenaar <bram@vim.org>
parents: 4387
diff changeset
1751 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1752 &start, &stop,
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1753 &step, &slicelen) < 0)
2894
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1754 return -1;
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1755 return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1756 (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1757 NULL);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1758 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1759 else
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1762 return -1;
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1763 }
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
1764 }
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1779 static PyMappingMethods RangeAsMapping = {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1806 ((RangeObject *)(self))->start,
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1807 ((RangeObject *)(self))->end,
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1811 static Py_ssize_t
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1812 RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1813 {
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1814 return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1815 ((RangeObject *)(self))->start,
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1816 ((RangeObject *)(self))->end,
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1817 &((RangeObject *)(self))->end);
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1818 }
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1823 if (PyLong_Check(idx))
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1824 {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1825 long _idx = PyLong_AsLong(idx);
4488
89ea7593fc0c updated for version 7.3.992
Bram Moolenaar <bram@vim.org>
parents: 4486
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1829 {
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1830 Py_ssize_t start, stop, step, slicelen;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1831
5768
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
1832 if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1833 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1834 &start, &stop,
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1835 &step, &slicelen) < 0)
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1836 return NULL;
4488
89ea7593fc0c updated for version 7.3.992
Bram Moolenaar <bram@vim.org>
parents: 4486
diff changeset
1837 return RangeSlice((RangeObject *)(self), start, stop);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1838 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1839 else
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1847 RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1848 {
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1849 if (PyLong_Check(idx))
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1850 {
3070
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1851 long n = PyLong_AsLong(idx);
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1855 {
3070
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1856 Py_ssize_t start, stop, step, slicelen;
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1857
5768
3ee5808a293c updated for version 7.4.228
Bram Moolenaar <bram@vim.org>
parents: 5612
diff changeset
1858 if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
3070
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1859 ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1860 &start, &stop,
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1861 &step, &slicelen) < 0)
3070
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1862 return -1;
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1863 return RangeAsSlice(self, start, stop, val);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1864 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1865 else
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1868 return -1;
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1869 }
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
1870 }
880b7dd69331 updated for version 7.3.307
Bram Moolenaar <bram@vim.org>
parents: 3032
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1873
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1874 static PyObject *
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1875 TabPageGetattro(PyObject *self, PyObject *nameobj)
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1876 {
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1877 PyObject *r;
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1878
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1879 GET_ATTR_STRING(name, nameobj);
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1884 if (CheckTabPage((TabPageObject *)(self)))
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1885 return NULL;
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1886
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1887 r = TabPageAttr((TabPageObject *)(self), name);
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1888 if (r || PyErr_Occurred())
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1889 return r;
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1890 else
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1891 return PyObject_GenericGetAttr(self, nameobj);
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1892 }
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1899 PyObject *r;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1900
3826
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1906 if (CheckWindow((WindowObject *)(self)))
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
1907 return NULL;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1908
4319
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1909 r = WindowAttr((WindowObject *)(self), name);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1910 if (r || PyErr_Occurred())
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1911 return r;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
1912 else
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1925
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
1937 };
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
1970 GET_ATTR_STRING(name, nameobj);
b79f3c3a584c updated for version 7.3.909
Bram Moolenaar <bram@vim.org>
parents: 4315
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1975
3828
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1976 static PyObject *
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1977 DictionaryGetattro(PyObject *self, PyObject *nameobj)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1978 {
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1979 DictionaryObject *this = ((DictionaryObject *) (self));
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1980
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1981 GET_ATTR_STRING(name, nameobj);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1982
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1983 if (strcmp(name, "locked") == 0)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1984 return PyLong_FromLong(this->dict->dv_lock);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1985 else if (strcmp(name, "scope") == 0)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1986 return PyLong_FromLong(this->dict->dv_scope);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1987
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1988 return PyObject_GenericGetAttr(self, nameobj);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1989 }
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1990
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1991 static int
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1992 DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
1993 {
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1996 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
1999
3828
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2000 static PyObject *
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2001 ListGetattro(PyObject *self, PyObject *nameobj)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2002 {
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2003 GET_ATTR_STRING(name, nameobj);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2004
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2005 if (strcmp(name, "locked") == 0)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2006 return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2007
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2008 return PyObject_GenericGetAttr(self, nameobj);
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2009 }
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2010
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2011 static int
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2012 ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
2013 {
fd6ef931aa77 updated for version 7.3.672
Bram Moolenaar <bram@vim.org>
parents: 3826
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2016 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2019
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2020 static PyObject *
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2021 FunctionGetattro(PyObject *self, PyObject *nameobj)
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2022 {
8889
8755d57debaa commit https://github.com/vim/vim/commit/8110a091bc749d8748a20807a724a3af3ca6d509
Christian Brabandt <cb@256bit.org>
parents: 8538
diff changeset
2023 PyObject *r;
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2024 FunctionObject *this = (FunctionObject *)(self);
3826
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
2025
530f5a903031 updated for version 7.3.671
Bram Moolenaar <bram@vim.org>
parents: 3806
diff changeset
2026 GET_ATTR_STRING(name, nameobj);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2033 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
2056
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
2057 void
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
2058 python3_tabpage_free(tabpage_T *tab)
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
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
cfd76908da25 updated for version 7.3.949
Bram Moolenaar <bram@vim.org>
parents: 4399
diff changeset
2065 }
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
2066
3951
778ff2e87806 updated for version 7.3.731
Bram Moolenaar <bram@vim.org>
parents: 3921
diff changeset
2067 static PyObject *
778ff2e87806 updated for version 7.3.731
Bram Moolenaar <bram@vim.org>
parents: 3921
diff changeset
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
6d517f6e5f0b updated for version 7.3.995
Bram Moolenaar <bram@vim.org>
parents: 4492
diff changeset
2073 if (init_types())
6d517f6e5f0b updated for version 7.3.995
Bram Moolenaar <bram@vim.org>
parents: 4492
diff changeset
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
fe9c7da98b5e updated for version 7.3.220
Bram Moolenaar <bram@vim.org>
parents: 2877
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2111 PyErr_NoMemory();
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2117 if (*str == '\n')
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2118 *p = '\0';
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2119 else
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2120 *p = *str;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2121
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2122 ++p;
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2135 {
4486
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
2138 (runner) run_eval,
8fe768bc1234 updated for version 7.3.991
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2144 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2145 }
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2146
6565
38add5a3d617 updated for version 7.4.609
Bram Moolenaar <bram@vim.org>
parents: 5768
diff changeset
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
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
2149 {
6569
7fa1a7359a56 updated for version 7.4.611
Bram Moolenaar <bram@vim.org>
parents: 6565
diff changeset
2150 return set_ref_in_py(copyID);
3618
c052f3b79b99 updated for version 7.3.569
Bram Moolenaar <bram@vim.org>
parents: 3310
diff changeset
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 }