annotate src/if_perl.xs @ 33299:4c975fa0a442 v9.0.1915

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