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