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