Mercurial > vim
annotate src/if_perl.xs @ 32591:92b93fe443e9 v9.0.1627
patch 9.0.1627: no generic mechanism to test syntax plugins
Commit: https://github.com/vim/vim/commit/46acad7284cba7842b5e505fa3d07e99806d246f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jun 11 19:04:18 2023 +0100
patch 9.0.1627: no generic mechanism to test syntax plugins
Problem: No generic mechanism to test syntax plugins.
Solution: Add a syntax plugin test mechanism, using screendumps. Add a
simple test for "c".
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 11 Jun 2023 20:15:06 +0200 |
parents | d8e7d725a666 |
children | d83068c95ba0 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
7 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 */ | |
8 /* | |
9 * if_perl.xs: Main code for Perl interface support. | |
10 * Mostly written by Sven Verdoolaege. | |
11 */ | |
12 | |
13 #define _memory_h /* avoid memset redeclaration */ | |
14 #define IN_PERL_FILE /* don't include if_perl.pro from proto.h */ | |
15 | |
5261
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
16 /* |
5537 | 17 * Currently 32-bit version of ActivePerl is built with VC6 (or MinGW since |
18 * ActivePerl 5.18). | |
5261
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
19 * (http://community.activestate.com/faq/windows-compilers-perl-modules) |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
20 * It means that time_t should be 32-bit. However the default size of |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
21 * time_t is 64-bit since VC8. So we have to define _USE_32BIT_TIME_T. |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
22 */ |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
23 #if defined(WIN32) && !defined(_WIN64) |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
24 # define _USE_32BIT_TIME_T |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
25 #endif |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
26 |
5537 | 27 /* |
28 * Prevent including winsock.h. perl.h tries to detect whether winsock.h is | |
29 * already included before including winsock2.h, because winsock2.h isn't | |
30 * compatible with winsock.h. However the detection doesn't work with some | |
31 * versions of MinGW. If WIN32_LEAN_AND_MEAN is defined, windows.h will not | |
32 * include winsock.h. | |
33 */ | |
34 #ifdef WIN32 | |
35 # define WIN32_LEAN_AND_MEAN | |
36 #endif | |
37 | |
7 | 38 #include "vim.h" |
39 | |
5558 | 40 /* Work around for perl-5.18. |
41 * Don't include "perl\lib\CORE\inline.h" for now, | |
42 * include it after Perl_sv_free2 is defined. */ | |
43 #ifdef DYNAMIC_PERL | |
44 # define PERL_NO_INLINE_FUNCTIONS | |
45 #endif | |
46 | |
5560 | 47 #ifdef _MSC_VER |
22762
5608a4144188
patch 8.2.1929: MS-Windows: problem loading Perl 5.32
Bram Moolenaar <Bram@vim.org>
parents:
22212
diff
changeset
|
48 // Work around for using MSVC and ActivePerl 5.18. |
5560 | 49 # define __inline__ __inline |
19067
d95296021f6e
patch 8.2.0094: MS-Windows: cannot build with Strawberry Perl 5.30
Bram Moolenaar <Bram@vim.org>
parents:
15945
diff
changeset
|
50 // Work around for using MSVC and Strawberry Perl 5.30. |
d95296021f6e
patch 8.2.0094: MS-Windows: cannot build with Strawberry Perl 5.30
Bram Moolenaar <Bram@vim.org>
parents:
15945
diff
changeset
|
51 # define __builtin_expect(expr, val) (expr) |
22762
5608a4144188
patch 8.2.1929: MS-Windows: problem loading Perl 5.32
Bram Moolenaar <Bram@vim.org>
parents:
22212
diff
changeset
|
52 // Work around for using MSVC and Strawberry Perl 5.32. |
5608a4144188
patch 8.2.1929: MS-Windows: problem loading Perl 5.32
Bram Moolenaar <Bram@vim.org>
parents:
22212
diff
changeset
|
53 # define NO_THREAD_SAFE_LOCALE |
5560 | 54 #endif |
55 | |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
56 #ifdef __GNUC__ |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
57 # pragma GCC diagnostic push |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
58 # pragma GCC diagnostic ignored "-Wunused-variable" |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
59 #endif |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
60 |
5261
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
61 #include <EXTERN.h> |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
62 #include <perl.h> |
b882d4b14e00
updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents:
4905
diff
changeset
|
63 #include <XSUB.h> |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
64 #if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
65 # include <perliol.h> |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
66 #endif |
7 | 67 |
9171
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
68 /* Workaround for perl < 5.8.7 */ |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
69 #ifndef PERLIO_FUNCS_DECL |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
70 # ifdef PERLIO_FUNCS_CONST |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
71 # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
72 # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
73 # else |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
74 # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
75 # define PERLIO_FUNCS_CAST(funcs) (funcs) |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
76 # endif |
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
77 #endif |
9177
ee0564e3257d
commit https://github.com/vim/vim/commit/c4bc0e6542185b659d2a165b635f9561549071ea
Christian Brabandt <cb@256bit.org>
parents:
9171
diff
changeset
|
78 #ifndef SvREFCNT_inc_void_NN |
ee0564e3257d
commit https://github.com/vim/vim/commit/c4bc0e6542185b659d2a165b635f9561549071ea
Christian Brabandt <cb@256bit.org>
parents:
9171
diff
changeset
|
79 # define SvREFCNT_inc_void_NN SvREFCNT_inc |
ee0564e3257d
commit https://github.com/vim/vim/commit/c4bc0e6542185b659d2a165b635f9561549071ea
Christian Brabandt <cb@256bit.org>
parents:
9171
diff
changeset
|
80 #endif |
9171
20e7b99c33d4
commit https://github.com/vim/vim/commit/cf190c6f017563de1bdbf854b3376522b8b2748f
Christian Brabandt <cb@256bit.org>
parents:
9159
diff
changeset
|
81 |
7 | 82 /* |
83 * Work around clashes between Perl and Vim namespace. proto.h doesn't | |
84 * include if_perl.pro and perlsfio.pro when IN_PERL_FILE is defined, because | |
85 * we need the CV typedef. proto.h can't be moved to after including | |
86 * if_perl.h, because we get all sorts of name clashes then. | |
87 */ | |
88 #ifndef PROTO | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
89 # ifndef __MINGW32__ |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
90 # include "proto/if_perl.pro" |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
91 # include "proto/if_perlsfio.pro" |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
92 # endif |
7 | 93 #endif |
94 | |
14816
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
95 // Perl compatibility stuff. This should ensure compatibility with older |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
96 // versions of Perl. |
7 | 97 #ifndef PERL_VERSION |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
98 # include <patchlevel.h> |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
99 # define PERL_REVISION 5 |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
100 # define PERL_VERSION PATCHLEVEL |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
101 # define PERL_SUBVERSION SUBVERSION |
7 | 102 #endif |
103 | |
14816
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
104 |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
105 // Work around for ActivePerl 5.20.3+: Avoid generating (g)vim.lib. |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
106 #if defined(ACTIVEPERL_VERSION) && (ACTIVEPERL_VERSION >= 2003) \ |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15748
diff
changeset
|
107 && defined(MSWIN) && defined(USE_DYNAMIC_LOADING) |
14816
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
108 # undef XS_EXTERNAL |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
109 # define XS_EXTERNAL(name) XSPROTO(name) |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
110 #endif |
d823dfb273c6
patch 8.1.0420: generating vim.lib when using ActivePerl 5.20.3 or later
Christian Brabandt <cb@256bit.org>
parents:
14441
diff
changeset
|
111 |
1387 | 112 /* |
113 * Quoting Jan Dubois of Active State: | |
114 * ActivePerl build 822 still identifies itself as 5.8.8 but already | |
115 * contains many of the changes from the upcoming Perl 5.8.9 release. | |
116 * | |
117 * The changes include addition of two symbols (Perl_sv_2iv_flags, | |
118 * Perl_newXS_flags) not present in earlier releases. | |
119 * | |
1395 | 120 * Jan Dubois suggested the following guarding scheme. |
121 * | |
122 * Active State defined ACTIVEPERL_VERSION as a string in versions before | |
123 * 5.8.8; and so the comparison to 822 below needs to be guarded. | |
1387 | 124 */ |
1395 | 125 #if (PERL_REVISION == 5) && (PERL_VERSION == 8) && (PERL_SUBVERSION >= 8) |
126 # if (ACTIVEPERL_VERSION >= 822) || (PERL_SUBVERSION >= 9) | |
127 # define PERL589_OR_LATER | |
128 # endif | |
1387 | 129 #endif |
130 #if (PERL_REVISION == 5) && (PERL_VERSION >= 9) | |
131 # define PERL589_OR_LATER | |
132 #endif | |
133 | |
2096
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
134 #if (PERL_REVISION == 5) && ((PERL_VERSION > 10) || \ |
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
135 (PERL_VERSION == 10) && (PERL_SUBVERSION >= 1)) |
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
136 # define PERL5101_OR_LATER |
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
137 #endif |
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
138 |
7 | 139 #ifndef pTHX |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
140 # define pTHX void |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
141 # define pTHX_ |
7 | 142 #endif |
143 | |
144 #ifndef EXTERN_C | |
145 # define EXTERN_C | |
146 #endif | |
147 | |
30990
830f51eeca95
patch 9.0.0830: compiling with Perl on Mac 12 fails
Bram Moolenaar <Bram@vim.org>
parents:
30598
diff
changeset
|
148 // Suppress Infinite warnings when compiling XS modules under macOS 12 Monterey. |
830f51eeca95
patch 9.0.0830: compiling with Perl on Mac 12 fails
Bram Moolenaar <Bram@vim.org>
parents:
30598
diff
changeset
|
149 #if defined(__clang__) && defined(__clang_major__) && __clang_major__ > 11 |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
30990
diff
changeset
|
150 # pragma clang diagnostic ignored "-Wcompound-token-split-by-macro" |
30990
830f51eeca95
patch 9.0.0830: compiling with Perl on Mac 12 fails
Bram Moolenaar <Bram@vim.org>
parents:
30598
diff
changeset
|
151 #endif |
830f51eeca95
patch 9.0.0830: compiling with Perl on Mac 12 fails
Bram Moolenaar <Bram@vim.org>
parents:
30598
diff
changeset
|
152 |
7 | 153 /* Compatibility hacks over */ |
154 | |
155 static PerlInterpreter *perl_interp = NULL; | |
7807
1a5d34492798
commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents:
7651
diff
changeset
|
156 static void xs_init(pTHX); |
1a5d34492798
commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents:
7651
diff
changeset
|
157 static void VIM_init(void); |
1a5d34492798
commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents:
7651
diff
changeset
|
158 EXTERN_C void boot_DynaLoader(pTHX_ CV*); |
7 | 159 |
160 /* | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
161 * For dynamic linked perl. |
7 | 162 */ |
163 #if defined(DYNAMIC_PERL) || defined(PROTO) | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
164 |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
165 # ifndef DYNAMIC_PERL /* just generating prototypes */ |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15748
diff
changeset
|
166 # ifdef MSWIN |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
167 typedef int HANDLE; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
168 # endif |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
169 typedef int XSINIT_t; |
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
170 typedef int XSUBADDR_t; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
171 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
172 # ifndef USE_ITHREADS |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
173 typedef int perl_key; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
174 # endif |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
175 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15748
diff
changeset
|
176 # ifndef MSWIN |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
177 # include <dlfcn.h> |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
178 # define HANDLE void* |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
179 # define PERL_PROC void* |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
180 # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
181 # define symbol_from_dll dlsym |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
182 # define close_dll dlclose |
25342
c4298ed56ffa
patch 8.2.3208: dynamic library load error does not mention why it failed
Bram Moolenaar <Bram@vim.org>
parents:
24705
diff
changeset
|
183 # define load_dll_error dlerror |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
184 # else |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
185 # define PERL_PROC FARPROC |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
186 # define load_dll vimLoadLib |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
187 # define symbol_from_dll GetProcAddress |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
188 # define close_dll FreeLibrary |
25342
c4298ed56ffa
patch 8.2.3208: dynamic library load error does not mention why it failed
Bram Moolenaar <Bram@vim.org>
parents:
24705
diff
changeset
|
189 # define load_dll_error GetWin32Error |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
190 # endif |
7 | 191 /* |
192 * Wrapper defines | |
193 */ | |
194 # define perl_alloc dll_perl_alloc | |
195 # define perl_construct dll_perl_construct | |
196 # define perl_parse dll_perl_parse | |
197 # define perl_run dll_perl_run | |
198 # define perl_destruct dll_perl_destruct | |
199 # define perl_free dll_perl_free | |
200 # define Perl_get_context dll_Perl_get_context | |
201 # define Perl_croak dll_Perl_croak | |
2096
6510d834609f
updated for version 7.2.380
Bram Moolenaar <bram@zimbu.org>
parents:
2079
diff
changeset
|
202 # ifdef PERL5101_OR_LATER |
2079
5abd3e3c0085
updated for version 7.2.363
Bram Moolenaar <bram@zimbu.org>
parents:
1990
diff
changeset
|
203 # define Perl_croak_xs_usage dll_Perl_croak_xs_usage |
5abd3e3c0085
updated for version 7.2.363
Bram Moolenaar <bram@zimbu.org>
parents:
1990
diff
changeset
|
204 # endif |
7 | 205 # ifndef PROTO |
19971
a042d2a3b13d
patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
206 # ifdef PERL_IMPLICIT_CONTEXT |
a042d2a3b13d
patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
207 # define Perl_croak_nocontext dll_Perl_croak_nocontext |
a042d2a3b13d
patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
208 # endif |
7 | 209 # define Perl_call_argv dll_Perl_call_argv |
210 # define Perl_call_pv dll_Perl_call_pv | |
211 # define Perl_eval_sv dll_Perl_eval_sv | |
212 # define Perl_get_sv dll_Perl_get_sv | |
213 # define Perl_eval_pv dll_Perl_eval_pv | |
214 # define Perl_call_method dll_Perl_call_method | |
215 # endif | |
216 # define Perl_dowantarray dll_Perl_dowantarray | |
217 # define Perl_free_tmps dll_Perl_free_tmps | |
218 # define Perl_gv_stashpv dll_Perl_gv_stashpv | |
219 # define Perl_markstack_grow dll_Perl_markstack_grow | |
220 # define Perl_mg_find dll_Perl_mg_find | |
14377
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
221 # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
222 # define Perl_mg_get dll_Perl_mg_get |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
223 # endif |
7 | 224 # define Perl_newXS dll_Perl_newXS |
225 # define Perl_newSV dll_Perl_newSV | |
226 # define Perl_newSViv dll_Perl_newSViv | |
227 # define Perl_newSVpv dll_Perl_newSVpv | |
228 # define Perl_pop_scope dll_Perl_pop_scope | |
229 # define Perl_push_scope dll_Perl_push_scope | |
230 # define Perl_save_int dll_Perl_save_int | |
5960 | 231 # if (PERL_REVISION == 5) && (PERL_VERSION >= 20) |
232 # define Perl_save_strlen dll_Perl_save_strlen | |
233 # endif | |
7 | 234 # define Perl_stack_grow dll_Perl_stack_grow |
235 # define Perl_set_context dll_Perl_set_context | |
3050 | 236 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
6872 | 237 # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags |
238 # if (PERL_REVISION == 5) && (PERL_VERSION < 22) | |
239 # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck | |
240 # endif | |
3050 | 241 # else |
6872 | 242 # define Perl_sv_2bool dll_Perl_sv_2bool |
3050 | 243 # endif |
7 | 244 # define Perl_sv_2iv dll_Perl_sv_2iv |
245 # define Perl_sv_2mortal dll_Perl_sv_2mortal | |
246 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) | |
247 # define Perl_sv_2pv_flags dll_Perl_sv_2pv_flags | |
248 # define Perl_sv_2pv_nolen dll_Perl_sv_2pv_nolen | |
249 # else | |
250 # define Perl_sv_2pv dll_Perl_sv_2pv | |
251 # endif | |
22212
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
252 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
253 # define Perl_sv_2pvbyte_flags dll_Perl_sv_2pvbyte_flags |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
254 # endif |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
255 # define Perl_sv_2pvbyte dll_Perl_sv_2pvbyte |
7 | 256 # define Perl_sv_bless dll_Perl_sv_bless |
257 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) | |
258 # define Perl_sv_catpvn_flags dll_Perl_sv_catpvn_flags | |
259 # else | |
260 # define Perl_sv_catpvn dll_Perl_sv_catpvn | |
261 # endif | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
262 # ifdef PERL589_OR_LATER |
1387 | 263 # define Perl_sv_2iv_flags dll_Perl_sv_2iv_flags |
264 # define Perl_newXS_flags dll_Perl_newXS_flags | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
265 # endif |
7 | 266 # define Perl_sv_free dll_Perl_sv_free |
1711 | 267 # if (PERL_REVISION == 5) && (PERL_VERSION >= 10) |
268 # define Perl_sv_free2 dll_Perl_sv_free2 | |
269 # endif | |
7 | 270 # define Perl_sv_isa dll_Perl_sv_isa |
271 # define Perl_sv_magic dll_Perl_sv_magic | |
272 # define Perl_sv_setiv dll_Perl_sv_setiv | |
273 # define Perl_sv_setpv dll_Perl_sv_setpv | |
274 # define Perl_sv_setpvn dll_Perl_sv_setpvn | |
275 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) | |
276 # define Perl_sv_setsv_flags dll_Perl_sv_setsv_flags | |
277 # else | |
278 # define Perl_sv_setsv dll_Perl_sv_setsv | |
279 # endif | |
280 # define Perl_sv_upgrade dll_Perl_sv_upgrade | |
281 # define Perl_Tstack_sp_ptr dll_Perl_Tstack_sp_ptr | |
282 # define Perl_Top_ptr dll_Perl_Top_ptr | |
283 # define Perl_Tstack_base_ptr dll_Perl_Tstack_base_ptr | |
284 # define Perl_Tstack_max_ptr dll_Perl_Tstack_max_ptr | |
285 # define Perl_Ttmps_ix_ptr dll_Perl_Ttmps_ix_ptr | |
286 # define Perl_Ttmps_floor_ptr dll_Perl_Ttmps_floor_ptr | |
287 # define Perl_Tmarkstack_ptr_ptr dll_Perl_Tmarkstack_ptr_ptr | |
288 # define Perl_Tmarkstack_max_ptr dll_Perl_Tmarkstack_max_ptr | |
289 # define Perl_TSv_ptr dll_Perl_TSv_ptr | |
290 # define Perl_TXpv_ptr dll_Perl_TXpv_ptr | |
291 # define Perl_Tna_ptr dll_Perl_Tna_ptr | |
292 # define Perl_Idefgv_ptr dll_Perl_Idefgv_ptr | |
293 # define Perl_Ierrgv_ptr dll_Perl_Ierrgv_ptr | |
294 # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr | |
295 # define boot_DynaLoader dll_boot_DynaLoader | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
296 # define Perl_Gthr_key_ptr dll_Perl_Gthr_key_ptr |
7 | 297 |
1765 | 298 # define Perl_sys_init dll_Perl_sys_init |
1668 | 299 # define Perl_sys_term dll_Perl_sys_term |
300 # define Perl_ISv_ptr dll_Perl_ISv_ptr | |
301 # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr | |
302 # define Perl_Istack_base_ptr dll_Perl_Istack_base_ptr | |
303 # define Perl_Itmps_ix_ptr dll_Perl_Itmps_ix_ptr | |
304 # define Perl_Itmps_floor_ptr dll_Perl_Itmps_floor_ptr | |
305 # define Perl_IXpv_ptr dll_Perl_IXpv_ptr | |
306 # define Perl_Ina_ptr dll_Perl_Ina_ptr | |
307 # define Perl_Imarkstack_ptr_ptr dll_Perl_Imarkstack_ptr_ptr | |
308 # define Perl_Imarkstack_max_ptr dll_Perl_Imarkstack_max_ptr | |
309 # define Perl_Istack_sp_ptr dll_Perl_Istack_sp_ptr | |
310 # define Perl_Iop_ptr dll_Perl_Iop_ptr | |
311 # define Perl_call_list dll_Perl_call_list | |
312 # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr | |
313 # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr | |
6872 | 314 # if (PERL_REVISION == 5) && (PERL_VERSION >= 22) |
315 # define Perl_xs_handshake dll_Perl_xs_handshake | |
316 # define Perl_xs_boot_epilog dll_Perl_xs_boot_epilog | |
317 # endif | |
3820 | 318 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
5706 | 319 # ifdef USE_ITHREADS |
320 # define PL_thr_key *dll_PL_thr_key | |
321 # endif | |
3820 | 322 # endif |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
323 # define Perl_hv_iternext_flags dll_Perl_hv_iternext_flags |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
324 # define Perl_hv_iterinit dll_Perl_hv_iterinit |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
325 # define Perl_hv_iterkey dll_Perl_hv_iterkey |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
326 # define Perl_hv_iterval dll_Perl_hv_iterval |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
327 # define Perl_av_fetch dll_Perl_av_fetch |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
328 # define Perl_av_len dll_Perl_av_len |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
329 # define Perl_sv_2nv_flags dll_Perl_sv_2nv_flags |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
330 # if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
331 # define PerlIOBase_pushed dll_PerlIOBase_pushed |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
332 # define PerlIO_define_layer dll_PerlIO_define_layer |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
333 # endif |
9129
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
334 # if (PERL_REVISION == 5) && (PERL_VERSION >= 24) |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
335 # define Perl_savetmps dll_Perl_savetmps |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
336 # endif |
1668 | 337 |
7 | 338 /* |
339 * Declare HANDLE for perl.dll and function pointers. | |
340 */ | |
341 static HANDLE hPerlLib = NULL; | |
342 | |
343 static PerlInterpreter* (*perl_alloc)(); | |
344 static void (*perl_construct)(PerlInterpreter*); | |
345 static void (*perl_destruct)(PerlInterpreter*); | |
346 static void (*perl_free)(PerlInterpreter*); | |
347 static int (*perl_run)(PerlInterpreter*); | |
348 static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**); | |
349 static void* (*Perl_get_context)(void); | |
8810
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
350 static void (*Perl_croak)(pTHX_ const char*, ...) __attribute__noreturn__; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
351 # ifdef PERL5101_OR_LATER |
5537 | 352 /* Perl-5.18 has a different Perl_croak_xs_usage signature. */ |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
353 # if (PERL_REVISION == 5) && (PERL_VERSION >= 18) |
8810
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
354 static void (*Perl_croak_xs_usage)(const CV *const, const char *const params) |
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
355 __attribute__noreturn__; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
356 # else |
8810
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
357 static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params) |
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
358 __attribute__noreturn__; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
359 # endif |
5537 | 360 # endif |
19971
a042d2a3b13d
patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
361 # ifdef PERL_IMPLICIT_CONTEXT |
8810
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
362 static void (*Perl_croak_nocontext)(const char*, ...) __attribute__noreturn__; |
19971
a042d2a3b13d
patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
19846
diff
changeset
|
363 # endif |
7 | 364 static I32 (*Perl_dowantarray)(pTHX); |
365 static void (*Perl_free_tmps)(pTHX); | |
366 static HV* (*Perl_gv_stashpv)(pTHX_ const char*, I32); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
367 # if (PERL_REVISION == 5) && (PERL_VERSION >= 22) |
6872 | 368 static I32* (*Perl_markstack_grow)(pTHX); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
369 # else |
7 | 370 static void (*Perl_markstack_grow)(pTHX); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
371 # endif |
7 | 372 static MAGIC* (*Perl_mg_find)(pTHX_ SV*, int); |
14377
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
373 # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
374 static int (*Perl_mg_get)(pTHX_ SV*); |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
375 # endif |
7 | 376 static CV* (*Perl_newXS)(pTHX_ char*, XSUBADDR_t, char*); |
377 static SV* (*Perl_newSV)(pTHX_ STRLEN); | |
378 static SV* (*Perl_newSViv)(pTHX_ IV); | |
379 static SV* (*Perl_newSVpv)(pTHX_ const char*, STRLEN); | |
380 static I32 (*Perl_call_argv)(pTHX_ const char*, I32, char**); | |
381 static I32 (*Perl_call_pv)(pTHX_ const char*, I32); | |
382 static I32 (*Perl_eval_sv)(pTHX_ SV*, I32); | |
383 static SV* (*Perl_get_sv)(pTHX_ const char*, I32); | |
384 static SV* (*Perl_eval_pv)(pTHX_ const char*, I32); | |
385 static SV* (*Perl_call_method)(pTHX_ const char*, I32); | |
386 static void (*Perl_pop_scope)(pTHX); | |
387 static void (*Perl_push_scope)(pTHX); | |
388 static void (*Perl_save_int)(pTHX_ int*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
389 # if (PERL_REVISION == 5) && (PERL_VERSION >= 20) |
5960 | 390 static void (*Perl_save_strlen)(pTHX_ STRLEN* ptr); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
391 # endif |
7 | 392 static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int); |
393 static SV** (*Perl_set_context)(void*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
394 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
3050 | 395 static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
396 # if (PERL_REVISION == 5) && (PERL_VERSION < 22) |
3050 | 397 static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
398 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
399 # else |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
400 static bool (*Perl_sv_2bool)(pTHX_ SV*); |
6872 | 401 # endif |
7 | 402 static IV (*Perl_sv_2iv)(pTHX_ SV*); |
403 static SV* (*Perl_sv_2mortal)(pTHX_ SV*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
404 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 405 static char* (*Perl_sv_2pv_flags)(pTHX_ SV*, STRLEN*, I32); |
406 static char* (*Perl_sv_2pv_nolen)(pTHX_ SV*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
407 # else |
7 | 408 static char* (*Perl_sv_2pv)(pTHX_ SV*, STRLEN*); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
409 # endif |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
410 static char* (*Perl_sv_2pvbyte)(pTHX_ SV*, STRLEN*); |
22212
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
411 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
412 static char* (*Perl_sv_2pvbyte_flags)(pTHX_ SV*, STRLEN*, I32); |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
413 # endif |
7 | 414 static SV* (*Perl_sv_bless)(pTHX_ SV*, HV*); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
415 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 416 static void (*Perl_sv_catpvn_flags)(pTHX_ SV* , const char*, STRLEN, I32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
417 # else |
7 | 418 static void (*Perl_sv_catpvn)(pTHX_ SV*, const char*, STRLEN); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
419 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
420 # ifdef PERL589_OR_LATER |
1387 | 421 static IV (*Perl_sv_2iv_flags)(pTHX_ SV* sv, I32 flags); |
422 static CV * (*Perl_newXS_flags)(pTHX_ const char *name, XSUBADDR_t subaddr, const char *const filename, const char *const proto, U32 flags); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
423 # endif |
7 | 424 static void (*Perl_sv_free)(pTHX_ SV*); |
425 static int (*Perl_sv_isa)(pTHX_ SV*, const char*); | |
426 static void (*Perl_sv_magic)(pTHX_ SV*, SV*, int, const char*, I32); | |
427 static void (*Perl_sv_setiv)(pTHX_ SV*, IV); | |
428 static void (*Perl_sv_setpv)(pTHX_ SV*, const char*); | |
429 static void (*Perl_sv_setpvn)(pTHX_ SV*, const char*, STRLEN); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
430 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 431 static void (*Perl_sv_setsv_flags)(pTHX_ SV*, SV*, I32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
432 # else |
7 | 433 static void (*Perl_sv_setsv)(pTHX_ SV*, SV*); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
434 # endif |
7 | 435 static bool (*Perl_sv_upgrade)(pTHX_ SV*, U32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
436 # if (PERL_REVISION == 5) && (PERL_VERSION < 10) |
7 | 437 static SV*** (*Perl_Tstack_sp_ptr)(register PerlInterpreter*); |
438 static OP** (*Perl_Top_ptr)(register PerlInterpreter*); | |
439 static SV*** (*Perl_Tstack_base_ptr)(register PerlInterpreter*); | |
440 static SV*** (*Perl_Tstack_max_ptr)(register PerlInterpreter*); | |
441 static I32* (*Perl_Ttmps_ix_ptr)(register PerlInterpreter*); | |
442 static I32* (*Perl_Ttmps_floor_ptr)(register PerlInterpreter*); | |
443 static I32** (*Perl_Tmarkstack_ptr_ptr)(register PerlInterpreter*); | |
444 static I32** (*Perl_Tmarkstack_max_ptr)(register PerlInterpreter*); | |
445 static SV** (*Perl_TSv_ptr)(register PerlInterpreter*); | |
446 static XPV** (*Perl_TXpv_ptr)(register PerlInterpreter*); | |
447 static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
448 # else |
5537 | 449 /* Perl-5.18 has a different Perl_sv_free2 signature. */ |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
450 # if (PERL_REVISION == 5) && (PERL_VERSION >= 18) |
5537 | 451 static void (*Perl_sv_free2)(pTHX_ SV*, const U32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
452 # else |
1711 | 453 static void (*Perl_sv_free2)(pTHX_ SV*); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
454 # endif |
1765 | 455 static void (*Perl_sys_init)(int* argc, char*** argv); |
1668 | 456 static void (*Perl_sys_term)(void); |
3818 | 457 static void (*Perl_call_list)(pTHX_ I32, AV*); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
458 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
459 # else |
1668 | 460 static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); |
461 static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); | |
462 static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*); | |
463 static XPV** (*Perl_IXpv_ptr)(register PerlInterpreter*); | |
464 static I32* (*Perl_Itmps_ix_ptr)(register PerlInterpreter*); | |
465 static I32* (*Perl_Itmps_floor_ptr)(register PerlInterpreter*); | |
466 static STRLEN* (*Perl_Ina_ptr)(register PerlInterpreter*); | |
467 static I32** (*Perl_Imarkstack_ptr_ptr)(register PerlInterpreter*); | |
468 static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*); | |
469 static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*); | |
470 static OP** (*Perl_Iop_ptr)(register PerlInterpreter*); | |
471 static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*); | |
472 static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
473 # endif |
3818 | 474 # endif |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
475 # if (PERL_REVISION == 5) && (PERL_VERSION >= 22) |
6872 | 476 static I32 (*Perl_xs_handshake)(const U32, void *, const char *, ...); |
477 static void (*Perl_xs_boot_epilog)(pTHX_ const U32); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
478 # endif |
7 | 479 |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
480 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
481 # ifdef USE_ITHREADS |
3820 | 482 static perl_key* dll_PL_thr_key; |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
483 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
484 # else |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
485 static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*); |
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
486 static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*); |
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
487 static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*); |
3818 | 488 static perl_key* (*Perl_Gthr_key_ptr)_((pTHX)); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
489 # endif |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
490 static void (*boot_DynaLoader)_((pTHX_ CV*)); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
491 static HE * (*Perl_hv_iternext_flags)(pTHX_ HV *, I32); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
492 static I32 (*Perl_hv_iterinit)(pTHX_ HV *); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
493 static char * (*Perl_hv_iterkey)(pTHX_ HE *, I32 *); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
494 static SV * (*Perl_hv_iterval)(pTHX_ HV *, HE *); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
495 static SV** (*Perl_av_fetch)(pTHX_ AV *, SSize_t, I32); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
496 static SSize_t (*Perl_av_len)(pTHX_ AV *); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
497 static NV (*Perl_sv_2nv_flags)(pTHX_ SV *const, const I32); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
498 # if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
499 static IV (*PerlIOBase_pushed)(pTHX_ PerlIO *, const char *, SV *, PerlIO_funcs *); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
500 static void (*PerlIO_define_layer)(pTHX_ PerlIO_funcs *); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
501 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
502 # if (PERL_REVISION == 5) && (PERL_VERSION >= 24) |
9129
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
503 static void (*Perl_savetmps)(pTHX); |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
504 # endif |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
505 |
7 | 506 /* |
507 * Table of name to function pointer of perl. | |
508 */ | |
509 static struct { | |
510 char* name; | |
511 PERL_PROC* ptr; | |
512 } perl_funcname_table[] = { | |
513 {"perl_alloc", (PERL_PROC*)&perl_alloc}, | |
514 {"perl_construct", (PERL_PROC*)&perl_construct}, | |
515 {"perl_destruct", (PERL_PROC*)&perl_destruct}, | |
516 {"perl_free", (PERL_PROC*)&perl_free}, | |
517 {"perl_run", (PERL_PROC*)&perl_run}, | |
518 {"perl_parse", (PERL_PROC*)&perl_parse}, | |
519 {"Perl_get_context", (PERL_PROC*)&Perl_get_context}, | |
520 {"Perl_croak", (PERL_PROC*)&Perl_croak}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
521 # ifdef PERL5101_OR_LATER |
2079
5abd3e3c0085
updated for version 7.2.363
Bram Moolenaar <bram@zimbu.org>
parents:
1990
diff
changeset
|
522 {"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
523 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
524 # ifdef PERL_IMPLICIT_CONTEXT |
7 | 525 {"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
526 # endif |
7 | 527 {"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray}, |
528 {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps}, | |
529 {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv}, | |
530 {"Perl_markstack_grow", (PERL_PROC*)&Perl_markstack_grow}, | |
531 {"Perl_mg_find", (PERL_PROC*)&Perl_mg_find}, | |
14377
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
532 # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
533 {"Perl_mg_get", (PERL_PROC*)&Perl_mg_get}, |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
534 # endif |
7 | 535 {"Perl_newXS", (PERL_PROC*)&Perl_newXS}, |
536 {"Perl_newSV", (PERL_PROC*)&Perl_newSV}, | |
537 {"Perl_newSViv", (PERL_PROC*)&Perl_newSViv}, | |
538 {"Perl_newSVpv", (PERL_PROC*)&Perl_newSVpv}, | |
539 {"Perl_call_argv", (PERL_PROC*)&Perl_call_argv}, | |
540 {"Perl_call_pv", (PERL_PROC*)&Perl_call_pv}, | |
541 {"Perl_eval_sv", (PERL_PROC*)&Perl_eval_sv}, | |
542 {"Perl_get_sv", (PERL_PROC*)&Perl_get_sv}, | |
543 {"Perl_eval_pv", (PERL_PROC*)&Perl_eval_pv}, | |
544 {"Perl_call_method", (PERL_PROC*)&Perl_call_method}, | |
545 {"Perl_pop_scope", (PERL_PROC*)&Perl_pop_scope}, | |
546 {"Perl_push_scope", (PERL_PROC*)&Perl_push_scope}, | |
547 {"Perl_save_int", (PERL_PROC*)&Perl_save_int}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
548 # if (PERL_REVISION == 5) && (PERL_VERSION >= 20) |
5960 | 549 {"Perl_save_strlen", (PERL_PROC*)&Perl_save_strlen}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
550 # endif |
7 | 551 {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow}, |
552 {"Perl_set_context", (PERL_PROC*)&Perl_set_context}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
553 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
3050 | 554 {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
555 # if (PERL_REVISION == 5) && (PERL_VERSION < 22) |
3050 | 556 {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
557 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
558 # else |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
559 {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool}, |
6872 | 560 # endif |
7 | 561 {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv}, |
562 {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
563 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 564 {"Perl_sv_2pv_flags", (PERL_PROC*)&Perl_sv_2pv_flags}, |
565 {"Perl_sv_2pv_nolen", (PERL_PROC*)&Perl_sv_2pv_nolen}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
566 # else |
7 | 567 {"Perl_sv_2pv", (PERL_PROC*)&Perl_sv_2pv}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
568 # endif |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
569 {"Perl_sv_2pvbyte", (PERL_PROC*)&Perl_sv_2pvbyte}, |
22212
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
570 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
571 {"Perl_sv_2pvbyte_flags", (PERL_PROC*)&Perl_sv_2pvbyte_flags}, |
36af5cb8413c
patch 8.2.1655: cannot build with Strawberry Perl 5.32.0
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
572 # endif |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
573 # ifdef PERL589_OR_LATER |
1387 | 574 {"Perl_sv_2iv_flags", (PERL_PROC*)&Perl_sv_2iv_flags}, |
575 {"Perl_newXS_flags", (PERL_PROC*)&Perl_newXS_flags}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
576 # endif |
7 | 577 {"Perl_sv_bless", (PERL_PROC*)&Perl_sv_bless}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
578 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 579 {"Perl_sv_catpvn_flags", (PERL_PROC*)&Perl_sv_catpvn_flags}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
580 # else |
7 | 581 {"Perl_sv_catpvn", (PERL_PROC*)&Perl_sv_catpvn}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
582 # endif |
7 | 583 {"Perl_sv_free", (PERL_PROC*)&Perl_sv_free}, |
584 {"Perl_sv_isa", (PERL_PROC*)&Perl_sv_isa}, | |
585 {"Perl_sv_magic", (PERL_PROC*)&Perl_sv_magic}, | |
586 {"Perl_sv_setiv", (PERL_PROC*)&Perl_sv_setiv}, | |
587 {"Perl_sv_setpv", (PERL_PROC*)&Perl_sv_setpv}, | |
588 {"Perl_sv_setpvn", (PERL_PROC*)&Perl_sv_setpvn}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
589 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) |
7 | 590 {"Perl_sv_setsv_flags", (PERL_PROC*)&Perl_sv_setsv_flags}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
591 # else |
7 | 592 {"Perl_sv_setsv", (PERL_PROC*)&Perl_sv_setsv}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
593 # endif |
7 | 594 {"Perl_sv_upgrade", (PERL_PROC*)&Perl_sv_upgrade}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
595 # if (PERL_REVISION == 5) && (PERL_VERSION < 10) |
7 | 596 {"Perl_Tstack_sp_ptr", (PERL_PROC*)&Perl_Tstack_sp_ptr}, |
597 {"Perl_Top_ptr", (PERL_PROC*)&Perl_Top_ptr}, | |
598 {"Perl_Tstack_base_ptr", (PERL_PROC*)&Perl_Tstack_base_ptr}, | |
599 {"Perl_Tstack_max_ptr", (PERL_PROC*)&Perl_Tstack_max_ptr}, | |
600 {"Perl_Ttmps_ix_ptr", (PERL_PROC*)&Perl_Ttmps_ix_ptr}, | |
601 {"Perl_Ttmps_floor_ptr", (PERL_PROC*)&Perl_Ttmps_floor_ptr}, | |
602 {"Perl_Tmarkstack_ptr_ptr", (PERL_PROC*)&Perl_Tmarkstack_ptr_ptr}, | |
603 {"Perl_Tmarkstack_max_ptr", (PERL_PROC*)&Perl_Tmarkstack_max_ptr}, | |
604 {"Perl_TSv_ptr", (PERL_PROC*)&Perl_TSv_ptr}, | |
605 {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr}, | |
606 {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
607 # else |
1711 | 608 {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2}, |
1765 | 609 {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init}, |
1668 | 610 {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term}, |
3050 | 611 {"Perl_call_list", (PERL_PROC*)&Perl_call_list}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
612 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
613 # else |
1668 | 614 {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr}, |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
615 {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr}, |
1668 | 616 {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr}, |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
617 {"Perl_IXpv_ptr", (PERL_PROC*)&Perl_IXpv_ptr}, |
1668 | 618 {"Perl_Itmps_ix_ptr", (PERL_PROC*)&Perl_Itmps_ix_ptr}, |
619 {"Perl_Itmps_floor_ptr", (PERL_PROC*)&Perl_Itmps_floor_ptr}, | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
620 {"Perl_Ina_ptr", (PERL_PROC*)&Perl_Ina_ptr}, |
1668 | 621 {"Perl_Imarkstack_ptr_ptr", (PERL_PROC*)&Perl_Imarkstack_ptr_ptr}, |
622 {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr}, | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
623 {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr}, |
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
624 {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr}, |
1668 | 625 {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr}, |
626 {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
627 # endif |
3050 | 628 # endif |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
629 # if (PERL_REVISION == 5) && (PERL_VERSION >= 22) |
6872 | 630 {"Perl_xs_handshake", (PERL_PROC*)&Perl_xs_handshake}, |
631 {"Perl_xs_boot_epilog", (PERL_PROC*)&Perl_xs_boot_epilog}, | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
632 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
633 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) |
5706 | 634 # ifdef USE_ITHREADS |
3820 | 635 {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key}, |
5706 | 636 # endif |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
637 # else |
7 | 638 {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr}, |
639 {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr}, | |
640 {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr}, | |
3050 | 641 {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
642 # endif |
7 | 643 {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader}, |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
644 {"Perl_hv_iternext_flags", (PERL_PROC*)&Perl_hv_iternext_flags}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
645 {"Perl_hv_iterinit", (PERL_PROC*)&Perl_hv_iterinit}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
646 {"Perl_hv_iterkey", (PERL_PROC*)&Perl_hv_iterkey}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
647 {"Perl_hv_iterval", (PERL_PROC*)&Perl_hv_iterval}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
648 {"Perl_av_fetch", (PERL_PROC*)&Perl_av_fetch}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
649 {"Perl_av_len", (PERL_PROC*)&Perl_av_len}, |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
650 {"Perl_sv_2nv_flags", (PERL_PROC*)&Perl_sv_2nv_flags}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
651 # if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
652 {"PerlIOBase_pushed", (PERL_PROC*)&PerlIOBase_pushed}, |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
653 {"PerlIO_define_layer", (PERL_PROC*)&PerlIO_define_layer}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
654 # endif |
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
655 # if (PERL_REVISION == 5) && (PERL_VERSION >= 24) |
9129
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
656 {"Perl_savetmps", (PERL_PROC*)&Perl_savetmps}, |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
657 # endif |
7 | 658 {"", NULL}, |
659 }; | |
660 | |
5537 | 661 /* Work around for perl-5.18. |
9129
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
662 * For now, only the definitions of S_SvREFCNT_dec are needed in |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
663 * "perl\lib\CORE\inline.h". */ |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
664 # if (PERL_REVISION == 5) && (PERL_VERSION >= 18) |
9129
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
665 static void |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
666 S_SvREFCNT_dec(pTHX_ SV *sv) |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
667 { |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
668 if (LIKELY(sv != NULL)) { |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
669 U32 rc = SvREFCNT(sv); |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
670 if (LIKELY(rc > 1)) |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
671 SvREFCNT(sv) = rc - 1; |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
672 else |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
673 Perl_sv_free2(aTHX_ sv, rc); |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
674 } |
95fd0de7a8f1
commit https://github.com/vim/vim/commit/6727bf861776cfbb93c97dfea5f87a095cf9f364
Christian Brabandt <cb@256bit.org>
parents:
8919
diff
changeset
|
675 } |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
676 # endif |
5537 | 677 |
20959
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
678 /* perl-5.32 needs Perl_SvREFCNT_dec */ |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
679 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
680 # define Perl_SvREFCNT_dec S_SvREFCNT_dec |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
681 # endif |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
682 |
11496
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
683 /* perl-5.26 also needs S_TOPMARK and S_POPMARK. */ |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
684 # if (PERL_REVISION == 5) && (PERL_VERSION >= 26) |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
685 PERL_STATIC_INLINE I32 |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
686 S_TOPMARK(pTHX) |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
687 { |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
688 DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log, |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
689 "MARK top %p %" IVdf "\n", |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
690 PL_markstack_ptr, |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
691 (IV)*PL_markstack_ptr))); |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
692 return *PL_markstack_ptr; |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
693 } |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
694 |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
695 PERL_STATIC_INLINE I32 |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
696 S_POPMARK(pTHX) |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
697 { |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
698 DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log, |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
699 "MARK pop %p %" IVdf "\n", |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
700 (PL_markstack_ptr-1), |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
701 (IV)*(PL_markstack_ptr-1)))); |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
702 assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow"); |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
703 return *PL_markstack_ptr--; |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
704 } |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
705 # endif |
af0c969f7b3e
patch 8.0.0631: can't build with Perl 5.26
Christian Brabandt <cb@256bit.org>
parents:
11418
diff
changeset
|
706 |
20959
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
707 /* perl-5.32 needs Perl_POPMARK */ |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
708 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
709 # define Perl_POPMARK S_POPMARK |
24705
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
710 # endif |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
711 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
712 /* perl-5.34 needs Perl_SvTRUE_common; used in SvTRUE_nomg_NN */ |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
713 # if (PERL_REVISION == 5) && (PERL_VERSION >= 34) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
714 PERL_STATIC_INLINE bool |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
715 Perl_SvTRUE_common(pTHX_ SV * sv, const bool sv_2bool_is_fallback) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
716 { |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
717 if (UNLIKELY(SvIMMORTAL_INTERP(sv))) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
718 return SvIMMORTAL_TRUE(sv); |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
719 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
720 if (! SvOK(sv)) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
721 return FALSE; |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
722 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
723 if (SvPOK(sv)) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
724 return SvPVXtrue(sv); |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
725 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
726 if (SvIOK(sv)) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
727 return SvIVX(sv) != 0; /* casts to bool */ |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
728 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
729 if (SvROK(sv) && !(SvOBJECT(SvRV(sv)) && HvAMAGIC(SvSTASH(SvRV(sv))))) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
730 return TRUE; |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
731 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
732 if (sv_2bool_is_fallback) |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
733 return sv_2bool_nomg(sv); |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
734 |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
735 return isGV_with_GP(sv); |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
736 } |
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
737 # endif |
20959
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
738 |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
739 /* perl-5.32 needs Perl_SvTRUE */ |
24705
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
740 # if (PERL_REVISION == 5) && (PERL_VERSION >= 32) |
20959
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
741 PERL_STATIC_INLINE bool |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
742 Perl_SvTRUE(pTHX_ SV *sv) { |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
743 if (!LIKELY(sv)) |
24705
5fbb271b35e0
patch 8.2.2891: cannot build with Perl 5.34
Bram Moolenaar <Bram@vim.org>
parents:
22762
diff
changeset
|
744 return FALSE; |
20959
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
745 SvGETMAGIC(sv); |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
746 return SvTRUE_nomg_NN(sv); |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
747 } |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
748 # endif |
2023b9a5c161
patch 8.2.1031: build failure with Perl5.32
Bram Moolenaar <Bram@vim.org>
parents:
20830
diff
changeset
|
749 |
7 | 750 /* |
751 * Make all runtime-links of perl. | |
752 * | |
5267
585b623a1aa3
updated for version 7.4b.010
Bram Moolenaar <bram@vim.org>
parents:
5261
diff
changeset
|
753 * 1. Get module handle using dlopen() or vimLoadLib(). |
7 | 754 * 2. Get pointer to perl function by GetProcAddress. |
755 * 3. Repeat 2, until get all functions will be used. | |
756 * | |
757 * Parameter 'libname' provides name of DLL. | |
758 * Return OK or FAIL. | |
759 */ | |
760 static int | |
761 perl_runtime_link_init(char *libname, int verbose) | |
762 { | |
763 int i; | |
764 | |
765 if (hPerlLib != NULL) | |
766 return OK; | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
767 if ((hPerlLib = load_dll(libname)) == NULL) |
7 | 768 { |
769 if (verbose) | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15454
diff
changeset
|
770 semsg(_("E370: Could not load library %s"), libname); |
7 | 771 return FAIL; |
772 } | |
773 for (i = 0; perl_funcname_table[i].ptr; ++i) | |
774 { | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
775 if (!(*perl_funcname_table[i].ptr = symbol_from_dll(hPerlLib, |
7 | 776 perl_funcname_table[i].name))) |
777 { | |
2370
454f314d0e61
Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2255
diff
changeset
|
778 close_dll(hPerlLib); |
7 | 779 hPerlLib = NULL; |
780 if (verbose) | |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25342
diff
changeset
|
781 semsg((const char *)_(e_could_not_load_library_function_str), perl_funcname_table[i].name); |
7 | 782 return FAIL; |
783 } | |
784 } | |
785 return OK; | |
786 } | |
787 | |
788 /* | |
789 * If runtime-link-perl(DLL) was loaded successfully, return TRUE. | |
790 * There were no DLL loaded, return FALSE. | |
791 */ | |
792 int | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
793 perl_enabled(int verbose) |
7 | 794 { |
7528
53163e4d9e4f
commit https://github.com/vim/vim/commit/25e4fcde767084d1a79e0926bc301c92987c0cce
Christian Brabandt <cb@256bit.org>
parents:
7198
diff
changeset
|
795 return perl_runtime_link_init((char *)p_perldll, verbose) == OK; |
7 | 796 } |
797 #endif /* DYNAMIC_PERL */ | |
798 | |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
799 #if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
800 static void vim_IOLayer_init(void); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
801 #endif |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
802 |
7 | 803 /* |
804 * perl_init(): initialize perl interpreter | |
805 * We have to call perl_parse to initialize some structures, | |
806 * there's nothing to actually parse. | |
807 */ | |
808 static void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
809 perl_init(void) |
7 | 810 { |
1668 | 811 char *bootargs[] = { "VI", NULL }; |
812 int argc = 3; | |
813 static char *argv[] = { "", "-e", "" }; | |
7 | 814 |
1668 | 815 #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) |
1765 | 816 Perl_sys_init(&argc, (char***)&argv); |
1668 | 817 #endif |
7 | 818 perl_interp = perl_alloc(); |
819 perl_construct(perl_interp); | |
1668 | 820 perl_parse(perl_interp, xs_init, argc, argv, 0); |
7 | 821 perl_call_argv("VIM::bootstrap", (long)G_DISCARD, bootargs); |
822 VIM_init(); | |
823 #ifdef USE_SFIO | |
824 sfdisc(PerlIO_stdout(), sfdcnewvim()); | |
825 sfdisc(PerlIO_stderr(), sfdcnewvim()); | |
826 sfsetbuf(PerlIO_stdout(), NULL, 0); | |
827 sfsetbuf(PerlIO_stderr(), NULL, 0); | |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
828 #elif defined(PERLIO_LAYERS) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
829 vim_IOLayer_init(); |
7 | 830 #endif |
831 } | |
832 | |
833 /* | |
19846
4acb165ed0bc
patch 8.2.0479: unloading shared libraries on exit has no purpose
Bram Moolenaar <Bram@vim.org>
parents:
19195
diff
changeset
|
834 * Clean up after ourselves. |
7 | 835 */ |
836 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
837 perl_end(void) |
7 | 838 { |
839 if (perl_interp) | |
840 { | |
841 perl_run(perl_interp); | |
842 perl_destruct(perl_interp); | |
843 perl_free(perl_interp); | |
844 perl_interp = NULL; | |
1668 | 845 #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
846 Perl_sys_term(); |
1668 | 847 #endif |
7 | 848 } |
849 } | |
850 | |
851 /* | |
852 * msg_split(): send a message to the message handling routines | |
853 * split at '\n' first though. | |
854 */ | |
855 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
856 msg_split( |
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
857 char_u *s, |
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
858 int attr) /* highlighting attributes */ |
7 | 859 { |
860 char *next; | |
861 char *token = (char *)s; | |
862 | |
1423 | 863 while ((next = strchr(token, '\n')) && !got_int) |
7 | 864 { |
865 *next++ = '\0'; /* replace \n with \0 */ | |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15472
diff
changeset
|
866 msg_attr(token, attr); |
7 | 867 token = next; |
868 } | |
1423 | 869 if (*token && !got_int) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15472
diff
changeset
|
870 msg_attr(token, attr); |
7 | 871 } |
872 | |
873 #ifndef FEAT_EVAL | |
874 /* | |
875 * This stub is needed because an "#ifdef FEAT_EVAL" around Eval() doesn't | |
876 * work properly. | |
877 */ | |
878 char_u * | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
879 eval_to_string( |
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
880 char_u *arg UNUSED, |
30598
37aa9fd2ed72
patch 9.0.0634: evaluating "expr" options has more overhead than needed
Bram Moolenaar <Bram@vim.org>
parents:
30314
diff
changeset
|
881 int convert UNUSED, |
37aa9fd2ed72
patch 9.0.0634: evaluating "expr" options has more overhead than needed
Bram Moolenaar <Bram@vim.org>
parents:
30314
diff
changeset
|
882 int use_simple_function UNUSED) |
7 | 883 { |
884 return NULL; | |
885 } | |
886 #endif | |
887 | |
888 /* | |
889 * Create a new reference to an SV pointing to the SCR structure | |
502 | 890 * The b_perl_private/w_perl_private part of the SCR structure points to the |
891 * SV, so there can only be one such SV for a particular SCR structure. When | |
892 * the last reference has gone (DESTROY is called), | |
893 * b_perl_private/w_perl_private is reset; When the screen goes away before | |
7 | 894 * all references are gone, the value of the SV is reset; |
895 * any subsequent use of any of those reference will produce | |
896 * a warning. (see typemap) | |
897 */ | |
502 | 898 |
899 static SV * | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
900 newWINrv(SV *rv, win_T *ptr) |
502 | 901 { |
902 sv_upgrade(rv, SVt_RV); | |
903 if (ptr->w_perl_private == NULL) | |
904 { | |
905 ptr->w_perl_private = newSV(0); | |
3344 | 906 sv_setiv(ptr->w_perl_private, PTR2IV(ptr)); |
502 | 907 } |
14441
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
908 SvREFCNT_inc_void_NN(ptr->w_perl_private); |
502 | 909 SvRV(rv) = ptr->w_perl_private; |
910 SvROK_on(rv); | |
911 return sv_bless(rv, gv_stashpv("VIWIN", TRUE)); | |
7 | 912 } |
913 | |
502 | 914 static SV * |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
915 newBUFrv(SV *rv, buf_T *ptr) |
502 | 916 { |
917 sv_upgrade(rv, SVt_RV); | |
918 if (ptr->b_perl_private == NULL) | |
919 { | |
920 ptr->b_perl_private = newSV(0); | |
3344 | 921 sv_setiv(ptr->b_perl_private, PTR2IV(ptr)); |
502 | 922 } |
14441
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
923 SvREFCNT_inc_void_NN(ptr->b_perl_private); |
502 | 924 SvRV(rv) = ptr->b_perl_private; |
925 SvROK_on(rv); | |
926 return sv_bless(rv, gv_stashpv("VIBUF", TRUE)); | |
927 } | |
7 | 928 |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
929 #if 0 |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
930 SV *__sv_save[1024]; |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
931 int __sv_save_ix; |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
932 # define D_Save_Sv(sv) do { if (__sv_save_ix < 1024) __sv_save[__sv_save_ix++] = (sv); } while (0) |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
933 #else |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
934 # define D_Save_Sv(sv) NOOP |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
935 #endif |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
936 |
7 | 937 /* |
938 * perl_win_free | |
4352 | 939 * Remove all references to the window to be destroyed |
7 | 940 */ |
941 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
942 perl_win_free(win_T *wp) |
7 | 943 { |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
944 if (wp->w_perl_private && perl_interp != NULL) |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
945 { |
14377
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
946 SV *sv = (SV*)wp->w_perl_private; |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
947 D_Save_Sv(sv); |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
948 sv_setiv(sv, 0); |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
949 SvREFCNT_dec(sv); |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
950 } |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
951 wp->w_perl_private = NULL; |
7 | 952 } |
953 | |
954 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
955 perl_buf_free(buf_T *bp) |
7 | 956 { |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
957 if (bp->b_perl_private && perl_interp != NULL) |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
958 { |
14377
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
959 SV *sv = (SV *)bp->b_perl_private; |
378eefcbbb12
patch 8.1.0203: building with Perl 5.28 fails on Windows
Christian Brabandt <cb@256bit.org>
parents:
14350
diff
changeset
|
960 D_Save_Sv(sv); |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
961 sv_setiv(sv, 0); |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
962 SvREFCNT_dec(sv); |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
963 } |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
964 bp->b_perl_private = NULL; |
7 | 965 } |
966 | |
967 #ifndef PROTO | |
968 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) | |
969 I32 cur_val(pTHX_ IV iv, SV *sv); | |
970 # else | |
971 I32 cur_val(IV iv, SV *sv); | |
9353
32e1dfae5664
commit https://github.com/vim/vim/commit/eeb50ab5228c5c09743a9c2b907c3634c0146e84
Christian Brabandt <cb@256bit.org>
parents:
9351
diff
changeset
|
972 # endif |
7 | 973 |
974 /* | |
975 * Handler for the magic variables $main::curwin and $main::curbuf. | |
976 * The handler is put into the magic vtbl for these variables. | |
977 * (This is effectively a C-level equivalent of a tied variable). | |
978 * There is no "set" function as the variables are read-only. | |
979 */ | |
980 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8) | |
981 I32 cur_val(pTHX_ IV iv, SV *sv) | |
982 # else | |
983 I32 cur_val(IV iv, SV *sv) | |
984 # endif | |
985 { | |
986 SV *rv; | |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
987 |
7 | 988 if (iv == 0) |
989 rv = newWINrv(newSV(0), curwin); | |
990 else | |
991 rv = newBUFrv(newSV(0), curbuf); | |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
992 |
14441
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
993 if (SvRV(sv) != SvRV(rv)) |
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
994 // XXX: This magic variable is a bit confusing... |
19195
2ef19eed524a
patch 8.2.0156: various typos in source files and tests
Bram Moolenaar <Bram@vim.org>
parents:
19067
diff
changeset
|
995 // Is currently refcounted ? |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
996 sv_setsv(sv, rv); |
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
997 |
14441
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
998 SvREFCNT_dec(rv); |
2d6703d4448a
patch 8.1.0234: incorrect reference counting in Perl interface
Christian Brabandt <cb@256bit.org>
parents:
14395
diff
changeset
|
999 |
7 | 1000 return 0; |
1001 } | |
1002 #endif /* !PROTO */ | |
1003 | |
1004 struct ufuncs cw_funcs = { cur_val, 0, 0 }; | |
1005 struct ufuncs cb_funcs = { cur_val, 0, 1 }; | |
1006 | |
1007 /* | |
1008 * VIM_init(): Vim-specific initialisation. | |
1009 * Make the magical main::curwin and main::curbuf variables | |
1010 */ | |
1011 static void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1012 VIM_init(void) |
7 | 1013 { |
1014 static char cw[] = "main::curwin"; | |
1015 static char cb[] = "main::curbuf"; | |
1016 SV *sv; | |
1017 | |
1018 sv = perl_get_sv(cw, TRUE); | |
1019 sv_magic(sv, NULL, 'U', (char *)&cw_funcs, sizeof(cw_funcs)); | |
1020 SvREADONLY_on(sv); | |
1021 | |
1022 sv = perl_get_sv(cb, TRUE); | |
1023 sv_magic(sv, NULL, 'U', (char *)&cb_funcs, sizeof(cb_funcs)); | |
1024 SvREADONLY_on(sv); | |
1025 | |
1026 /* | |
1027 * Setup the Safe compartment. | |
1028 * It shouldn't be a fatal error if the Safe module is missing. | |
1029 * XXX: Only shares the 'Msg' routine (which has to be called | |
1030 * like 'Msg(...)'). | |
1031 */ | |
1032 (void)perl_eval_pv( "if ( eval( 'require Safe' ) ) { $VIM::safe = Safe->new(); $VIM::safe->share_from( 'VIM', ['Msg'] ); }", G_DISCARD | G_VOID ); | |
1033 | |
1034 } | |
1035 | |
1036 #ifdef DYNAMIC_PERL | |
1037 static char *e_noperl = N_("Sorry, this command is disabled: the Perl library could not be loaded."); | |
1038 #endif | |
1039 | |
1040 /* | |
1041 * ":perl" | |
1042 */ | |
1043 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1044 ex_perl(exarg_T *eap) |
7 | 1045 { |
1046 char *err; | |
1047 char *script; | |
1048 STRLEN length; | |
1049 SV *sv; | |
2255 | 1050 #ifdef HAVE_SANDBOX |
7 | 1051 SV *safe; |
2255 | 1052 #endif |
7 | 1053 |
1054 script = (char *)script_get(eap, eap->arg); | |
1055 if (eap->skip) | |
1056 { | |
1057 vim_free(script); | |
1058 return; | |
1059 } | |
1060 | |
1061 if (perl_interp == NULL) | |
1062 { | |
1063 #ifdef DYNAMIC_PERL | |
1064 if (!perl_enabled(TRUE)) | |
1065 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15454
diff
changeset
|
1066 emsg(_(e_noperl)); |
7 | 1067 vim_free(script); |
1068 return; | |
1069 } | |
1070 #endif | |
1071 perl_init(); | |
1072 } | |
1073 | |
1074 { | |
1075 dSP; | |
1076 ENTER; | |
1077 SAVETMPS; | |
1078 | |
1079 if (script == NULL) | |
1080 sv = newSVpv((char *)eap->arg, 0); | |
1081 else | |
1082 { | |
1083 sv = newSVpv(script, 0); | |
1084 vim_free(script); | |
1085 } | |
1086 | |
15748
93b78c4a7cd5
patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents:
15543
diff
changeset
|
1087 if (sandbox || secure) |
7 | 1088 { |
2982 | 1089 safe = perl_get_sv("VIM::safe", FALSE); |
1934 | 1090 # ifndef MAKE_TEST /* avoid a warning for unreachable code */ |
1990 | 1091 if (safe == NULL || !SvTRUE(safe)) |
27436
4c683d6c0a9d
patch 8.2.4246: one error message not in errors.h
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1092 emsg(_(e_perl_evaluation_forbidden_in_sandbox_without_safe_module)); |
7 | 1093 else |
1934 | 1094 # endif |
7 | 1095 { |
1096 PUSHMARK(SP); | |
1097 XPUSHs(safe); | |
1098 XPUSHs(sv); | |
1099 PUTBACK; | |
1100 perl_call_method("reval", G_DISCARD); | |
1101 } | |
1102 } | |
1103 else | |
1104 perl_eval_sv(sv, G_DISCARD | G_NOARGS); | |
1105 | |
1106 SvREFCNT_dec(sv); | |
1107 | |
9351
82cb3ed4781b
commit https://github.com/vim/vim/commit/7b61bf187a318cb710be40da9ce4c29972324a71
Christian Brabandt <cb@256bit.org>
parents:
9177
diff
changeset
|
1108 err = SvPV(GvSV(PL_errgv), length); |
7 | 1109 |
1110 FREETMPS; | |
1111 LEAVE; | |
1112 | |
1113 if (!length) | |
1114 return; | |
1115 | |
1116 msg_split((char_u *)err, highlight_attr[HLF_E]); | |
1117 return; | |
1118 } | |
1119 } | |
1120 | |
1121 static int | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1122 replace_line(linenr_T *line, linenr_T *end) |
7 | 1123 { |
1124 char *str; | |
1125 | |
1126 if (SvOK(GvSV(PL_defgv))) | |
1127 { | |
1128 str = SvPV(GvSV(PL_defgv), PL_na); | |
1129 ml_replace(*line, (char_u *)str, 1); | |
1130 changed_bytes(*line, 0); | |
1131 } | |
1132 else | |
1133 { | |
20599
d571231175b4
patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents:
19971
diff
changeset
|
1134 ml_delete(*line); |
7 | 1135 deleted_lines_mark(*line, 1L); |
1136 --(*end); | |
1137 --(*line); | |
1138 } | |
1139 return OK; | |
1140 } | |
1141 | |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1142 static struct ref_map_S { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1143 void *vim_ref; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1144 SV *perl_ref; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1145 struct ref_map_S *next; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1146 } *ref_map = NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1147 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1148 static void |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1149 ref_map_free(void) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1150 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1151 struct ref_map_S *tofree; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1152 struct ref_map_S *refs = ref_map; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1153 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1154 while (refs) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1155 tofree = refs; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1156 refs = refs->next; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1157 vim_free(tofree); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1158 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1159 ref_map = NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1160 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1161 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1162 static struct ref_map_S * |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1163 ref_map_find_SV(SV *const sv) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1164 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1165 struct ref_map_S *refs = ref_map; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1166 int count = 350; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1167 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1168 while (refs) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1169 if (refs->perl_ref == sv) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1170 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1171 refs = refs->next; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1172 count--; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1173 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1174 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1175 if (!refs && count > 0) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1176 refs = (struct ref_map_S *)alloc(sizeof(struct ref_map_S)); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1177 if (!refs) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1178 return NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1179 refs->perl_ref = sv; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1180 refs->vim_ref = NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1181 refs->next = ref_map; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1182 ref_map = refs; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1183 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1184 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1185 return refs; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1186 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1187 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1188 static int |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1189 perl_to_vim(SV *sv, typval_T *rettv) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1190 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1191 if (SvROK(sv)) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1192 sv = SvRV(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1193 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1194 switch (SvTYPE(sv)) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1195 case SVt_NULL: |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1196 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1197 case SVt_NV: /* float */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1198 rettv->v_type = VAR_FLOAT; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1199 rettv->vval.v_float = SvNV(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1200 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1201 case SVt_IV: /* integer */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1202 if (!SvROK(sv)) { /* references should be string */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1203 rettv->vval.v_number = SvIV(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1204 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1205 } |
12674
e769c912fcd9
patch 8.0.1215: newer gcc warns for implicit fallthrough
Christian Brabandt <cb@256bit.org>
parents:
12533
diff
changeset
|
1206 /* FALLTHROUGH */ |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1207 case SVt_PV: /* string */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1208 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1209 size_t len = 0; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1210 char * str_from = SvPV(sv, len); |
9159
6b003ff07234
commit https://github.com/vim/vim/commit/9b0ac229bcfc91acabd35fc576055a94c1687c32
Christian Brabandt <cb@256bit.org>
parents:
9129
diff
changeset
|
1211 char_u *str_to = (char_u*)alloc( |
6b003ff07234
commit https://github.com/vim/vim/commit/9b0ac229bcfc91acabd35fc576055a94c1687c32
Christian Brabandt <cb@256bit.org>
parents:
9129
diff
changeset
|
1212 (unsigned)(sizeof(char_u) * (len + 1))); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1213 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1214 if (str_to) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1215 str_to[len] = '\0'; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1216 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1217 while (len--) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1218 if (str_from[len] == '\0') |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1219 str_to[len] = '\n'; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1220 else |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1221 str_to[len] = str_from[len]; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1222 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1223 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1224 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1225 rettv->v_type = VAR_STRING; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1226 rettv->vval.v_string = str_to; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1227 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1228 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1229 case SVt_PVAV: /* list */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1230 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1231 SSize_t size; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1232 listitem_T * item; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1233 SV ** item2; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1234 list_T * list; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1235 struct ref_map_S * refs; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1236 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1237 if ((refs = ref_map_find_SV(sv)) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1238 return FAIL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1239 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1240 if (refs->vim_ref) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1241 list = (list_T *) refs->vim_ref; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1242 else |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1243 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1244 if ((list = list_alloc()) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1245 return FAIL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1246 refs->vim_ref = list; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1247 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1248 for (size = av_len((AV*)sv); size >= 0; size--) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1249 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1250 if ((item = listitem_alloc()) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1251 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1252 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1253 item->li_tv.v_type = VAR_NUMBER; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1254 item->li_tv.v_lock = 0; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1255 item->li_tv.vval.v_number = 0; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1256 list_insert(list, item, list->lv_first); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1257 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1258 item2 = av_fetch((AV *)sv, size, 0); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1259 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1260 if (item2 == NULL || *item2 == NULL || |
7807
1a5d34492798
commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents:
7651
diff
changeset
|
1261 perl_to_vim(*item2, &item->li_tv) == FAIL) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1262 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1263 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1264 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1265 |
11418
162bcd0debd7
patch 8.0.0593: duplication of code for adding a list or dict return value
Christian Brabandt <cb@256bit.org>
parents:
11121
diff
changeset
|
1266 rettv_list_set(rettv, list); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1267 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1268 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1269 case SVt_PVHV: /* dictionary */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1270 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1271 HE * entry; |
8214
51b4fba718bf
commit https://github.com/vim/vim/commit/254ebaf068919407de6bd83ac905bd2f36ad944e
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1272 I32 key_len; |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1273 char * key; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1274 dictitem_T * item; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1275 SV * item2; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1276 dict_T * dict; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1277 struct ref_map_S * refs; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1278 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1279 if ((refs = ref_map_find_SV(sv)) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1280 return FAIL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1281 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1282 if (refs->vim_ref) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1283 dict = (dict_T *) refs->vim_ref; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1284 else |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1285 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1286 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1287 if ((dict = dict_alloc()) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1288 return FAIL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1289 refs->vim_ref = dict; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1290 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1291 hv_iterinit((HV *)sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1292 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1293 for (entry = hv_iternext((HV *)sv); entry; entry = hv_iternext((HV *)sv)) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1294 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1295 key_len = 0; |
8214
51b4fba718bf
commit https://github.com/vim/vim/commit/254ebaf068919407de6bd83ac905bd2f36ad944e
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1296 key = hv_iterkey(entry, &key_len); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1297 |
8214
51b4fba718bf
commit https://github.com/vim/vim/commit/254ebaf068919407de6bd83ac905bd2f36ad944e
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1298 if (!key || !key_len || strlen(key) < (size_t)key_len) { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15454
diff
changeset
|
1299 semsg("Malformed key Dictionary '%s'", key && *key ? key : "(empty)"); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1300 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1301 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1302 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1303 if ((item = dictitem_alloc((char_u *)key)) == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1304 break; |
14303
f761a55a8aed
patch 8.1.0167: lock flag in new dictitem is reset in many places
Christian Brabandt <cb@256bit.org>
parents:
13404
diff
changeset
|
1305 item->di_tv.v_type = VAR_NUMBER; |
f761a55a8aed
patch 8.1.0167: lock flag in new dictitem is reset in many places
Christian Brabandt <cb@256bit.org>
parents:
13404
diff
changeset
|
1306 item->di_tv.vval.v_number = 0; |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1307 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1308 if (dict_add(dict, item) == FAIL) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1309 dictitem_free(item); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1310 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1311 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1312 item2 = hv_iterval((HV *)sv, entry); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1313 if (item2 == NULL || perl_to_vim(item2, &item->di_tv) == FAIL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1314 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1315 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1316 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1317 |
11418
162bcd0debd7
patch 8.0.0593: duplication of code for adding a list or dict return value
Christian Brabandt <cb@256bit.org>
parents:
11121
diff
changeset
|
1318 rettv_dict_set(rettv, dict); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1319 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1320 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1321 default: /* not convertible */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1322 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1323 char *val = SvPV_nolen(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1324 rettv->v_type = VAR_STRING; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1325 rettv->vval.v_string = val ? vim_strsave((char_u *)val) : NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1326 break; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1327 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1328 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1329 return OK; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1330 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1331 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1332 /* |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1333 * "perleval()" |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1334 */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1335 void |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1336 do_perleval(char_u *str, typval_T *rettv) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1337 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1338 char *err = NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1339 STRLEN err_len = 0; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1340 SV *sv = NULL; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1341 #ifdef HAVE_SANDBOX |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1342 SV *safe; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1343 #endif |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1344 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1345 if (perl_interp == NULL) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1346 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1347 #ifdef DYNAMIC_PERL |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1348 if (!perl_enabled(TRUE)) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1349 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15454
diff
changeset
|
1350 emsg(_(e_noperl)); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1351 return; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1352 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1353 #endif |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1354 perl_init(); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1355 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1356 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1357 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1358 dSP; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1359 ENTER; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1360 SAVETMPS; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1361 |
15748
93b78c4a7cd5
patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents:
15543
diff
changeset
|
1362 if (sandbox || secure) |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1363 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1364 safe = get_sv("VIM::safe", FALSE); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1365 # ifndef MAKE_TEST /* avoid a warning for unreachable code */ |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1366 if (safe == NULL || !SvTRUE(safe)) |
27436
4c683d6c0a9d
patch 8.2.4246: one error message not in errors.h
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1367 emsg(_(e_perl_evaluation_forbidden_in_sandbox_without_safe_module)); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1368 else |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1369 # endif |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1370 { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1371 sv = newSVpv((char *)str, 0); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1372 PUSHMARK(SP); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1373 XPUSHs(safe); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1374 XPUSHs(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1375 PUTBACK; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1376 call_method("reval", G_SCALAR); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1377 SPAGAIN; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1378 SvREFCNT_dec(sv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1379 sv = POPs; |
28815
d26a95a16ce1
patch 8.2.4931: Crash with sequence of Perl commands
Bram Moolenaar <Bram@vim.org>
parents:
27436
diff
changeset
|
1380 PUTBACK; |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1381 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1382 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1383 else |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1384 sv = eval_pv((char *)str, 0); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1385 |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1386 if (sv) { |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1387 perl_to_vim(sv, rettv); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1388 ref_map_free(); |
9351
82cb3ed4781b
commit https://github.com/vim/vim/commit/7b61bf187a318cb710be40da9ce4c29972324a71
Christian Brabandt <cb@256bit.org>
parents:
9177
diff
changeset
|
1389 err = SvPV(GvSV(PL_errgv), err_len); |
7651
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1390 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1391 FREETMPS; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1392 LEAVE; |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1393 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1394 if (err_len) |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1395 msg_split((char_u *)err, highlight_attr[HLF_E]); |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1396 } |
c7575b07de98
commit https://github.com/vim/vim/commit/e9b892ebcd8596bf813793a1eed5a460a9495a28
Christian Brabandt <cb@256bit.org>
parents:
7528
diff
changeset
|
1397 |
7 | 1398 /* |
1399 * ":perldo". | |
1400 */ | |
1401 void | |
7856
226ed297307f
commit https://github.com/vim/vim/commit/d14e00ea67afbaa8cb4a7e6b1eb306da6a2d5adb
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1402 ex_perldo(exarg_T *eap) |
7 | 1403 { |
1404 STRLEN length; | |
1405 SV *sv; | |
1406 char *str; | |
1407 linenr_T i; | |
10759
4267f8904d47
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1408 buf_T *was_curbuf = curbuf; |
7 | 1409 |
11121
778c10516955
patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
10759
diff
changeset
|
1410 if (BUFEMPTY()) |
7 | 1411 return; |
1412 | |
1413 if (perl_interp == NULL) | |
1414 { | |
1415 #ifdef DYNAMIC_PERL | |
1416 if (!perl_enabled(TRUE)) | |
1417 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15454
diff
changeset
|
1418 emsg(_(e_noperl)); |
7 | 1419 return; |
1420 } | |
1421 #endif | |
1422 perl_init(); | |
1423 } | |
1424 { | |
1425 dSP; | |
1426 length = strlen((char *)eap->arg); | |
129 | 1427 sv = newSV(length + sizeof("sub VIM::perldo {") - 1 + 1); |
1428 sv_setpvn(sv, "sub VIM::perldo {", sizeof("sub VIM::perldo {") - 1); | |
7 | 1429 sv_catpvn(sv, (char *)eap->arg, length); |
1430 sv_catpvn(sv, "}", 1); | |
1431 perl_eval_sv(sv, G_DISCARD | G_NOARGS); | |
1432 SvREFCNT_dec(sv); | |
9351
82cb3ed4781b
commit https://github.com/vim/vim/commit/7b61bf187a318cb710be40da9ce4c29972324a71
Christian Brabandt <cb@256bit.org>
parents:
9177
diff
changeset
|
1433 str = SvPV(GvSV(PL_errgv), length); |
7 | 1434 if (length) |
1435 goto err; | |
1436 | |
1437 if (u_save(eap->line1 - 1, eap->line2 + 1) != OK) | |
1438 return; | |
1439 | |
1440 ENTER; | |
1441 SAVETMPS; | |
1442 for (i = eap->line1; i <= eap->line2; i++) | |
1443 { | |
10759
4267f8904d47
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1444 /* Check the line number, the command my have deleted lines. */ |
4267f8904d47
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1445 if (i > curbuf->b_ml.ml_line_count) |
4267f8904d47
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1446 break; |
129 | 1447 sv_setpv(GvSV(PL_defgv), (char *)ml_get(i)); |
7 | 1448 PUSHMARK(sp); |
1449 perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL); | |
9351
82cb3ed4781b
commit https://github.com/vim/vim/commit/7b61bf187a318cb710be40da9ce4c29972324a71
Christian Brabandt <cb@256bit.org>
parents:
9177
diff
changeset
|
1450 str = SvPV(GvSV(PL_errgv), length); |
10759
4267f8904d47
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
1451 if (length || curbuf != was_curbuf) |
7 | 1452 break; |
1453 SPAGAIN; | |
1454 if (SvTRUEx(POPs)) | |
1455 { | |
1456 if (replace_line(&i, &eap->line2) != OK) | |
1457 { | |
1458 PUTBACK; | |
1459 break; | |
1460 } | |
1461 } | |
1462 PUTBACK; | |
1463 } | |
1464 FREETMPS; | |
1465 LEAVE; | |
1466 check_cursor(); | |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
28815
diff
changeset
|
1467 update_screen(UPD_NOT_VALID); |
7 | 1468 if (!length) |
1469 return; | |
1470 | |
1471 err: | |
1472 msg_split((char_u *)str, highlight_attr[HLF_E]); | |
1473 return; | |
1474 } | |
1475 } | |
1476 | |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1477 #if defined(PERLIO_LAYERS) && !defined(USE_SFIO) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1478 typedef struct { |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1479 struct _PerlIO base; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1480 int attr; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1481 } PerlIOVim; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1482 |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1483 static IV |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1484 PerlIOVim_pushed(pTHX_ PerlIO *f, const char *mode, |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1485 SV *arg, PerlIO_funcs *tab) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1486 { |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1487 PerlIOVim *s = PerlIOSelf(f, PerlIOVim); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1488 s->attr = 0; |
12487
3f16cf18386c
patch 8.0.1123: cannot define a toolbar for a window
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
1489 if (arg && SvPOK(arg)) |
3f16cf18386c
patch 8.0.1123: cannot define a toolbar for a window
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
1490 s->attr = syn_name2attr((char_u *)SvPV_nolen(arg)); |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1491 return PerlIOBase_pushed(aTHX_ f, mode, (SV *)NULL, tab); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1492 } |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1493 |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1494 static SSize_t |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1495 PerlIOVim_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1496 { |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1497 char_u *str; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1498 PerlIOVim * s = PerlIOSelf(f, PerlIOVim); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1499 |
20830
9064044fd4f6
patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
1500 str = vim_strnsave((char_u *)vbuf, count); |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1501 if (str == NULL) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1502 return 0; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1503 msg_split((char_u *)str, s->attr); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1504 vim_free(str); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1505 |
9159
6b003ff07234
commit https://github.com/vim/vim/commit/9b0ac229bcfc91acabd35fc576055a94c1687c32
Christian Brabandt <cb@256bit.org>
parents:
9129
diff
changeset
|
1506 return (SSize_t)count; |
8885
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1507 } |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1508 |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1509 static PERLIO_FUNCS_DECL(PerlIO_Vim) = { |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1510 sizeof(PerlIO_funcs), |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1511 "Vim", |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1512 sizeof(PerlIOVim), |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1513 PERLIO_K_DUMMY, /* flags */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1514 PerlIOVim_pushed, |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1515 NULL, /* popped */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1516 NULL, /* open */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1517 NULL, /* binmode */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1518 NULL, /* arg */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1519 NULL, /* fileno */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1520 NULL, /* dup */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1521 NULL, /* read */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1522 NULL, /* unread */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1523 PerlIOVim_write, |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1524 NULL, /* seek */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1525 NULL, /* tell */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1526 NULL, /* close */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1527 NULL, /* flush */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1528 NULL, /* fill */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1529 NULL, /* eof */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1530 NULL, /* error */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1531 NULL, /* clearerr */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1532 NULL, /* setlinebuf */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1533 NULL, /* get_base */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1534 NULL, /* get_bufsiz */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1535 NULL, /* get_ptr */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1536 NULL, /* get_cnt */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1537 NULL /* set_ptrcnt */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1538 }; |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1539 |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1540 /* Use Vim routine for print operator */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1541 static void |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1542 vim_IOLayer_init(void) |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1543 { |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1544 PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_Vim)); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1545 (void)eval_pv( "binmode(STDOUT, ':Vim')" |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1546 " && binmode(STDERR, ':Vim(ErrorMsg)');", 0); |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1547 } |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1548 #endif /* PERLIO_LAYERS && !USE_SFIO */ |
54a380c74547
commit https://github.com/vim/vim/commit/6244a0fc29163ba1c734f92b55a89e01e6cf2a67
Christian Brabandt <cb@256bit.org>
parents:
8810
diff
changeset
|
1549 |
7 | 1550 XS(boot_VIM); |
1551 | |
1552 static void | |
1553 xs_init(pTHX) | |
1554 { | |
1555 char *file = __FILE__; | |
1556 | |
1557 /* DynaLoader is a special case */ | |
1558 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); | |
1559 newXS("VIM::bootstrap", boot_VIM, file); | |
1560 } | |
1561 | |
1562 typedef win_T * VIWIN; | |
1563 typedef buf_T * VIBUF; | |
1564 | |
1565 MODULE = VIM PACKAGE = VIM | |
1566 | |
1567 void | |
1568 Msg(text, hl=NULL) | |
1569 char *text; | |
1570 char *hl; | |
1571 | |
1572 PREINIT: | |
1573 int attr; | |
1574 | |
1575 PPCODE: | |
1576 if (text != NULL) | |
1577 { | |
1578 attr = 0; | |
1579 if (hl != NULL) | |
12487
3f16cf18386c
patch 8.0.1123: cannot define a toolbar for a window
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
1580 attr = syn_name2attr((char_u *)hl); |
7 | 1581 msg_split((char_u *)text, attr); |
1582 } | |
1583 | |
1584 void | |
1585 SetOption(line) | |
1586 char *line; | |
1587 | |
1588 PPCODE: | |
1589 if (line != NULL) | |
1590 do_set((char_u *)line, 0); | |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
28815
diff
changeset
|
1591 update_screen(UPD_NOT_VALID); |
7 | 1592 |
1593 void | |
1594 DoCommand(line) | |
1595 char *line; | |
1596 | |
1597 PPCODE: | |
1598 if (line != NULL) | |
1599 do_cmdline_cmd((char_u *)line); | |
1600 | |
1601 void | |
1602 Eval(str) | |
1603 char *str; | |
1604 | |
1605 PREINIT: | |
1606 char_u *value; | |
1607 PPCODE: | |
30598
37aa9fd2ed72
patch 9.0.0634: evaluating "expr" options has more overhead than needed
Bram Moolenaar <Bram@vim.org>
parents:
30314
diff
changeset
|
1608 value = eval_to_string((char_u *)str, TRUE, FALSE); |
7 | 1609 if (value == NULL) |
1610 { | |
1611 XPUSHs(sv_2mortal(newSViv(0))); | |
1612 XPUSHs(sv_2mortal(newSVpv("", 0))); | |
1613 } | |
1614 else | |
1615 { | |
1616 XPUSHs(sv_2mortal(newSViv(1))); | |
1617 XPUSHs(sv_2mortal(newSVpv((char *)value, 0))); | |
1618 vim_free(value); | |
1619 } | |
1620 | |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1621 SV* |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1622 Blob(SV* sv) |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1623 PREINIT: |
15472
0fcc1315c061
patch 8.1.0744: compiler warnings for signed/unsigned strings
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1624 STRLEN len; |
0fcc1315c061
patch 8.1.0744: compiler warnings for signed/unsigned strings
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1625 char *s; |
0fcc1315c061
patch 8.1.0744: compiler warnings for signed/unsigned strings
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1626 unsigned i; |
0fcc1315c061
patch 8.1.0744: compiler warnings for signed/unsigned strings
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1627 char buf[3]; |
0fcc1315c061
patch 8.1.0744: compiler warnings for signed/unsigned strings
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1628 SV* newsv; |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1629 |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1630 CODE: |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1631 s = SvPVbyte(sv, len); |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1632 newsv = newSVpv("0z", 2); |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1633 for (i = 0; i < len; i++) |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1634 { |
15945
f0f8754e3bf5
patch 8.1.0978: blob not tested with Perl
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
1635 sprintf(buf, "%02X", (unsigned char)(s[i])); |
15454
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1636 sv_catpvn(newsv, buf, 2); |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1637 } |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1638 RETVAL = newsv; |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1639 OUTPUT: |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1640 RETVAL |
1d2b5c016f17
patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents:
14816
diff
changeset
|
1641 |
7 | 1642 void |
1643 Buffers(...) | |
1644 | |
1645 PREINIT: | |
1646 buf_T *vimbuf; | |
1647 int i, b; | |
1648 | |
1649 PPCODE: | |
1650 if (items == 0) | |
1651 { | |
1652 if (GIMME == G_SCALAR) | |
1653 { | |
1654 i = 0; | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9353
diff
changeset
|
1655 FOR_ALL_BUFFERS(vimbuf) |
7 | 1656 ++i; |
1657 | |
1658 XPUSHs(sv_2mortal(newSViv(i))); | |
1659 } | |
1660 else | |
1661 { | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9353
diff
changeset
|
1662 FOR_ALL_BUFFERS(vimbuf) |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
1663 XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf))); |
7 | 1664 } |
1665 } | |
1666 else | |
1667 { | |
1668 for (i = 0; i < items; i++) | |
1669 { | |
1670 SV *sv = ST(i); | |
1671 if (SvIOK(sv)) | |
4105 | 1672 b = (int) SvIV(ST(i)); |
7 | 1673 else |
1674 { | |
1675 char_u *pat; | |
1676 STRLEN len; | |
1677 | |
1678 pat = (char_u *)SvPV(sv, len); | |
1679 ++emsg_off; | |
13404
615572809435
patch 8.0.1576: Perl VIM::Buffers() does not find every buffer
Christian Brabandt <cb@256bit.org>
parents:
12674
diff
changeset
|
1680 b = buflist_findpat(pat, pat + len, TRUE, FALSE, FALSE); |
7 | 1681 --emsg_off; |
1682 } | |
1683 | |
1684 if (b >= 0) | |
1685 { | |
1686 vimbuf = buflist_findnr(b); | |
1687 if (vimbuf) | |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
1688 XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf))); |
7 | 1689 } |
1690 } | |
1691 } | |
1692 | |
1693 void | |
1694 Windows(...) | |
1695 | |
1696 PREINIT: | |
1697 win_T *vimwin; | |
1698 int i, w; | |
1699 | |
1700 PPCODE: | |
1701 if (items == 0) | |
1702 { | |
1703 if (GIMME == G_SCALAR) | |
1704 XPUSHs(sv_2mortal(newSViv(win_count()))); | |
1705 else | |
1706 { | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9353
diff
changeset
|
1707 FOR_ALL_WINDOWS(vimwin) |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
1708 XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin))); |
7 | 1709 } |
1710 } | |
1711 else | |
1712 { | |
1713 for (i = 0; i < items; i++) | |
1714 { | |
4105 | 1715 w = (int) SvIV(ST(i)); |
7 | 1716 vimwin = win_find_nr(w); |
1717 if (vimwin) | |
14350
142c0083b3b8
patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
1718 XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin))); |
7 | 1719 } |
1720 } | |
1721 | |
1722 MODULE = VIM PACKAGE = VIWIN | |
1723 | |
1724 void | |
1725 DESTROY(win) | |
1726 VIWIN win | |
1727 | |
1728 CODE: | |
1729 if (win_valid(win)) | |
502 | 1730 win->w_perl_private = 0; |
7 | 1731 |
1732 SV * | |
1733 Buffer(win) | |
1734 VIWIN win | |
1735 | |
1736 CODE: | |
1737 if (!win_valid(win)) | |
1738 win = curwin; | |
1739 RETVAL = newBUFrv(newSV(0), win->w_buffer); | |
1740 OUTPUT: | |
1741 RETVAL | |
1742 | |
1743 void | |
1744 SetHeight(win, height) | |
1745 VIWIN win | |
1746 int height; | |
1747 | |
1748 PREINIT: | |
1749 win_T *savewin; | |
1750 | |
1751 PPCODE: | |
1752 if (!win_valid(win)) | |
1753 win = curwin; | |
1754 savewin = curwin; | |
1755 curwin = win; | |
1756 win_setheight(height); | |
1757 curwin = savewin; | |
1758 | |
1759 void | |
8810
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
1760 Cursor(win, ...) |
83d0b976d9b3
commit https://github.com/vim/vim/commit/864733ad92e30cd603314604af73f25106db4c90
Christian Brabandt <cb@256bit.org>
parents:
8214
diff
changeset
|
1761 VIWIN win |
7 | 1762 |
1763 PPCODE: | |
2982 | 1764 if (items == 1) |
7 | 1765 { |
1766 EXTEND(sp, 2); | |
1767 if (!win_valid(win)) | |
1768 win = curwin; | |
1769 PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum))); | |
1770 PUSHs(sv_2mortal(newSViv(win->w_cursor.col))); | |
1771 } | |
2982 | 1772 else if (items == 3) |
7 | 1773 { |
1774 int lnum, col; | |
1775 | |
1776 if (!win_valid(win)) | |
1777 win = curwin; | |
4105 | 1778 lnum = (int) SvIV(ST(1)); |
1779 col = (int) SvIV(ST(2)); | |
7 | 1780 win->w_cursor.lnum = lnum; |
1781 win->w_cursor.col = col; | |
14395
c15bef307de6
patch 8.1.0212: preferred cursor column not set in interfaces
Christian Brabandt <cb@256bit.org>
parents:
14377
diff
changeset
|
1782 win->w_set_curswant = TRUE; |
7 | 1783 check_cursor(); /* put cursor on an existing line */ |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
28815
diff
changeset
|
1784 update_screen(UPD_NOT_VALID); |
7 | 1785 } |
1786 | |
1787 MODULE = VIM PACKAGE = VIBUF | |
1788 | |
1789 void | |
1790 DESTROY(vimbuf) | |
1791 VIBUF vimbuf; | |
1792 | |
1793 CODE: | |
1794 if (buf_valid(vimbuf)) | |
502 | 1795 vimbuf->b_perl_private = 0; |
7 | 1796 |
1797 void | |
1798 Name(vimbuf) | |
1799 VIBUF vimbuf; | |
1800 | |
1801 PPCODE: | |
1802 if (!buf_valid(vimbuf)) | |
1803 vimbuf = curbuf; | |
1804 /* No file name returns an empty string */ | |
1805 if (vimbuf->b_fname == NULL) | |
1806 XPUSHs(sv_2mortal(newSVpv("", 0))); | |
1807 else | |
1808 XPUSHs(sv_2mortal(newSVpv((char *)vimbuf->b_fname, 0))); | |
1809 | |
1810 void | |
1811 Number(vimbuf) | |
1812 VIBUF vimbuf; | |
1813 | |
1814 PPCODE: | |
1815 if (!buf_valid(vimbuf)) | |
1816 vimbuf = curbuf; | |
1817 XPUSHs(sv_2mortal(newSViv(vimbuf->b_fnum))); | |
1818 | |
1819 void | |
1820 Count(vimbuf) | |
1821 VIBUF vimbuf; | |
1822 | |
1823 PPCODE: | |
1824 if (!buf_valid(vimbuf)) | |
1825 vimbuf = curbuf; | |
1826 XPUSHs(sv_2mortal(newSViv(vimbuf->b_ml.ml_line_count))); | |
1827 | |
1828 void | |
1829 Get(vimbuf, ...) | |
1830 VIBUF vimbuf; | |
1831 | |
1832 PREINIT: | |
1833 char_u *line; | |
1834 int i; | |
1835 long lnum; | |
1836 PPCODE: | |
1837 if (buf_valid(vimbuf)) | |
1838 { | |
1839 for (i = 1; i < items; i++) | |
1840 { | |
4105 | 1841 lnum = (long) SvIV(ST(i)); |
7 | 1842 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count) |
1843 { | |
1844 line = ml_get_buf(vimbuf, lnum, FALSE); | |
1845 XPUSHs(sv_2mortal(newSVpv((char *)line, 0))); | |
1846 } | |
1847 } | |
1848 } | |
1849 | |
1850 void | |
1851 Set(vimbuf, ...) | |
1852 VIBUF vimbuf; | |
1853 | |
1854 PREINIT: | |
1855 int i; | |
1856 long lnum; | |
1857 char *line; | |
1858 PPCODE: | |
1859 if (buf_valid(vimbuf)) | |
1860 { | |
1861 if (items < 3) | |
1862 croak("Usage: VIBUF::Set(vimbuf, lnum, @lines)"); | |
1863 | |
4105 | 1864 lnum = (long) SvIV(ST(1)); |
7 | 1865 for(i = 2; i < items; i++, lnum++) |
1866 { | |
1867 line = SvPV(ST(i),PL_na); | |
1868 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL) | |
1869 { | |
918 | 1870 aco_save_T aco; |
1871 | |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1872 /* Set curwin/curbuf for "vimbuf" and save some things. */ |
918 | 1873 aucmd_prepbuf(&aco, vimbuf); |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1874 if (curbuf == vimbuf) |
7 | 1875 { |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1876 /* Only when a window was found. */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1877 if (u_savesub(lnum) == OK) |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1878 { |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1879 ml_replace(lnum, (char_u *)line, TRUE); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1880 changed_bytes(lnum, 0); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1881 } |
934 | 1882 |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1883 /* restore curwin/curbuf and a few other things */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1884 aucmd_restbuf(&aco); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1885 /* Careful: autocommands may have made "vimbuf" invalid! */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1886 } |
7 | 1887 } |
1888 } | |
1889 } | |
1890 | |
1891 void | |
1892 Delete(vimbuf, ...) | |
1893 VIBUF vimbuf; | |
1894 | |
1895 PREINIT: | |
1896 long i, lnum = 0, count = 0; | |
1897 PPCODE: | |
1898 if (buf_valid(vimbuf)) | |
1899 { | |
1900 if (items == 2) | |
1901 { | |
4105 | 1902 lnum = (long) SvIV(ST(1)); |
7 | 1903 count = 1; |
1904 } | |
1905 else if (items == 3) | |
1906 { | |
4105 | 1907 lnum = (long) SvIV(ST(1)); |
1908 count = (long) 1 + SvIV(ST(2)) - lnum; | |
2982 | 1909 if (count == 0) |
7 | 1910 count = 1; |
2982 | 1911 if (count < 0) |
7 | 1912 { |
1913 lnum -= count; | |
1914 count = -count; | |
1915 } | |
1916 } | |
1917 if (items >= 2) | |
1918 { | |
1919 for (i = 0; i < count; i++) | |
1920 { | |
1921 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count) | |
1922 { | |
918 | 1923 aco_save_T aco; |
1924 | |
1925 /* set curwin/curbuf for "vimbuf" and save some things */ | |
1926 aucmd_prepbuf(&aco, vimbuf); | |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1927 if (curbuf == vimbuf) |
7 | 1928 { |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1929 /* Only when a window was found. */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1930 if (u_savedel(lnum, 1) == OK) |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1931 { |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1932 ml_delete(lnum); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1933 check_cursor(); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1934 deleted_lines_mark(lnum, 1L); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1935 } |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1936 |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1937 /* restore curwin/curbuf and a few other things */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1938 aucmd_restbuf(&aco); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1939 /* Careful: autocommands may have made "vimbuf" |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1940 * invalid! */ |
7 | 1941 } |
934 | 1942 |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
28815
diff
changeset
|
1943 update_curbuf(UPD_VALID); |
7 | 1944 } |
1945 } | |
1946 } | |
1947 } | |
1948 | |
1949 void | |
1950 Append(vimbuf, ...) | |
1951 VIBUF vimbuf; | |
1952 | |
1953 PREINIT: | |
1954 int i; | |
1955 long lnum; | |
1956 char *line; | |
1957 PPCODE: | |
1958 if (buf_valid(vimbuf)) | |
1959 { | |
1960 if (items < 3) | |
1961 croak("Usage: VIBUF::Append(vimbuf, lnum, @lines)"); | |
1962 | |
4105 | 1963 lnum = (long) SvIV(ST(1)); |
7 | 1964 for (i = 2; i < items; i++, lnum++) |
1965 { | |
1966 line = SvPV(ST(i),PL_na); | |
1967 if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL) | |
1968 { | |
918 | 1969 aco_save_T aco; |
1970 | |
1971 /* set curwin/curbuf for "vimbuf" and save some things */ | |
1972 aucmd_prepbuf(&aco, vimbuf); | |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1973 if (curbuf == vimbuf) |
7 | 1974 { |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1975 /* Only when a window for "vimbuf" was found. */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1976 if (u_inssub(lnum + 1) == OK) |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1977 { |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1978 ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1979 appended_lines_mark(lnum, 1L); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1980 } |
934 | 1981 |
31263
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1982 /* restore curwin/curbuf and a few other things */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1983 aucmd_restbuf(&aco); |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1984 /* Careful: autocommands may have made "vimbuf" invalid! */ |
d8e7d725a666
patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
1985 } |
934 | 1986 |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
28815
diff
changeset
|
1987 update_curbuf(UPD_VALID); |
7 | 1988 } |
1989 } | |
1990 } | |
1991 | |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
1992 #ifdef __GNUC__ |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
1993 # pragma GCC diagnostic pop |
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7856
diff
changeset
|
1994 #endif |