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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 * if_perl.xs: Main code for Perl interface support.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 * Mostly written by Sven Verdoolaege.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 #define _memory_h /* avoid memset redeclaration */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #define IN_PERL_FILE /* don't include if_perl.pro from proto.h */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
5261
b882d4b14e00 updated for version 7.4b.007
Bram Moolenaar <bram@vim.org>
parents: 4905
diff changeset
16 /*
5537
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
17 * Currently 32-bit version of ActivePerl is built with VC6 (or MinGW since
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28
5560
4b92012f6b18 updated for version 7.4.128
Bram Moolenaar <bram@vim.org>
parents: 5558
diff changeset
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
4b92012f6b18 updated for version 7.4.128
Bram Moolenaar <bram@vim.org>
parents: 5558
diff changeset
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
4b92012f6b18 updated for version 7.4.128
Bram Moolenaar <bram@vim.org>
parents: 5558
diff changeset
36 #endif
4b92012f6b18 updated for version 7.4.128
Bram Moolenaar <bram@vim.org>
parents: 5558
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * Work around clashes between Perl and Vim namespace. proto.h doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 * include if_perl.pro and perlsfio.pro when IN_PERL_FILE is defined, because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * we need the CV typedef. proto.h can't be moved to after including
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 * if_perl.h, because we get all sorts of name clashes then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
99 /*
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
100 * Quoting Jan Dubois of Active State:
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
101 * ActivePerl build 822 still identifies itself as 5.8.8 but already
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
102 * contains many of the changes from the upcoming Perl 5.8.9 release.
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
103 *
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
104 * The changes include addition of two symbols (Perl_sv_2iv_flags,
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
105 * Perl_newXS_flags) not present in earlier releases.
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
106 *
1395
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
107 * Jan Dubois suggested the following guarding scheme.
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
108 *
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
109 * Active State defined ACTIVEPERL_VERSION as a string in versions before
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
110 * 5.8.8; and so the comparison to 822 below needs to be guarded.
1387
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
111 */
1395
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
112 #if (PERL_REVISION == 5) && (PERL_VERSION == 8) && (PERL_SUBVERSION >= 8)
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
113 # if (ACTIVEPERL_VERSION >= 822) || (PERL_SUBVERSION >= 9)
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
114 # define PERL589_OR_LATER
c845dcf7fafa updated for version 7.1-110
vimboss
parents: 1387
diff changeset
115 # endif
1387
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
116 #endif
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
117 #if (PERL_REVISION == 5) && (PERL_VERSION >= 9)
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
118 # define PERL589_OR_LATER
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
119 #endif
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 #ifndef EXTERN_C
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 # define EXTERN_C
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 /* Compatibility hacks over */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 * Wrapper defines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 # define perl_alloc dll_perl_alloc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 # define perl_construct dll_perl_construct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 # define perl_parse dll_perl_parse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 # define perl_run dll_perl_run
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 # define perl_destruct dll_perl_destruct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 # define Perl_call_argv dll_Perl_call_argv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 # define Perl_call_pv dll_Perl_call_pv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 # define Perl_eval_sv dll_Perl_eval_sv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 # define Perl_get_sv dll_Perl_get_sv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 # define Perl_eval_pv dll_Perl_eval_pv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 # define Perl_call_method dll_Perl_call_method
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 # define Perl_dowantarray dll_Perl_dowantarray
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 # define Perl_free_tmps dll_Perl_free_tmps
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 # define Perl_gv_stashpv dll_Perl_gv_stashpv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 # define Perl_markstack_grow dll_Perl_markstack_grow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 # define Perl_newXS dll_Perl_newXS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 # define Perl_newSV dll_Perl_newSV
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 # define Perl_newSViv dll_Perl_newSViv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 # define Perl_newSVpv dll_Perl_newSVpv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 # define Perl_pop_scope dll_Perl_pop_scope
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 # define Perl_push_scope dll_Perl_push_scope
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 # define Perl_save_int dll_Perl_save_int
5960
c052937aae8c updated for version 7.4.321
Bram Moolenaar <bram@vim.org>
parents: 5706
diff changeset
220 # if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
c052937aae8c updated for version 7.4.321
Bram Moolenaar <bram@vim.org>
parents: 5706
diff changeset
221 # define Perl_save_strlen dll_Perl_save_strlen
c052937aae8c updated for version 7.4.321
Bram Moolenaar <bram@vim.org>
parents: 5706
diff changeset
222 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 # define Perl_stack_grow dll_Perl_stack_grow
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 # define Perl_set_context dll_Perl_set_context
3050
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
225 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
6872
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
226 # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
227 # if (PERL_REVISION == 5) && (PERL_VERSION < 22)
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
228 # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
229 # endif
3050
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
230 # else
6872
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
231 # define Perl_sv_2bool dll_Perl_sv_2bool
3050
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
232 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 # define Perl_sv_2iv dll_Perl_sv_2iv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 # define Perl_sv_2mortal dll_Perl_sv_2mortal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 # define Perl_sv_2pv_flags dll_Perl_sv_2pv_flags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 # define Perl_sv_2pv_nolen dll_Perl_sv_2pv_nolen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 # define Perl_sv_2pv dll_Perl_sv_2pv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 # define Perl_sv_bless dll_Perl_sv_bless
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 # define Perl_sv_catpvn_flags dll_Perl_sv_catpvn_flags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 # define Perl_sv_catpvn dll_Perl_sv_catpvn
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
252 # define Perl_sv_2iv_flags dll_Perl_sv_2iv_flags
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 # define Perl_sv_free dll_Perl_sv_free
1711
20b2e52ca962 updated for version 7.2-009
vimboss
parents: 1681
diff changeset
256 # if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
20b2e52ca962 updated for version 7.2-009
vimboss
parents: 1681
diff changeset
257 # define Perl_sv_free2 dll_Perl_sv_free2
20b2e52ca962 updated for version 7.2-009
vimboss
parents: 1681
diff changeset
258 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 # define Perl_sv_isa dll_Perl_sv_isa
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 # define Perl_sv_magic dll_Perl_sv_magic
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 # define Perl_sv_setiv dll_Perl_sv_setiv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 # define Perl_sv_setpv dll_Perl_sv_setpv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 # define Perl_sv_setpvn dll_Perl_sv_setpvn
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 # define Perl_sv_setsv_flags dll_Perl_sv_setsv_flags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 # define Perl_sv_setsv dll_Perl_sv_setsv
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 # define Perl_sv_upgrade dll_Perl_sv_upgrade
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 # define Perl_Tstack_sp_ptr dll_Perl_Tstack_sp_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 # define Perl_Top_ptr dll_Perl_Top_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 # define Perl_Tstack_base_ptr dll_Perl_Tstack_base_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 # define Perl_Tstack_max_ptr dll_Perl_Tstack_max_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 # define Perl_Ttmps_ix_ptr dll_Perl_Ttmps_ix_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 # define Perl_Ttmps_floor_ptr dll_Perl_Ttmps_floor_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 # define Perl_Tmarkstack_ptr_ptr dll_Perl_Tmarkstack_ptr_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 # define Perl_Tmarkstack_max_ptr dll_Perl_Tmarkstack_max_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 # define Perl_TSv_ptr dll_Perl_TSv_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 # define Perl_TXpv_ptr dll_Perl_TXpv_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 # define Perl_Tna_ptr dll_Perl_Tna_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 # define Perl_Idefgv_ptr dll_Perl_Idefgv_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 # define Perl_Ierrgv_ptr dll_Perl_Ierrgv_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286
1765
c050d5bbe79b updated for version 7.2-063
vimboss
parents: 1711
diff changeset
287 # define Perl_sys_init dll_Perl_sys_init
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
288 # define Perl_sys_term dll_Perl_sys_term
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
289 # define Perl_ISv_ptr dll_Perl_ISv_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
290 # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
291 # define Perl_Istack_base_ptr dll_Perl_Istack_base_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
292 # define Perl_Itmps_ix_ptr dll_Perl_Itmps_ix_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
293 # define Perl_Itmps_floor_ptr dll_Perl_Itmps_floor_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
294 # define Perl_IXpv_ptr dll_Perl_IXpv_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
295 # define Perl_Ina_ptr dll_Perl_Ina_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
296 # define Perl_Imarkstack_ptr_ptr dll_Perl_Imarkstack_ptr_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
297 # define Perl_Imarkstack_max_ptr dll_Perl_Imarkstack_max_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
298 # define Perl_Istack_sp_ptr dll_Perl_Istack_sp_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
299 # define Perl_Iop_ptr dll_Perl_Iop_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
300 # define Perl_call_list dll_Perl_call_list
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
301 # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
302 # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
6872
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
303 # if (PERL_REVISION == 5) && (PERL_VERSION >= 22)
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
304 # define Perl_xs_handshake dll_Perl_xs_handshake
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
305 # define Perl_xs_boot_epilog dll_Perl_xs_boot_epilog
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
306 # endif
3820
dde6d0216a08 updated for version 7.3.668
Bram Moolenaar <bram@vim.org>
parents: 3818
diff changeset
307 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
5706
705f398ce6f5 updated for version 7.4.198
Bram Moolenaar <bram@vim.org>
parents: 5560
diff changeset
308 # ifdef USE_ITHREADS
705f398ce6f5 updated for version 7.4.198
Bram Moolenaar <bram@vim.org>
parents: 5560
diff changeset
309 # define PL_thr_key *dll_PL_thr_key
705f398ce6f5 updated for version 7.4.198
Bram Moolenaar <bram@vim.org>
parents: 5560
diff changeset
310 # endif
3820
dde6d0216a08 updated for version 7.3.668
Bram Moolenaar <bram@vim.org>
parents: 3818
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
329
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 * Declare HANDLE for perl.dll and function pointers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 static HANDLE hPerlLib = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 static void (*perl_construct)(PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 static void (*perl_destruct)(PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 static void (*perl_free)(PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 static int (*perl_run)(PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
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
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 static I32 (*Perl_dowantarray)(pTHX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 static void (*Perl_free_tmps)(pTHX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 static CV* (*Perl_newXS)(pTHX_ char*, XSUBADDR_t, char*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 static SV* (*Perl_newSV)(pTHX_ STRLEN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 static SV* (*Perl_newSViv)(pTHX_ IV);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 static SV* (*Perl_newSVpv)(pTHX_ const char*, STRLEN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 static I32 (*Perl_call_argv)(pTHX_ const char*, I32, char**);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 static I32 (*Perl_call_pv)(pTHX_ const char*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 static I32 (*Perl_eval_sv)(pTHX_ SV*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 static SV* (*Perl_get_sv)(pTHX_ const char*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 static SV* (*Perl_eval_pv)(pTHX_ const char*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 static SV* (*Perl_call_method)(pTHX_ const char*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 static void (*Perl_pop_scope)(pTHX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 static void (*Perl_push_scope)(pTHX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
c052937aae8c updated for version 7.4.321
Bram Moolenaar <bram@vim.org>
parents: 5706
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
395 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 static IV (*Perl_sv_2iv)(pTHX_ SV*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
415 static IV (*Perl_sv_2iv_flags)(pTHX_ SV* sv, I32 flags);
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 static void (*Perl_sv_free)(pTHX_ SV*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 static int (*Perl_sv_isa)(pTHX_ SV*, const char*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 static void (*Perl_sv_magic)(pTHX_ SV*, SV*, int, const char*, I32);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 static void (*Perl_sv_setiv)(pTHX_ SV*, IV);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 static void (*Perl_sv_setpv)(pTHX_ SV*, const char*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 static SV*** (*Perl_Tstack_sp_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 static OP** (*Perl_Top_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 static SV*** (*Perl_Tstack_base_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 static SV*** (*Perl_Tstack_max_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 static I32* (*Perl_Ttmps_ix_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 static I32* (*Perl_Ttmps_floor_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 static I32** (*Perl_Tmarkstack_ptr_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 static I32** (*Perl_Tmarkstack_max_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 static SV** (*Perl_TSv_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 static XPV** (*Perl_TXpv_ptr)(register PerlInterpreter*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
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
805ad8488dc8 updated for version 7.4.117
Bram Moolenaar <bram@vim.org>
parents: 5267
diff changeset
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
20b2e52ca962 updated for version 7.2-009
vimboss
parents: 1681
diff changeset
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
c050d5bbe79b updated for version 7.2-063
vimboss
parents: 1711
diff changeset
449 static void (*Perl_sys_init)(int* argc, char*** argv);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
450 static void (*Perl_sys_term)(void);
3818
cd36c0fed43e updated for version 7.3.667
Bram Moolenaar <bram@vim.org>
parents: 3728
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
454 static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
455 static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
456 static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
457 static XPV** (*Perl_IXpv_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
458 static I32* (*Perl_Itmps_ix_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
459 static I32* (*Perl_Itmps_floor_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
460 static STRLEN* (*Perl_Ina_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
461 static I32** (*Perl_Imarkstack_ptr_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
462 static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
463 static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
464 static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
465 static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
cd36c0fed43e updated for version 7.3.667
Bram Moolenaar <bram@vim.org>
parents: 3728
diff changeset
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
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
470 static I32 (*Perl_xs_handshake)(const U32, void *, const char *, ...);
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
dde6d0216a08 updated for version 7.3.668
Bram Moolenaar <bram@vim.org>
parents: 3818
diff changeset
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
cd36c0fed43e updated for version 7.3.667
Bram Moolenaar <bram@vim.org>
parents: 3728
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 * Table of name to function pointer of perl.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 static struct {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 char* name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 PERL_PROC* ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 } perl_funcname_table[] = {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 {"perl_alloc", (PERL_PROC*)&perl_alloc},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 {"perl_construct", (PERL_PROC*)&perl_construct},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 {"perl_destruct", (PERL_PROC*)&perl_destruct},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 {"perl_free", (PERL_PROC*)&perl_free},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 {"perl_run", (PERL_PROC*)&perl_run},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 {"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 {"Perl_markstack_grow", (PERL_PROC*)&Perl_markstack_grow},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 {"Perl_newXS", (PERL_PROC*)&Perl_newXS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 {"Perl_newSV", (PERL_PROC*)&Perl_newSV},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 {"Perl_newSViv", (PERL_PROC*)&Perl_newSViv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 {"Perl_newSVpv", (PERL_PROC*)&Perl_newSVpv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 {"Perl_call_argv", (PERL_PROC*)&Perl_call_argv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 {"Perl_call_pv", (PERL_PROC*)&Perl_call_pv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 {"Perl_eval_sv", (PERL_PROC*)&Perl_eval_sv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 {"Perl_get_sv", (PERL_PROC*)&Perl_get_sv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 {"Perl_eval_pv", (PERL_PROC*)&Perl_eval_pv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 {"Perl_call_method", (PERL_PROC*)&Perl_call_method},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 {"Perl_pop_scope", (PERL_PROC*)&Perl_pop_scope},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 {"Perl_push_scope", (PERL_PROC*)&Perl_push_scope},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
c052937aae8c updated for version 7.4.321
Bram Moolenaar <bram@vim.org>
parents: 5706
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
559 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 {"Perl_sv_2pv_flags", (PERL_PROC*)&Perl_sv_2pv_flags},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
573 {"Perl_sv_2iv_flags", (PERL_PROC*)&Perl_sv_2iv_flags},
35f3b20de2dd updated for version 7.1-102
vimboss
parents: 934
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 {"Perl_sv_free", (PERL_PROC*)&Perl_sv_free},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 {"Perl_sv_isa", (PERL_PROC*)&Perl_sv_isa},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 {"Perl_sv_magic", (PERL_PROC*)&Perl_sv_magic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 {"Perl_sv_setiv", (PERL_PROC*)&Perl_sv_setiv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 {"Perl_sv_setpv", (PERL_PROC*)&Perl_sv_setpv},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 {"Perl_Tstack_sp_ptr", (PERL_PROC*)&Perl_Tstack_sp_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 {"Perl_Top_ptr", (PERL_PROC*)&Perl_Top_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 {"Perl_Tstack_base_ptr", (PERL_PROC*)&Perl_Tstack_base_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 {"Perl_Tstack_max_ptr", (PERL_PROC*)&Perl_Tstack_max_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 {"Perl_Ttmps_ix_ptr", (PERL_PROC*)&Perl_Ttmps_ix_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 {"Perl_Ttmps_floor_ptr", (PERL_PROC*)&Perl_Ttmps_floor_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 {"Perl_Tmarkstack_ptr_ptr", (PERL_PROC*)&Perl_Tmarkstack_ptr_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 {"Perl_Tmarkstack_max_ptr", (PERL_PROC*)&Perl_Tmarkstack_max_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 {"Perl_TSv_ptr", (PERL_PROC*)&Perl_TSv_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
20b2e52ca962 updated for version 7.2-009
vimboss
parents: 1681
diff changeset
607 {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
1765
c050d5bbe79b updated for version 7.2-063
vimboss
parents: 1711
diff changeset
608 {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
609 {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
3050
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
617 {"Perl_Itmps_ix_ptr", (PERL_PROC*)&Perl_Itmps_ix_ptr},
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
620 {"Perl_Imarkstack_ptr_ptr", (PERL_PROC*)&Perl_Imarkstack_ptr_ptr},
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
624 {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
629 {"Perl_xs_handshake", (PERL_PROC*)&Perl_xs_handshake},
64ff14cbb665 patch 7.4.756
Bram Moolenaar <bram@vim.org>
parents: 5960
diff changeset
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
705f398ce6f5 updated for version 7.4.198
Bram Moolenaar <bram@vim.org>
parents: 5560
diff changeset
633 # ifdef USE_ITHREADS
3820
dde6d0216a08 updated for version 7.3.668
Bram Moolenaar <bram@vim.org>
parents: 3818
diff changeset
634 {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
5706
705f398ce6f5 updated for version 7.4.198
Bram Moolenaar <bram@vim.org>
parents: 5560
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
3050
22550986c713 updated for version 7.3.297
Bram Moolenaar <bram@vim.org>
parents: 2982
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 {"", NULL},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 * Make all runtime-links of perl.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 * 2. Get pointer to perl function by GetProcAddress.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 * 3. Repeat 2, until get all functions will be used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 * Parameter 'libname' provides name of DLL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 * Return OK or FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 perl_runtime_link_init(char *libname, int verbose)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 if (hPerlLib != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 for (i = 0; perl_funcname_table[i].ptr; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 perl_funcname_table[i].name)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 hPerlLib = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 * If runtime-link-perl(DLL) was loaded successfully, return TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 * There were no DLL loaded, return FALSE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 #endif /* DYNAMIC_PERL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 * perl_init(): initialize perl interpreter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 * We have to call perl_parse to initialize some structures,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 * there's nothing to actually parse.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 {
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
731 char *bootargs[] = { "VI", NULL };
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
732 int argc = 3;
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
733 static char *argv[] = { "", "-e", "" };
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
735 #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
1765
c050d5bbe79b updated for version 7.2-063
vimboss
parents: 1711
diff changeset
736 Perl_sys_init(&argc, (char***)&argv);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
737 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 perl_interp = perl_alloc();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 perl_construct(perl_interp);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
740 perl_parse(perl_interp, xs_init, argc, argv, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 perl_call_argv("VIM::bootstrap", (long)G_DISCARD, bootargs);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 VIM_init();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 #ifdef USE_SFIO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 sfdisc(PerlIO_stdout(), sfdcnewvim());
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 sfdisc(PerlIO_stderr(), sfdcnewvim());
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 sfsetbuf(PerlIO_stdout(), NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 if (perl_interp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 perl_run(perl_interp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 perl_destruct(perl_interp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 perl_free(perl_interp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 perl_interp = NULL;
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
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
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1423
diff changeset
767 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 * msg_split(): send a message to the message handling routines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 * split at '\n' first though.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 char *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 char *token = (char *)s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782
1423
01a0da54773e updated for version 7.1-138
vimboss
parents: 1395
diff changeset
783 while ((next = strchr(token, '\n')) && !got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 token = next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 }
1423
01a0da54773e updated for version 7.1-138
vimboss
parents: 1395
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 * This stub is needed because an "#ifdef FEAT_EVAL" around Eval() doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 * work properly.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 * Create a new reference to an SV pointing to the SCR structure
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
810 * The b_perl_private/w_perl_private part of the SCR structure points to the
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
811 * SV, so there can only be one such SV for a particular SCR structure. When
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
812 * the last reference has gone (DESTROY is called),
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
813 * b_perl_private/w_perl_private is reset; When the screen goes away before
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 * all references are gone, the value of the SV is reset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 * any subsequent use of any of those reference will produce
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 * a warning. (see typemap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 */
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
818
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
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
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
821 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
822 sv_upgrade(rv, SVt_RV);
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
823 if (ptr->w_perl_private == NULL)
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
824 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
825 ptr->w_perl_private = newSV(0);
3344
dec4338a7da2 updated for version 7.3.439
Bram Moolenaar <bram@vim.org>
parents: 3050
diff changeset
826 sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
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
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
829 SvRV(rv) = ptr->w_perl_private;
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
830 SvROK_on(rv);
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
831 return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
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
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
836 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
837 sv_upgrade(rv, SVt_RV);
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
838 if (ptr->b_perl_private == NULL)
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
839 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
840 ptr->b_perl_private = newSV(0);
3344
dec4338a7da2 updated for version 7.3.439
Bram Moolenaar <bram@vim.org>
parents: 3050
diff changeset
841 sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
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
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
844 SvRV(rv) = ptr->b_perl_private;
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
845 SvROK_on(rv);
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
846 return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
847 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 * perl_win_free
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4236
diff changeset
859 * Remove all references to the window to be destroyed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 #ifndef PROTO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 I32 cur_val(pTHX_ IV iv, SV *sv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 * Handler for the magic variables $main::curwin and $main::curbuf.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 * The handler is put into the magic vtbl for these variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 * (This is effectively a C-level equivalent of a tied variable).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 * There is no "set" function as the variables are read-only.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 I32 cur_val(pTHX_ IV iv, SV *sv)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 I32 cur_val(IV iv, SV *sv)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 SV *rv;
14350
142c0083b3b8 patch 8.1.0190: Perl refcounts are wrong
Christian Brabandt <cb@256bit.org>
parents: 14303
diff changeset
907
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 if (iv == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 rv = newWINrv(newSV(0), curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 #endif /* !PROTO */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 struct ufuncs cw_funcs = { cur_val, 0, 0 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 struct ufuncs cb_funcs = { cur_val, 0, 1 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 * VIM_init(): Vim-specific initialisation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 * Make the magical main::curwin and main::curbuf variables
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 static char cw[] = "main::curwin";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 static char cb[] = "main::curbuf";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 SV *sv;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 sv = perl_get_sv(cw, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 sv_magic(sv, NULL, 'U', (char *)&cw_funcs, sizeof(cw_funcs));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 SvREADONLY_on(sv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 sv = perl_get_sv(cb, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 sv_magic(sv, NULL, 'U', (char *)&cb_funcs, sizeof(cb_funcs));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 SvREADONLY_on(sv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 * Setup the Safe compartment.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 * It shouldn't be a fatal error if the Safe module is missing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 * XXX: Only shares the 'Msg' routine (which has to be called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 * like 'Msg(...)').
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 (void)perl_eval_pv( "if ( eval( 'require Safe' ) ) { $VIM::safe = Safe->new(); $VIM::safe->share_from( 'VIM', ['Msg'] ); }", G_DISCARD | G_VOID );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 #ifdef DYNAMIC_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 static char *e_noperl = N_("Sorry, this command is disabled: the Perl library could not be loaded.");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 * ":perl"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 char *err;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 char *script;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 STRLEN length;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 SV *sv;
2255
e5265e4d4725 Avoid compiler warnings.
Bram Moolenaar <bram@vim.org>
parents: 2096
diff changeset
970 #ifdef HAVE_SANDBOX
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 SV *safe;
2255
e5265e4d4725 Avoid compiler warnings.
Bram Moolenaar <bram@vim.org>
parents: 2096
diff changeset
972 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 script = (char *)script_get(eap, eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 if (eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 vim_free(script);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 if (perl_interp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 #ifdef DYNAMIC_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 if (!perl_enabled(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 vim_free(script);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 perl_init();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 dSP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 ENTER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 SAVETMPS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 if (script == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 sv = newSVpv((char *)eap->arg, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 sv = newSVpv(script, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 vim_free(script);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 {
2982
a56259157c93 updated for version 7.3.263
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1009 safe = perl_get_sv("VIM::safe", FALSE);
1934
80e5b1da6676 updated for version 7.2-231
vimboss
parents: 1929
diff changeset
1010 # ifndef MAKE_TEST /* avoid a warning for unreachable code */
1990
bce687811199 updated for version 7.2-287
vimboss
parents: 1934
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 else
1934
80e5b1da6676 updated for version 7.2-231
vimboss
parents: 1929
diff changeset
1014 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 PUSHMARK(SP);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 XPUSHs(safe);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 XPUSHs(sv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 PUTBACK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 perl_call_method("reval", G_DISCARD);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 perl_eval_sv(sv, G_DISCARD | G_NOARGS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 SvREFCNT_dec(sv);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 FREETMPS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 LEAVE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 if (!length)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 msg_split((char_u *)err, highlight_attr[HLF_E]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 char *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 if (SvOK(GvSV(PL_defgv)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 str = SvPV(GvSV(PL_defgv), PL_na);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 ml_replace(*line, (char_u *)str, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 changed_bytes(*line, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 deleted_lines_mark(*line, 1L);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 --(*end);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 --(*line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 * ":perldo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 STRLEN length;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 SV *sv;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 char *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 if (perl_interp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 #ifdef DYNAMIC_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 if (!perl_enabled(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 perl_init();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 dSP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 length = strlen((char *)eap->arg);
129
2983cde45542 updated for version 7.0044
vimboss
parents: 7
diff changeset
1347 sv = newSV(length + sizeof("sub VIM::perldo {") - 1 + 1);
2983cde45542 updated for version 7.0044
vimboss
parents: 7
diff changeset
1348 sv_setpvn(sv, "sub VIM::perldo {", sizeof("sub VIM::perldo {") - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 sv_catpvn(sv, (char *)eap->arg, length);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 sv_catpvn(sv, "}", 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 perl_eval_sv(sv, G_DISCARD | G_NOARGS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 if (length)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 goto err;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 ENTER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 SAVETMPS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 for (i = eap->line1; i <= eap->line2; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
2983cde45542 updated for version 7.0044
vimboss
parents: 7
diff changeset
1367 sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 PUSHMARK(sp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 SPAGAIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 if (SvTRUEx(POPs))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 if (replace_line(&i, &eap->line2) != OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 PUTBACK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 PUTBACK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 FREETMPS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 LEAVE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 if (!length)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 err:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 msg_split((char_u *)str, highlight_attr[HLF_E]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 XS(boot_VIM);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 xs_init(pTHX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 char *file = __FILE__;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 /* DynaLoader is a special case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 newXS("VIM::bootstrap", boot_VIM, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 typedef win_T * VIWIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 typedef buf_T * VIBUF;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 MODULE = VIM PACKAGE = VIM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 Msg(text, hl=NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 char *text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 char *hl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 if (text != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 msg_split((char_u *)text, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 SetOption(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 char *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 if (line != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 DoCommand(line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 char *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 if (line != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 do_cmdline_cmd((char_u *)line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 Eval(str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 char *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 char_u *value;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 if (value == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 XPUSHs(sv_2mortal(newSViv(0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 XPUSHs(sv_2mortal(newSVpv("", 0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 XPUSHs(sv_2mortal(newSViv(1)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 XPUSHs(sv_2mortal(newSVpv((char *)value, 0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 vim_free(value);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 Buffers(...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 buf_T *vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 int i, b;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 if (items == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 ++i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 XPUSHs(sv_2mortal(newSViv(i)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 for (i = 0; i < items; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 SV *sv = ST(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 if (SvIOK(sv))
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1646 b = (int) SvIV(ST(i));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 char_u *pat;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 STRLEN len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 pat = (char_u *)SvPV(sv, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 --emsg_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 if (b >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 vimbuf = buflist_findnr(b);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 Windows(...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 win_T *vimwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 int i, w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 if (items == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 XPUSHs(sv_2mortal(newSViv(win_count())));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 for (i = 0; i < items; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 {
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1689 w = (int) SvIV(ST(i));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 vimwin = win_find_nr(w);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 MODULE = VIM PACKAGE = VIWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 DESTROY(win)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 VIWIN win
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 CODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 if (win_valid(win))
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
1704 win->w_perl_private = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 SV *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 Buffer(win)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 VIWIN win
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 CODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 if (!win_valid(win))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 RETVAL = newBUFrv(newSV(0), win->w_buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 OUTPUT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 RETVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 SetHeight(win, height)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 VIWIN win
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 int height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 win_T *savewin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 if (!win_valid(win))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 savewin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 curwin = win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 win_setheight(height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 curwin = savewin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 PPCODE:
2982
a56259157c93 updated for version 7.3.263
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1738 if (items == 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 EXTEND(sp, 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 if (!win_valid(win))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 }
2982
a56259157c93 updated for version 7.3.263
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1746 else if (items == 3)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 int lnum, col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 if (!win_valid(win))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 win = curwin;
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1752 lnum = (int) SvIV(ST(1));
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1753 col = (int) SvIV(ST(2));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 win->w_cursor.lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 MODULE = VIM PACKAGE = VIBUF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 DESTROY(vimbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 CODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 if (buf_valid(vimbuf))
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 129
diff changeset
1769 vimbuf->b_perl_private = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 Name(vimbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 if (!buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 vimbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 /* No file name returns an empty string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 if (vimbuf->b_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 XPUSHs(sv_2mortal(newSVpv("", 0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 XPUSHs(sv_2mortal(newSVpv((char *)vimbuf->b_fname, 0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 Number(vimbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 if (!buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 vimbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 XPUSHs(sv_2mortal(newSViv(vimbuf->b_fnum)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 Count(vimbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 if (!buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 vimbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 XPUSHs(sv_2mortal(newSViv(vimbuf->b_ml.ml_line_count)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 Get(vimbuf, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 char_u *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 long lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 if (buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 for (i = 1; i < items; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 {
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1815 lnum = (long) SvIV(ST(i));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 line = ml_get_buf(vimbuf, lnum, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 XPUSHs(sv_2mortal(newSVpv((char *)line, 0)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 Set(vimbuf, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 long lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 char *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 if (buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 if (items < 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 croak("Usage: VIBUF::Set(vimbuf, lnum, @lines)");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1838 lnum = (long) SvIV(ST(1));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 for(i = 2; i < items; i++, lnum++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 line = SvPV(ST(i),PL_na);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 {
918
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1844 aco_save_T aco;
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
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
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 933
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 Delete(vimbuf, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 long i, lnum = 0, count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 if (buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 if (items == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 {
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1876 lnum = (long) SvIV(ST(1));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 else if (items == 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 {
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1881 lnum = (long) SvIV(ST(1));
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1882 count = (long) 1 + SvIV(ST(2)) - lnum;
2982
a56259157c93 updated for version 7.3.263
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1883 if (count == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 count = 1;
2982
a56259157c93 updated for version 7.3.263
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
1885 if (count < 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 lnum -= count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 count = -count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 if (items >= 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 for (i = 0; i < count; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 {
918
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1897 aco_save_T aco;
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1898
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1899 /* set curwin/curbuf for "vimbuf" and save some things */
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 }
934
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 933
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 Append(vimbuf, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 VIBUF vimbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 PREINIT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 long lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 char *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 PPCODE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 if (buf_valid(vimbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 if (items < 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 croak("Usage: VIBUF::Append(vimbuf, lnum, @lines)");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936
4105
f7e3f87ac992 updated for version 7.3.806
Bram Moolenaar <bram@vim.org>
parents: 3820
diff changeset
1937 lnum = (long) SvIV(ST(1));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 for (i = 2; i < items; i++, lnum++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 line = SvPV(ST(i),PL_na);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 {
918
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1943 aco_save_T aco;
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1944
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
1945 /* set curwin/curbuf for "vimbuf" and save some things */
a07007166d51 updated for version 7.0-044
vimboss
parents: 714
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 933
diff changeset
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
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 933
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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