annotate src/if_ruby.c @ 33815:08f9e1eac4cf v9.0.2123

patch 9.0.2123: Problem with initializing the length of range() lists Commit: https://github.com/vim/vim/commit/df63da98d8dc284b1c76cfe1b17fa0acbd6094d8 Author: Christian Brabandt <cb@256bit.org> Date: Thu Nov 23 20:14:28 2023 +0100 patch 9.0.2123: Problem with initializing the length of range() lists Problem: Problem with initializing the length of range() lists Solution: Set length explicitly when it shouldn't contain any items range() may cause a wrong calculation of list length, which may later then cause a segfault in list_find(). This is usually not a problem, because range_list_materialize() calculates the length, when it materializes the list. In addition, in list_find() when the length of the range was wrongly initialized, it may seem to be valid, so the check for list index out-of-bounds will not be true, because it is called before the list is actually materialized. And so we may eventually try to access a null pointer, causing a segfault. So this patch does 3 things: - In f_range(), when we know that the list should be empty, explicitly set the list->lv_len value to zero. This should happen, when start is larger than end (in case the stride is positive) or end is larger than start when the stride is negative. This should fix the underlying issue properly. However, - as a safety measure, let's check that the requested index is not out of range one more time, after the list has been materialized and return NULL in case it suddenly is. - add a few more tests to verify the behaviour. fixes: #13557 closes: #13563 Co-authored-by: Tim Pope <tpope@github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 23 Nov 2023 20:30:07 +0100
parents 1a769647d661
children dbe616160092
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
4 *
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
5 * Ruby interface by Shugo Maeda
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
6 * with improvements by SegPhault (Ryan Paul)
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
7 * with improvements by Jon Maken
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
14736
3e9b24eac417 patch 8.1.0380: "make proto" doesn't work well
Christian Brabandt <cb@256bit.org>
parents: 14511
diff changeset
14 #include "protodef.h"
2624
bfd69bfb4149 updated for version 7.3.046
Bram Moolenaar <bram@vim.org>
parents: 2621
diff changeset
15 #ifdef HAVE_CONFIG_H
bfd69bfb4149 updated for version 7.3.046
Bram Moolenaar <bram@vim.org>
parents: 2621
diff changeset
16 # include "auto/config.h"
bfd69bfb4149 updated for version 7.3.046
Bram Moolenaar <bram@vim.org>
parents: 2621
diff changeset
17 #endif
2621
baa5f81197c8 updated for version 7.3.043
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
18
2683
0c7d6d01e058 updated for version 7.3.101
Bram Moolenaar <bram@vim.org>
parents: 2669
diff changeset
19 #include <stdio.h>
0c7d6d01e058 updated for version 7.3.101
Bram Moolenaar <bram@vim.org>
parents: 2669
diff changeset
20 #include <string.h>
0c7d6d01e058 updated for version 7.3.101
Bram Moolenaar <bram@vim.org>
parents: 2669
diff changeset
21
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 #ifdef _WIN32
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
23 # ifndef DYNAMIC_RUBY
19376
1cae476a7c82 patch 8.2.0246: MSVC: deprecation warnings with Ruby
Bram Moolenaar <Bram@vim.org>
parents: 19102
diff changeset
24 # define NT
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
25 # define IMPORT // For static dll usage __declspec(dllimport)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 # define RUBYEXTERN __declspec(dllimport)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 #ifndef RUBYEXTERN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 # define RUBYEXTERN extern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
33 #ifdef DYNAMIC_RUBY
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 * This is tricky. In ruby.h there is (inline) function rb_class_of()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 * definition. This function use these variables. But we want function to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 * use dll_* variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 */
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
39 # if RUBY_VERSION >= 24
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
40 # define USE_RUBY_INTEGER
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
41 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
42
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 # define rb_cFalseClass (*dll_rb_cFalseClass)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 # define rb_cFixnum (*dll_rb_cFixnum)
9293
946b62bbd871 commit https://github.com/vim/vim/commit/2016ae586b12513d973aabc30ed758b543114cbe
Christian Brabandt <cb@256bit.org>
parents: 9278
diff changeset
45 # if defined(USE_RUBY_INTEGER)
946b62bbd871 commit https://github.com/vim/vim/commit/2016ae586b12513d973aabc30ed758b543114cbe
Christian Brabandt <cb@256bit.org>
parents: 9278
diff changeset
46 # define rb_cInteger (*dll_rb_cInteger)
9278
97b0b568f820 commit https://github.com/vim/vim/commit/06469e979fe524ac6cb8f705ed4221aa267de11d
Christian Brabandt <cb@256bit.org>
parents: 9159
diff changeset
47 # endif
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
48 # if RUBY_VERSION >= 20
4193
e49b80f267dc updated for version 7.3.848
Bram Moolenaar <bram@vim.org>
parents: 4164
diff changeset
49 # define rb_cFloat (*dll_rb_cFloat)
e49b80f267dc updated for version 7.3.848
Bram Moolenaar <bram@vim.org>
parents: 4164
diff changeset
50 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 # define rb_cNilClass (*dll_rb_cNilClass)
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
52 # define rb_cString (*dll_rb_cString)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 # define rb_cSymbol (*dll_rb_cSymbol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 # define rb_cTrueClass (*dll_rb_cTrueClass)
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
55
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 /*
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
57 * All Ruby functions are exported with "__declspec(dllimport)" in ruby.h.
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
58 * But it causes trouble for these variables, because it is defined in this
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
59 * file. When defined this RUBY_EXPORT it modified to "extern" and be able
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
60 * to avoid this problem.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 */
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
62 # define RUBY_EXPORT
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
63
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
64 // Ruby 1.9 defines a number of static functions which use rb_num2long and
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
65 // rb_int2big
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
66 # define rb_num2long rb_num2long_stub
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
67 # define rb_int2big rb_int2big_stub
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
68
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
69 # if RUBY_VERSION >= 30 || VIM_SIZEOF_INT < VIM_SIZEOF_LONG
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
70 // Ruby 1.9 defines a number of static functions which use rb_fix2int and
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
71 // rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
72 # define rb_fix2int rb_fix2int_stub
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
73 # define rb_num2int rb_num2int_stub
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
74 # endif
4279
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
75
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
76 # if RUBY_VERSION == 21
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
77 // Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
78 // rb_gc_writebarrier_unprotect_promoted if USE_RGENGC
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
79 # define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
80 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
81
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
82 # if RUBY_VERSION >= 22
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
83 # define rb_gc_writebarrier_unprotect rb_gc_writebarrier_unprotect_stub
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
84 # endif
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
85
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
86 # if RUBY_VERSION >= 26
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
87 # define rb_ary_detransient rb_ary_detransient_stub
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
88 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
89
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
90 # if RUBY_VERSION >= 30
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
91 # define rb_check_type rb_check_type_stub
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
92 # define rb_num2uint rb_num2uint_stub
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
93 # define ruby_malloc_size_overflow ruby_malloc_size_overflow_stub
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
94 # endif
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
95
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
96 # if RUBY_VERSION >= 31
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
97 # define rb_debug_rstring_null_ptr rb_debug_rstring_null_ptr_stub
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
98 # define rb_unexpected_type rb_unexpected_type_stub
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
99 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
100
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
101 #endif // ifdef DYNAMIC_RUBY
15275
b408509d8292 patch 8.1.0646: cannot build with Ruby 2.6.0
Bram Moolenaar <Bram@vim.org>
parents: 15199
diff changeset
102
19971
a042d2a3b13d patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 19888
diff changeset
103 // On macOS pre-installed Ruby defines "SIZEOF_TIME_T" as "SIZEOF_LONG" so it
20548
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
104 // conflicts with the definition in config.h then causes a macro-redefined
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
105 // warning.
19971
a042d2a3b13d patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 19888
diff changeset
106 #ifdef SIZEOF_TIME_T
a042d2a3b13d patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 19888
diff changeset
107 # undef SIZEOF_TIME_T
a042d2a3b13d patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 19888
diff changeset
108 #endif
a042d2a3b13d patch 8.2.0541: Travis CI does not give compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 19888
diff changeset
109
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 #include <ruby.h>
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
111 #include <ruby/encoding.h>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112
20548
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
113 // See above.
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
114 #ifdef SIZEOF_TIME_T
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
115 # undef SIZEOF_TIME_T
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
116 #endif
6564dafe5005 patch 8.2.0828: Travis: regexp patttern doesn't work everywhere
Bram Moolenaar <Bram@vim.org>
parents: 19971
diff changeset
117
16338
366978ec2c03 patch 8.1.1174: cannot build with Ruby 1.8
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
118 #undef off_t // ruby defines off_t as _int64, Mingw uses long
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 #undef EXTERN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 #undef _
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
122 // T_DATA defined both by Ruby and Mac header files, hack around it...
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
123 #if defined(MACOS_X)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 # define __OPENTRANSPORT__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 # define __OPENTRANSPORTPROTOCOL__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 # define __OPENTRANSPORTPROVIDERS__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
129 /*
7364
fe2f6b92d806 commit https://github.com/vim/vim/commit/0d27f64f7188efef99062a3c5694027c12401670
Christian Brabandt <cb@256bit.org>
parents: 7360
diff changeset
130 * The TypedData_XXX macro family can be used since Ruby 1.9.2 but
fe2f6b92d806 commit https://github.com/vim/vim/commit/0d27f64f7188efef99062a3c5694027c12401670
Christian Brabandt <cb@256bit.org>
parents: 7360
diff changeset
131 * rb_data_type_t changed in 1.9.3, therefore require at least 2.0.
fe2f6b92d806 commit https://github.com/vim/vim/commit/0d27f64f7188efef99062a3c5694027c12401670
Christian Brabandt <cb@256bit.org>
parents: 7360
diff changeset
132 * The old Data_XXX macro family was deprecated on Ruby 2.2.
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
133 * Use TypedData_XXX if available.
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
134 */
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
135 #if defined(TypedData_Wrap_Struct) && (RUBY_VERSION >= 20)
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
136 # define USE_TYPEDDATA 1
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
137 #endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
138
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
139 /*
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4279
diff changeset
140 * Backward compatibility for Ruby 1.8 and earlier.
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
141 * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided.
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
142 * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
143 * RXXX_LEN(s) and RXXX_PTR(s) are provided.
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
144 */
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
145 #ifndef StringValuePtr
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
146 # define StringValuePtr(s) STR2CSTR(s)
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
147 #endif
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
148 #ifndef RARRAY_LEN
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
149 # define RARRAY_LEN(s) RARRAY(s)->len
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
150 #endif
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
151 #ifndef RARRAY_PTR
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
152 # define RARRAY_PTR(s) RARRAY(s)->ptr
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
153 #endif
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
154 #ifndef RSTRING_LEN
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
155 # define RSTRING_LEN(s) RSTRING(s)->len
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
156 #endif
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
157 #ifndef RSTRING_PTR
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
158 # define RSTRING_PTR(s) RSTRING(s)->ptr
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
159 #endif
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
160
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7823
diff changeset
161 #ifdef HAVE_DUP
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7823
diff changeset
162 # undef HAVE_DUP
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7823
diff changeset
163 #endif
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7823
diff changeset
164
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
165 // Avoid redefining TRUE/FALSE in vterm.h.
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
166 #ifdef TRUE
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
167 # undef TRUE
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
168 #endif
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
169 #ifdef FALSE
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
170 # undef FALSE
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
171 #endif
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
172
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 #include "version.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175
15882
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
176 #ifdef DYNAMIC_RUBY
33531
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
177 # ifdef MSWIN // must come after including vim.h, where it is defined
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
178 # define RUBY_PROC FARPROC
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
179 # define load_dll vimLoadLib
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
180 # define symbol_from_dll GetProcAddress
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
181 # define close_dll FreeLibrary
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
182 # define load_dll_error GetWin32Error
1a769647d661 patch 9.0.2013: confusing ifdefs in if_<lang>.c
Christian Brabandt <cb@256bit.org>
parents: 32118
diff changeset
183 # else
15882
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
184 # include <dlfcn.h>
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
185 # define HINSTANCE void*
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
186 # define RUBY_PROC void*
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
187 # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
188 # define symbol_from_dll dlsym
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
189 # define close_dll dlclose
25342
c4298ed56ffa patch 8.2.3208: dynamic library load error does not mention why it failed
Bram Moolenaar <Bram@vim.org>
parents: 23814
diff changeset
190 # define load_dll_error dlerror
15882
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
191 # endif
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
192 #endif
8fb7dd311ca7 patch 8.1.0947: using MSWIN before it is defined
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
193
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 #if defined(PROTO) && !defined(FEAT_RUBY)
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
195 // Define these to be able to generate the function prototypes.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 # define VALUE int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 # define RUBY_DATA_FUNC int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 static int ruby_initialized = 0;
4369
c9820396afb9 updated for version 7.3.933
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
201 static void *ruby_stack_start;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 static VALUE objtbl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 static VALUE mVIM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 static VALUE cBuffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 static VALUE cVimWindow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 static VALUE eDeletedBufferError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 static VALUE eDeletedWindowError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 static int ensure_ruby_initialized(void);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 static void error_print(int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 static void ruby_io_init(void);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 static void ruby_vim_init(void);
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
214 static int ruby_convert_to_vim_value(VALUE val, typval_T *rettv);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
216 #if defined(__ia64) && !defined(ruby_init_stack)
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
217 # define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
218 #endif
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
219
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 #if defined(DYNAMIC_RUBY) || defined(PROTO)
7668
21b0a39d13ed commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents: 7528
diff changeset
221 # if defined(PROTO) && !defined(HINSTANCE)
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
222 # define HINSTANCE int // for generating prototypes
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
223 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 * Wrapper defines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 */
19479
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
228 // Ruby 2.7 actually expands the following symbols as macro.
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
229 # if RUBY_VERSION >= 27
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
230 # undef rb_define_global_function
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
231 # undef rb_define_method
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
232 # undef rb_define_module_function
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
233 # undef rb_define_singleton_method
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
234 # endif
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
235
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
236 # define rb_assoc_new dll_rb_assoc_new
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
237 # define rb_cObject (*dll_rb_cObject)
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
238 # define rb_class_new_instance dll_rb_class_new_instance
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
239 # if RUBY_VERSION < 30
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
240 # define rb_check_type dll_rb_check_type
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
241 # endif
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
242 # ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
243 # define rb_check_typeddata dll_rb_check_typeddata
6485
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
244 # endif
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
245 # define rb_class_path dll_rb_class_path
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
246 # ifdef USE_TYPEDDATA
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
247 # if RUBY_VERSION >= 23
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
248 # define rb_data_typed_object_wrap dll_rb_data_typed_object_wrap
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
249 # else
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
250 # define rb_data_typed_object_alloc dll_rb_data_typed_object_alloc
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
251 # endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
252 # else
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
253 # define rb_data_object_alloc dll_rb_data_object_alloc
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
254 # endif
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
255 # define rb_define_class_under dll_rb_define_class_under
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
256 # define rb_define_const dll_rb_define_const
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
257 # define rb_define_global_function dll_rb_define_global_function
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
258 # define rb_define_method dll_rb_define_method
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
259 # define rb_define_module dll_rb_define_module
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
260 # define rb_define_module_function dll_rb_define_module_function
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
261 # define rb_define_singleton_method dll_rb_define_singleton_method
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
262 # define rb_define_virtual_variable dll_rb_define_virtual_variable
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
263 # define rb_stdout (*dll_rb_stdout)
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
264 # define rb_stderr (*dll_rb_stderr)
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
265 # define rb_eArgError (*dll_rb_eArgError)
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
266 # define rb_eIndexError (*dll_rb_eIndexError)
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
267 # define rb_eRuntimeError (*dll_rb_eRuntimeError)
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
268 # define rb_eStandardError (*dll_rb_eStandardError)
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
269 # define rb_eval_string_protect dll_rb_eval_string_protect
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
270 # if RUBY_VERSION >= 21
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
271 # define rb_funcallv dll_rb_funcallv
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
272 # else
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
273 # define rb_funcall2 dll_rb_funcall2
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
274 # endif
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
275 # define rb_global_variable dll_rb_global_variable
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
276 # define rb_hash_aset dll_rb_hash_aset
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
277 # define rb_hash_foreach dll_rb_hash_foreach
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
278 # define rb_hash_new dll_rb_hash_new
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
279 # define rb_inspect dll_rb_inspect
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
280 # define rb_int2inum dll_rb_int2inum
14451
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
281
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
282 // ruby.h may redefine rb_intern to use RUBY_CONST_ID_CACHE(), but that won't
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
283 // work. Not using the cache appears to be the best solution.
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
284 # undef rb_intern
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
285 # define rb_intern dll_rb_intern
9992af1ec9d3 patch 8.1.0239: now Ruby build fails on other systems
Christian Brabandt <cb@256bit.org>
parents: 14445
diff changeset
286
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
287 # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG // 64 bits only
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
288 # if RUBY_VERSION < 30
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
289 # define rb_num2uint dll_rb_num2uint
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
290 # endif
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
291 # endif
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
292 # define rb_num2dbl dll_rb_num2dbl
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
293 # define rb_lastline_get dll_rb_lastline_get
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
294 # define rb_lastline_set dll_rb_lastline_set
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
295 # define rb_protect dll_rb_protect
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
296 # define rb_load dll_rb_load
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
297 # if RUBY_VERSION < 20
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
298 # define rb_num2ulong dll_rb_num2ulong
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
299 # endif
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
300 # define rb_obj_alloc dll_rb_obj_alloc
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
301 # define rb_obj_as_string dll_rb_obj_as_string
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
302 # define rb_obj_id dll_rb_obj_id
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
303 # define rb_raise dll_rb_raise
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
304 # define rb_str_cat dll_rb_str_cat
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
305 # define rb_str_concat dll_rb_str_concat
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7823
diff changeset
306 # undef rb_str_new
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
307 # define rb_str_new dll_rb_str_new
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
308 # ifdef rb_str_new2
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
309 // Ruby may #define rb_str_new2 to use rb_str_new_cstr.
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
310 # define need_rb_str_new_cstr 1
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
311 // Ruby's headers #define rb_str_new_cstr to make use of GCC's
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
312 // __builtin_constant_p extension.
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
313 # undef rb_str_new_cstr
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
314 # define rb_str_new_cstr dll_rb_str_new_cstr
4373
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
315 # else
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
316 # define rb_str_new2 dll_rb_str_new2
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
317 # endif
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
318 # define rb_string_value dll_rb_string_value
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
319 # define rb_string_value_ptr dll_rb_string_value_ptr
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
320 # define rb_float_new dll_rb_float_new
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
321 # define rb_ary_new dll_rb_ary_new
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
322 # ifdef rb_ary_new4
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
323 # define RB_ARY_NEW4_MACRO 1
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
324 # undef rb_ary_new4
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
325 # endif
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
326 # define rb_ary_new4 dll_rb_ary_new4
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
327 # define rb_ary_push dll_rb_ary_push
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
328 # ifdef __ia64
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
329 # define rb_ia64_bsp dll_rb_ia64_bsp
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
330 # undef ruby_init_stack
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
331 # define ruby_init_stack(addr) dll_ruby_init_stack((addr), rb_ia64_bsp())
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
332 # else
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
333 # define ruby_init_stack dll_ruby_init_stack
4373
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
334 # endif
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
335 # define rb_errinfo dll_rb_errinfo
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
336 # define ruby_init dll_ruby_init
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
337 # define ruby_init_loadpath dll_ruby_init_loadpath
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15727
diff changeset
338 # ifdef MSWIN
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
339 # define ruby_sysinit dll_ruby_sysinit
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
340 # define rb_w32_snprintf dll_rb_w32_snprintf
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
341 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
343 # define ruby_script dll_ruby_script
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
344 # define rb_enc_find_index dll_rb_enc_find_index
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
345 # define rb_enc_find dll_rb_enc_find
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
346 # undef rb_enc_str_new
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
347 # define rb_enc_str_new dll_rb_enc_str_new
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
348 # define rb_sprintf dll_rb_sprintf
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
349 # define rb_require dll_rb_require
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
350 # define ruby_options dll_ruby_options
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
351
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 * Pointers for dynamic link
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 static VALUE (*dll_rb_assoc_new) (VALUE, VALUE);
2274
7c31d761ffa9 Fix build problem with Ruby on Windows. (Cesar Romani)
Bram Moolenaar <bram@vim.org>
parents: 2212
diff changeset
356 VALUE *dll_rb_cFalseClass;
7c31d761ffa9 Fix build problem with Ruby on Windows. (Cesar Romani)
Bram Moolenaar <bram@vim.org>
parents: 2212
diff changeset
357 VALUE *dll_rb_cFixnum;
9293
946b62bbd871 commit https://github.com/vim/vim/commit/2016ae586b12513d973aabc30ed758b543114cbe
Christian Brabandt <cb@256bit.org>
parents: 9278
diff changeset
358 # if defined(USE_RUBY_INTEGER)
9278
97b0b568f820 commit https://github.com/vim/vim/commit/06469e979fe524ac6cb8f705ed4221aa267de11d
Christian Brabandt <cb@256bit.org>
parents: 9159
diff changeset
359 VALUE *dll_rb_cInteger;
97b0b568f820 commit https://github.com/vim/vim/commit/06469e979fe524ac6cb8f705ed4221aa267de11d
Christian Brabandt <cb@256bit.org>
parents: 9159
diff changeset
360 # endif
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
361 # if RUBY_VERSION >= 20
4193
e49b80f267dc updated for version 7.3.848
Bram Moolenaar <bram@vim.org>
parents: 4164
diff changeset
362 VALUE *dll_rb_cFloat;
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
363 # endif
2274
7c31d761ffa9 Fix build problem with Ruby on Windows. (Cesar Romani)
Bram Moolenaar <bram@vim.org>
parents: 2212
diff changeset
364 VALUE *dll_rb_cNilClass;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 static VALUE *dll_rb_cObject;
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
366 VALUE *dll_rb_cString;
2274
7c31d761ffa9 Fix build problem with Ruby on Windows. (Cesar Romani)
Bram Moolenaar <bram@vim.org>
parents: 2212
diff changeset
367 VALUE *dll_rb_cSymbol;
7c31d761ffa9 Fix build problem with Ruby on Windows. (Cesar Romani)
Bram Moolenaar <bram@vim.org>
parents: 2212
diff changeset
368 VALUE *dll_rb_cTrueClass;
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
369 static VALUE (*dll_rb_class_new_instance) (int,VALUE*,VALUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 static void (*dll_rb_check_type) (VALUE,int);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
371 # ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
372 static void *(*dll_rb_check_typeddata) (VALUE,const rb_data_type_t *);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
373 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 static VALUE (*dll_rb_class_path) (VALUE);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
375 # ifdef USE_TYPEDDATA
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
376 # if RUBY_VERSION >= 23
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
377 static VALUE (*dll_rb_data_typed_object_wrap) (VALUE, void*, const rb_data_type_t *);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
378 # else
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
379 static VALUE (*dll_rb_data_typed_object_alloc) (VALUE, void*, const rb_data_type_t *);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
380 # endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
381 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 static VALUE (*dll_rb_data_object_alloc) (VALUE, void*, RUBY_DATA_FUNC, RUBY_DATA_FUNC);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
383 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
384 # if RUBY_VERSION >= 31
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
385 static void (*dll_rb_debug_rstring_null_ptr) (const char*);
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
386 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 static VALUE (*dll_rb_define_class_under) (VALUE, const char*, VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 static void (*dll_rb_define_const) (VALUE,const char*,VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 static void (*dll_rb_define_global_function) (const char*,VALUE(*)(),int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 static void (*dll_rb_define_method) (VALUE,const char*,VALUE(*)(),int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 static VALUE (*dll_rb_define_module) (const char*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 static void (*dll_rb_define_module_function) (VALUE,const char*,VALUE(*)(),int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 static void (*dll_rb_define_singleton_method) (VALUE,const char*,VALUE(*)(),int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 static void (*dll_rb_define_virtual_variable) (const char*,VALUE(*)(),void(*)());
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 static VALUE *dll_rb_stdout;
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
396 static VALUE *dll_rb_stderr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 static VALUE *dll_rb_eArgError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 static VALUE *dll_rb_eIndexError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 static VALUE *dll_rb_eRuntimeError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 static VALUE *dll_rb_eStandardError;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 static VALUE (*dll_rb_eval_string_protect) (const char*, int*);
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
402 # if RUBY_VERSION >= 21
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
403 static VALUE (*dll_rb_funcallv) (VALUE, ID, int, const VALUE*);
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
404 # else
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
405 static VALUE (*dll_rb_funcall2) (VALUE, ID, int, const VALUE*);
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
406 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 static void (*dll_rb_global_variable) (VALUE*);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 static VALUE (*dll_rb_hash_aset) (VALUE, VALUE, VALUE);
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
409 static VALUE (*dll_rb_hash_foreach) (VALUE, int (*)(VALUE, VALUE, VALUE), VALUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 static VALUE (*dll_rb_hash_new) (void);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 static VALUE (*dll_rb_inspect) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 static VALUE (*dll_rb_int2inum) (long);
14445
dda317774511 patch 8.1.0236: Ruby build fails when ruby_intern is missing
Christian Brabandt <cb@256bit.org>
parents: 14437
diff changeset
413 static ID (*dll_rb_intern) (const char*);
23814
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
414 # if RUBY_VERSION >= 30 || VIM_SIZEOF_INT < VIM_SIZEOF_LONG
3808
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
415 static long (*dll_rb_fix2int) (VALUE);
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
416 static long (*dll_rb_num2int) (VALUE);
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
417 static unsigned long (*dll_rb_num2uint) (VALUE);
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
418 # endif
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
419 static double (*dll_rb_num2dbl) (VALUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 static VALUE (*dll_rb_lastline_get) (void);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 static void (*dll_rb_lastline_set) (VALUE);
13148
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
422 static VALUE (*dll_rb_protect) (VALUE (*)(VALUE), VALUE, int*);
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
423 static void (*dll_rb_load) (VALUE, int);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 static long (*dll_rb_num2long) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 static unsigned long (*dll_rb_num2ulong) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 static VALUE (*dll_rb_obj_alloc) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 static VALUE (*dll_rb_obj_as_string) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 static VALUE (*dll_rb_obj_id) (VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 static void (*dll_rb_raise) (VALUE, const char*, ...);
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
430 static VALUE (*dll_rb_string_value) (volatile VALUE*);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 static VALUE (*dll_rb_str_new) (const char*, long);
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
434 # ifdef need_rb_str_new_cstr
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
435 // Ruby may #define rb_str_new2 to use rb_str_new_cstr.
2212
7d3cf4693a8f Some versions of Ruby redefine rb_str_new2 to rb_str_new_cstr.
Bram Moolenaar <bram@vim.org>
parents: 2200
diff changeset
436 static VALUE (*dll_rb_str_new_cstr) (const char*);
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
437 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 static VALUE (*dll_rb_str_new2) (const char*);
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
439 # endif
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
440 static VALUE (*dll_rb_errinfo) (void);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 static void (*dll_ruby_init) (void);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 static void (*dll_ruby_init_loadpath) (void);
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15727
diff changeset
443 # ifdef MSWIN
15199
1e98b81ff9ee patch 8.1.0609: MS-Windows: unused variable, depending on the Ruby version
Bram Moolenaar <Bram@vim.org>
parents: 14736
diff changeset
444 static void (*dll_ruby_sysinit) (int*, char***);
2621
baa5f81197c8 updated for version 7.3.043
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
445 static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
baa5f81197c8 updated for version 7.3.043
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
446 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
447 # if RUBY_VERSION >= 31
27006
686fa1164724 patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Bram Moolenaar <Bram@vim.org>
parents: 26897
diff changeset
448 # ifdef _MSC_VER
686fa1164724 patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Bram Moolenaar <Bram@vim.org>
parents: 26897
diff changeset
449 static void (*dll_rb_unexpected_type) (VALUE, int);
686fa1164724 patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Bram Moolenaar <Bram@vim.org>
parents: 26897
diff changeset
450 # else
686fa1164724 patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Bram Moolenaar <Bram@vim.org>
parents: 26897
diff changeset
451 NORETURN(static void (*dll_rb_unexpected_type) (VALUE, int));
686fa1164724 patch 8.2.4032: ATTRIBUTE_NORETURN is not needed
Bram Moolenaar <Bram@vim.org>
parents: 26897
diff changeset
452 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
453 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
454 static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
455 static VALUE (*dll_rb_float_new) (double);
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
456 static VALUE (*dll_rb_ary_new) (void);
14511
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
457 static VALUE (*dll_rb_ary_new4) (long n, const VALUE *elts);
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
458 static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
459 # if RUBY_VERSION >= 26
15275
b408509d8292 patch 8.1.0646: cannot build with Ruby 2.6.0
Bram Moolenaar <Bram@vim.org>
parents: 15199
diff changeset
460 static void (*dll_rb_ary_detransient) (VALUE);
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
461 # endif
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
462 # ifdef __ia64
4373
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
463 static void * (*dll_rb_ia64_bsp) (void);
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
464 static void (*dll_ruby_init_stack)(VALUE*, void*);
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
465 # else
4373
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
466 static void (*dll_ruby_init_stack)(VALUE*);
c42e130ebf36 updated for version 7.3.935
Bram Moolenaar <bram@vim.org>
parents: 4369
diff changeset
467 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
468 static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
470 static void (*dll_ruby_script) (const char*);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
471 static int (*dll_rb_enc_find_index) (const char*);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
472 static rb_encoding* (*dll_rb_enc_find) (const char*);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
473 static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
474 static VALUE (*dll_rb_sprintf) (const char*, ...);
2669
ee50cd1a3032 updated for version 7.3.088
Bram Moolenaar <bram@vim.org>
parents: 2656
diff changeset
475 static VALUE (*dll_rb_require) (const char*);
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
476 static void* (*dll_ruby_options)(int, char**);
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
477
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
478 # if defined(USE_RGENGC) && USE_RGENGC
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
479 # if RUBY_VERSION == 21
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
480 static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE);
6485
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
481 # else
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
482 static void (*dll_rb_gc_writebarrier_unprotect)(VALUE obj);
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
483 # endif
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
484 # endif
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
485
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
486 # if RUBY_VERSION >= 30
23814
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
487 # ifdef _MSC_VER
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
488 static void (*dll_ruby_malloc_size_overflow)(size_t, size_t);
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
489 # else
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
490 NORETURN(static void (*dll_ruby_malloc_size_overflow)(size_t, size_t));
23814
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
491 # endif
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
492 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
493
23160
19575087e859 patch 8.2.2126: Ruby: missing function prototype
Bram Moolenaar <Bram@vim.org>
parents: 23116
diff changeset
494 # if RUBY_VERSION >= 26
19575087e859 patch 8.2.2126: Ruby: missing function prototype
Bram Moolenaar <Bram@vim.org>
parents: 23116
diff changeset
495 void rb_ary_detransient_stub(VALUE x);
19575087e859 patch 8.2.2126: Ruby: missing function prototype
Bram Moolenaar <Bram@vim.org>
parents: 23116
diff changeset
496 # endif
19575087e859 patch 8.2.2126: Ruby: missing function prototype
Bram Moolenaar <Bram@vim.org>
parents: 23116
diff changeset
497
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
498 // Do not generate a prototype here, VALUE isn't always defined.
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
499 # ifndef PROTO
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
500 # if RUBY_VERSION >= 22
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
501 long
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
502 rb_num2long_stub(VALUE x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
503 # else
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
504 SIGNED_VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
505 rb_num2long_stub(VALUE x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
506 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
507 {
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
508 return dll_rb_num2long(x);
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
509 }
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
510 # if RUBY_VERSION >= 26
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
511 VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
512 rb_int2big_stub(intptr_t x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
513 # else
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
514 VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
515 rb_int2big_stub(SIGNED_VALUE x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
516 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
517 {
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
518 return dll_rb_int2big(x);
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
519 }
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
520 # if RUBY_VERSION >= 30 || VIM_SIZEOF_INT < VIM_SIZEOF_LONG
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
521 long
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
522 rb_fix2int_stub(VALUE x)
4279
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
523 {
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
524 return dll_rb_fix2int(x);
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
525 }
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
526 long
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
527 rb_num2int_stub(VALUE x)
4279
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
528 {
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
529 return dll_rb_num2int(x);
cb0c694517a0 updated for version 7.3.889
Bram Moolenaar <bram@vim.org>
parents: 4193
diff changeset
530 }
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
531 # endif
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
532 # if RUBY_VERSION >= 20
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
533 VALUE
4164
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
534 rb_float_new_in_heap(double d)
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
535 {
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
536 return dll_rb_float_new(d);
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
537 }
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
538 # if RUBY_VERSION >= 22
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
539 unsigned long
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
540 rb_num2ulong(VALUE x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
541 # else
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
542 VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
543 rb_num2ulong(VALUE x)
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
544 # endif
4164
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
545 {
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
546 return (long)RSHIFT((SIGNED_VALUE)(x),1);
3ac9d7d8274e updated for version 7.3.834
Bram Moolenaar <bram@vim.org>
parents: 4135
diff changeset
547 }
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
548 # endif
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
549 # if defined(USE_RGENGC) && USE_RGENGC
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
550 # if RUBY_VERSION == 21
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
551 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
552 rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
553 {
6406
ee28ddfc7b7c updated for version 7.4.534
Bram Moolenaar <bram@vim.org>
parents: 6357
diff changeset
554 dll_rb_gc_writebarrier_unprotect_promoted(obj);
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
555 }
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
556 # else
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
557 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
558 rb_gc_writebarrier_unprotect_stub(VALUE obj)
6485
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
559 {
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
560 dll_rb_gc_writebarrier_unprotect(obj);
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
561 }
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
562 # endif
6485
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
563 # endif
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
564 # if RUBY_VERSION >= 26
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
565 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
566 rb_ary_detransient_stub(VALUE x)
15392
0807e2dbbab6 patch 8.1.0704: building with Ruby 2.6 gives compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15275
diff changeset
567 {
0807e2dbbab6 patch 8.1.0704: building with Ruby 2.6 gives compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15275
diff changeset
568 dll_rb_ary_detransient(x);
0807e2dbbab6 patch 8.1.0704: building with Ruby 2.6 gives compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15275
diff changeset
569 }
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
570 # endif
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
571 # if RUBY_VERSION >= 30
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
572 void
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
573 rb_check_type_stub(VALUE obj, int t)
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
574 {
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
575 dll_rb_check_type(obj, t);
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
576 }
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
577 unsigned long
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
578 rb_num2uint_stub(VALUE x)
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
579 {
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
580 return dll_rb_num2uint(x);
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
581 }
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
582 void
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
583 ruby_malloc_size_overflow_stub(size_t x, size_t y)
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
584 {
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
585 dll_ruby_malloc_size_overflow(x, y);
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
586 }
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
587 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
588 # if RUBY_VERSION >= 31
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
589 void
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
590 rb_debug_rstring_null_ptr_stub(const char *func)
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
591 {
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
592 dll_rb_debug_rstring_null_ptr(func);
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
593 }
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
594 void
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
595 rb_unexpected_type_stub(VALUE self, int t)
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
596 {
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
597 dll_rb_unexpected_type(self, t);
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
598 }
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
599 # endif
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
600 # endif // ifndef PROTO
15392
0807e2dbbab6 patch 8.1.0704: building with Ruby 2.6 gives compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15275
diff changeset
601
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
602 static HINSTANCE hinstRuby = NULL; // Instance of ruby.dll
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 /*
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
605 * Table of name to function pointer of ruby.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 static struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 char *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 RUBY_PROC *ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 } ruby_funcname_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 {"rb_assoc_new", (RUBY_PROC*)&dll_rb_assoc_new},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 {"rb_cFalseClass", (RUBY_PROC*)&dll_rb_cFalseClass},
9293
946b62bbd871 commit https://github.com/vim/vim/commit/2016ae586b12513d973aabc30ed758b543114cbe
Christian Brabandt <cb@256bit.org>
parents: 9278
diff changeset
615 # if defined(USE_RUBY_INTEGER)
9278
97b0b568f820 commit https://github.com/vim/vim/commit/06469e979fe524ac6cb8f705ed4221aa267de11d
Christian Brabandt <cb@256bit.org>
parents: 9159
diff changeset
616 {"rb_cInteger", (RUBY_PROC*)&dll_rb_cInteger},
10546
7babc70a7b98 patch 8.0.0163: cannot build with Ruby 2.4
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
617 # else
7babc70a7b98 patch 8.0.0163: cannot build with Ruby 2.4
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
618 {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
9278
97b0b568f820 commit https://github.com/vim/vim/commit/06469e979fe524ac6cb8f705ed4221aa267de11d
Christian Brabandt <cb@256bit.org>
parents: 9159
diff changeset
619 # endif
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
620 # if RUBY_VERSION >= 20
4193
e49b80f267dc updated for version 7.3.848
Bram Moolenaar <bram@vim.org>
parents: 4164
diff changeset
621 {"rb_cFloat", (RUBY_PROC*)&dll_rb_cFloat},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
622 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 {"rb_cNilClass", (RUBY_PROC*)&dll_rb_cNilClass},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 {"rb_cObject", (RUBY_PROC*)&dll_rb_cObject},
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
625 {"rb_cString", (RUBY_PROC*)&dll_rb_cString},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 {"rb_cSymbol", (RUBY_PROC*)&dll_rb_cSymbol},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 {"rb_cTrueClass", (RUBY_PROC*)&dll_rb_cTrueClass},
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
628 {"rb_class_new_instance", (RUBY_PROC*)&dll_rb_class_new_instance},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 {"rb_check_type", (RUBY_PROC*)&dll_rb_check_type},
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
630 # ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
631 {"rb_check_typeddata", (RUBY_PROC*)&dll_rb_check_typeddata},
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
632 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 {"rb_class_path", (RUBY_PROC*)&dll_rb_class_path},
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
634 # ifdef USE_TYPEDDATA
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
635 # if RUBY_VERSION >= 23
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
636 {"rb_data_typed_object_wrap", (RUBY_PROC*)&dll_rb_data_typed_object_wrap},
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
637 # else
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
638 {"rb_data_typed_object_alloc", (RUBY_PROC*)&dll_rb_data_typed_object_alloc},
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
639 # endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
640 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 {"rb_data_object_alloc", (RUBY_PROC*)&dll_rb_data_object_alloc},
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
642 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
643 # if RUBY_VERSION >= 31
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
644 {"rb_debug_rstring_null_ptr", (RUBY_PROC*)&dll_rb_debug_rstring_null_ptr},
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
645 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 {"rb_define_class_under", (RUBY_PROC*)&dll_rb_define_class_under},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 {"rb_define_const", (RUBY_PROC*)&dll_rb_define_const},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 {"rb_define_global_function", (RUBY_PROC*)&dll_rb_define_global_function},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 {"rb_define_method", (RUBY_PROC*)&dll_rb_define_method},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 {"rb_define_module", (RUBY_PROC*)&dll_rb_define_module},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 {"rb_define_module_function", (RUBY_PROC*)&dll_rb_define_module_function},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 {"rb_define_singleton_method", (RUBY_PROC*)&dll_rb_define_singleton_method},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 {"rb_define_virtual_variable", (RUBY_PROC*)&dll_rb_define_virtual_variable},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 {"rb_stdout", (RUBY_PROC*)&dll_rb_stdout},
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
655 {"rb_stderr", (RUBY_PROC*)&dll_rb_stderr},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 {"rb_eArgError", (RUBY_PROC*)&dll_rb_eArgError},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 {"rb_eIndexError", (RUBY_PROC*)&dll_rb_eIndexError},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 {"rb_eStandardError", (RUBY_PROC*)&dll_rb_eStandardError},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 {"rb_eval_string_protect", (RUBY_PROC*)&dll_rb_eval_string_protect},
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
661 # if RUBY_VERSION >= 21
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
662 {"rb_funcallv", (RUBY_PROC*)&dll_rb_funcallv},
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
663 # else
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
664 {"rb_funcall2", (RUBY_PROC*)&dll_rb_funcall2},
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
665 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 {"rb_global_variable", (RUBY_PROC*)&dll_rb_global_variable},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 {"rb_hash_aset", (RUBY_PROC*)&dll_rb_hash_aset},
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
668 {"rb_hash_foreach", (RUBY_PROC*)&dll_rb_hash_foreach},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
14445
dda317774511 patch 8.1.0236: Ruby build fails when ruby_intern is missing
Christian Brabandt <cb@256bit.org>
parents: 14437
diff changeset
672 {"rb_intern", (RUBY_PROC*)&dll_rb_intern},
23814
51a5c5f08bdd patch 8.2.2448: compilation error with Ruby 3.0
Bram Moolenaar <Bram@vim.org>
parents: 23539
diff changeset
673 # if RUBY_VERSION >= 30 || VIM_SIZEOF_INT < VIM_SIZEOF_LONG
3808
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
674 {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
675 {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
87afa95a2992 updated for version 7.3.662
Bram Moolenaar <bram@vim.org>
parents: 3478
diff changeset
676 {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
677 # endif
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
678 {"rb_num2dbl", (RUBY_PROC*)&dll_rb_num2dbl},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
681 {"rb_protect", (RUBY_PROC*)&dll_rb_protect},
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12553
diff changeset
682 {"rb_load", (RUBY_PROC*)&dll_rb_load},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 {"rb_num2long", (RUBY_PROC*)&dll_rb_num2long},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 {"rb_num2ulong", (RUBY_PROC*)&dll_rb_num2ulong},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 {"rb_obj_alloc", (RUBY_PROC*)&dll_rb_obj_alloc},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
689 {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
693 # ifdef need_rb_str_new_cstr
2212
7d3cf4693a8f Some versions of Ruby redefine rb_str_new2 to rb_str_new_cstr.
Bram Moolenaar <bram@vim.org>
parents: 2200
diff changeset
694 {"rb_str_new_cstr", (RUBY_PROC*)&dll_rb_str_new_cstr},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
695 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
697 # endif
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
698 {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15727
diff changeset
701 # ifdef MSWIN
15199
1e98b81ff9ee patch 8.1.0609: MS-Windows: unused variable, depending on the Ruby version
Bram Moolenaar <Bram@vim.org>
parents: 14736
diff changeset
702 {"ruby_sysinit", (RUBY_PROC*)&dll_ruby_sysinit},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
2621
baa5f81197c8 updated for version 7.3.043
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
704 # endif
26788
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
705 # if RUBY_VERSION >= 31
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
706 {"rb_unexpected_type", (RUBY_PROC*)&dll_rb_unexpected_type},
fccd67ae58c8 patch 8.2.3922: cannot build with dynamic Ruby 3.1
Bram Moolenaar <Bram@vim.org>
parents: 26441
diff changeset
707 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
708 {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
709 # if RUBY_VERSION >= 20
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
710 {"rb_float_new_in_heap", (RUBY_PROC*)&dll_rb_float_new},
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
711 # else
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
712 {"rb_float_new", (RUBY_PROC*)&dll_rb_float_new},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
713 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
714 {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
715 # ifdef RB_ARY_NEW4_MACRO
14511
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
716 {"rb_ary_new_from_values", (RUBY_PROC*)&dll_rb_ary_new4},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
717 # else
14511
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
718 {"rb_ary_new4", (RUBY_PROC*)&dll_rb_ary_new4},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
719 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
720 {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
721 # if RUBY_VERSION >= 26
15275
b408509d8292 patch 8.1.0646: cannot build with Ruby 2.6.0
Bram Moolenaar <Bram@vim.org>
parents: 15199
diff changeset
722 {"rb_ary_detransient", (RUBY_PROC*)&dll_rb_ary_detransient},
4375
e7361b2d8136 updated for version 7.3.936
Bram Moolenaar <bram@vim.org>
parents: 4373
diff changeset
723 # endif
2104
09cc86b66653 updated for version 7.2.387
Bram Moolenaar <bram@zimbu.org>
parents: 2090
diff changeset
724 {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big},
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
725 {"ruby_script", (RUBY_PROC*)&dll_ruby_script},
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
726 {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
727 {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
728 {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
729 {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
2669
ee50cd1a3032 updated for version 7.3.088
Bram Moolenaar <bram@vim.org>
parents: 2656
diff changeset
730 {"rb_require", (RUBY_PROC*)&dll_rb_require},
7237
2a95fa0a07b5 commit https://github.com/vim/vim/commit/9b1067e038d371bd6c51e5da025383761f4921b4
Christian Brabandt <cb@256bit.org>
parents: 7196
diff changeset
731 {"ruby_options", (RUBY_PROC*)&dll_ruby_options},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
732 # ifdef __ia64
4452
92fec4b83be5 updated for version 7.3.974
Bram Moolenaar <bram@vim.org>
parents: 4375
diff changeset
733 {"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
734 # endif
4452
92fec4b83be5 updated for version 7.3.974
Bram Moolenaar <bram@vim.org>
parents: 4375
diff changeset
735 {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
736 # if defined(USE_RGENGC) && USE_RGENGC
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
737 # if RUBY_VERSION == 21
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
738 {"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted},
6485
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
739 # else
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
740 {"rb_gc_writebarrier_unprotect", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect},
816c584ff174 updated for version 7.4.570
Bram Moolenaar <bram@vim.org>
parents: 6406
diff changeset
741 # endif
5643
e61a2b709f69 updated for version 7.4.168
Bram Moolenaar <bram@vim.org>
parents: 4452
diff changeset
742 # endif
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
743 # if RUBY_VERSION >= 30
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
744 {"ruby_malloc_size_overflow", (RUBY_PROC*)&dll_ruby_malloc_size_overflow},
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
745 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 {"", NULL},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 * Load library and get all pointers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 * Parameter 'libname' provides name of DLL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 * Return OK or FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 ruby_runtime_link_init(char *libname, int verbose)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 if (hinstRuby)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 return OK;
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
761 hinstRuby = load_dll(libname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 if (!hinstRuby)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 if (verbose)
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26788
diff changeset
765 semsg(_(e_could_not_load_library_str_str), libname, load_dll_error());
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 for (i = 0; ruby_funcname_table[i].ptr; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 {
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
771 if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 ruby_funcname_table[i].name)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 {
2589
d5681bd2661b updated for version 7.3.013
Bram Moolenaar <bram@vim.org>
parents: 2282
diff changeset
774 close_dll(hinstRuby);
2621
baa5f81197c8 updated for version 7.3.043
Bram Moolenaar <bram@vim.org>
parents: 2612
diff changeset
775 hinstRuby = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 if (verbose)
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26788
diff changeset
777 semsg(_(e_could_not_load_library_function_str), ruby_funcname_table[i].name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 * If ruby is enabled (there is installed ruby on Windows system) return TRUE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 * else FALSE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 int
7823
bcef391c101c commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents: 7712
diff changeset
789 ruby_enabled(int verbose)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 {
7528
53163e4d9e4f commit https://github.com/vim/vim/commit/25e4fcde767084d1a79e0926bc301c92987c0cce
Christian Brabandt <cb@256bit.org>
parents: 7364
diff changeset
791 return ruby_runtime_link_init((char *)p_rubydll, verbose) == OK;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 }
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
793 #endif // defined(DYNAMIC_RUBY) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 void
7823
bcef391c101c commit https://github.com/vim/vim/commit/68c2f638e65d914dc6e84eb7ce2624f08af525c0
Christian Brabandt <cb@256bit.org>
parents: 7712
diff changeset
796 ruby_end(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
800 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
801 ex_ruby(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 int state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 char *script = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805
750
e2f45cbe2b8a updated for version 7.0223
vimboss
parents: 714
diff changeset
806 script = (char *)script_get(eap, eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 if (!eap->skip && ensure_ruby_initialized())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 if (script == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 rb_eval_string_protect((char *)eap->arg, &state);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 rb_eval_string_protect(script, &state);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 if (state)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 error_print(state);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 vim_free(script);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
819 /*
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
820 * In Ruby 1.9 or later, ruby String object has encoding.
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
821 * conversion buffer string of vim to ruby String object using
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
822 * VIM encoding option.
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
823 */
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
824 static VALUE
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
825 vim_str2rb_enc_str(const char *s)
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
826 {
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
827 long lval;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
828 char_u *sval;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
829 rb_encoding *enc;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
830
26441
65ab0b035dd8 patch 8.2.3751: cannot assign a lambda to an option that takes a function
Bram Moolenaar <Bram@vim.org>
parents: 25342
diff changeset
831 if (get_option_value((char_u *)"enc", &lval, &sval, NULL, 0) == gov_string)
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
832 {
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
833 enc = rb_enc_find((char *)sval);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
834 vim_free(sval);
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
835 if (enc)
9159
6b003ff07234 commit https://github.com/vim/vim/commit/9b0ac229bcfc91acabd35fc576055a94c1687c32
Christian Brabandt <cb@256bit.org>
parents: 8802
diff changeset
836 return rb_enc_str_new(s, (long)strlen(s), enc);
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
837 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
838 return rb_str_new2(s);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
839 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
840
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
841 static VALUE
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
842 eval_enc_string_protect(const char *str, int *state)
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
843 {
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
844 long lval;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
845 char_u *sval;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
846 rb_encoding *enc;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
847 VALUE v;
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
848
26441
65ab0b035dd8 patch 8.2.3751: cannot assign a lambda to an option that takes a function
Bram Moolenaar <Bram@vim.org>
parents: 25342
diff changeset
849 if (get_option_value((char_u *)"enc", &lval, &sval, NULL, 0) == gov_string)
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
850 {
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
851 enc = rb_enc_find((char *)sval);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
852 vim_free(sval);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
853 if (enc)
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
854 {
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
855 v = rb_sprintf("#-*- coding:%s -*-\n%s", rb_enc_name(enc), str);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
856 return rb_eval_string_protect(StringValuePtr(v), state);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
857 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
858 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
859 return rb_eval_string_protect(str, state);
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
860 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
861
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
862 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
863 ex_rubydo(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 int state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 linenr_T i;
10761
721af7a9b4b4 patch 8.0.0270: may get ml_get error when :rubydo deletes lines
Christian Brabandt <cb@256bit.org>
parents: 10603
diff changeset
867 buf_T *was_curbuf = curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
869 if (!ensure_ruby_initialized())
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
870 return;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
871
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
872 if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
873 return;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
874 for (i = eap->line1; i <= eap->line2; i++)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
876 VALUE line;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
878 if (i > curbuf->b_ml.ml_line_count)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
879 break;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
880 line = vim_str2rb_enc_str((char *)ml_get(i));
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
881 rb_lastline_set(line);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
882 eval_enc_string_protect((char *) eap->arg, &state);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
883 if (state)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
884 {
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
885 error_print(state);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
886 break;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
887 }
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
888 if (was_curbuf != curbuf)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
889 break;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
890 line = rb_lastline_get();
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
891 if (!NIL_P(line))
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
892 {
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
893 if (TYPE(line) != T_STRING)
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
894 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
895 emsg(_(e_dollar_must_be_an_instance_of_string));
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
896 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 }
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
898 ml_replace(i, (char_u *) StringValuePtr(line), 1);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
899 changed();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 #ifdef SYNTAX_HL
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
901 syn_changed(i); // recompute syntax hl. for this line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 }
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
905 check_cursor();
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
906 update_curbuf(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
909 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
910 rb_load_wrap(VALUE file_to_load)
13148
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
911 {
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
912 rb_load(file_to_load, 0);
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
913 return Qnil;
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
914 }
f06a0a75d5b1 patch 8.0.1448: segfault with exception inside :rubyfile command
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
915
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
916 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
917 ex_rubyfile(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 int state;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
921 if (!ensure_ruby_initialized())
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
922 return;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
923
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
924 VALUE file_to_load = rb_str_new2((const char *)eap->arg);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
925 rb_protect(rb_load_wrap, file_to_load, &state);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
926 if (state)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
927 error_print(state);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
930 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
931 ruby_buffer_free(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
933 if (buf->b_ruby_ref == NULL)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
934 return;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
935
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
936 rb_hash_aset(objtbl, rb_obj_id((VALUE) buf->b_ruby_ref), Qnil);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
937 RDATA(buf->b_ruby_ref)->data = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
940 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
941 ruby_window_free(win_T *win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
943 if (win->w_ruby_ref == NULL)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
944 return;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
945
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
946 rb_hash_aset(objtbl, rb_obj_id((VALUE) win->w_ruby_ref), Qnil);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
947 RDATA(win->w_ruby_ref)->data = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
950 static int
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
951 ensure_ruby_initialized(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
953 if (ruby_initialized)
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
954 return ruby_initialized;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
955
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
956 #ifdef DYNAMIC_RUBY
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
957 if (ruby_enabled(TRUE))
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
958 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
960 #ifdef MSWIN
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
961 // suggested by Ariya Mizutani
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
962 int argc = 1;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
963 char *argv[] = {"gvim.exe"};
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
964 char **argvp = argv;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
965 ruby_sysinit(&argc, &argvp);
30421
425b686c5244 patch 9.0.0546: supporting Ruby 1.8 makes code complicated
Bram Moolenaar <Bram@vim.org>
parents: 30310
diff changeset
966 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 {
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
968 ruby_init_stack(ruby_stack_start);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
969 ruby_init();
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
970 }
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
971 {
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
972 int dummy_argc = 2;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
973 char *dummy_argv[] = {"vim-ruby", "-e_=0"};
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
974 ruby_options(dummy_argc, dummy_argv);
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
975 }
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
976 ruby_script("vim-ruby");
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
977 ruby_io_init();
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
978 ruby_vim_init();
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
979 ruby_initialized = 1;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
980 }
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
981 #ifdef DYNAMIC_RUBY
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
982 else
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
983 {
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
984 emsg(_(e_sorry_this_command_is_disabled_the_ruby_library_could_not_be_loaded));
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
985 return 0;
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
986 }
2076
1c7a66d820e4 updated for version 7.2.360
Bram Moolenaar <bram@zimbu.org>
parents: 1888
diff changeset
987 #endif
31702
27c9212d10aa patch 9.0.1183: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31263
diff changeset
988
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 return ruby_initialized;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
992 static void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
993 error_print(int state)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 {
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
995 VALUE error;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 VALUE eclass;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 VALUE einfo;
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
998 VALUE bt;
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
999 int attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 char buff[BUFSIZ];
14437
ceb9b6bf0f4a patch 8.1.0232: Ruby error does not include backtrace
Christian Brabandt <cb@256bit.org>
parents: 14411
diff changeset
1001 long i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 #define TAG_RETURN 0x1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 #define TAG_BREAK 0x2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 #define TAG_NEXT 0x3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 #define TAG_RETRY 0x4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 #define TAG_REDO 0x5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 #define TAG_RAISE 0x6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 #define TAG_THROW 0x7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 #define TAG_FATAL 0x8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 #define TAG_MASK 0xf
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1013 switch (state)
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1014 {
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1015 case TAG_RETURN:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1016 emsg(_(e_unexpected_return));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1017 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1018 case TAG_NEXT:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1019 emsg(_(e_unexpected_next));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1020 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1021 case TAG_BREAK:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1022 emsg(_(e_unexpected_break));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1023 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1024 case TAG_REDO:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1025 emsg(_(e_unexpected_redo));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1026 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1027 case TAG_RETRY:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1028 emsg(_(e_retry_outside_of_rescue_clause));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1029 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1030 case TAG_RAISE:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1031 case TAG_FATAL:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1032 error = rb_errinfo();
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1033 eclass = CLASS_OF(error);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1034 einfo = rb_obj_as_string(error);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1035 if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1036 {
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1037 emsg(_(e_unhandled_exception));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1038 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1039 else
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1040 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1041 VALUE epath;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1042 char *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1044 epath = rb_class_path(eclass);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1045 vim_snprintf(buff, BUFSIZ, "%s: %s",
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1046 RSTRING_PTR(epath), RSTRING_PTR(einfo));
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1047 p = strchr(buff, '\n');
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1048 if (p) *p = '\0';
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1049 emsg(buff);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1050 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1051
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1052 attr = syn_name2attr((char_u *)"Error");
19376
1cae476a7c82 patch 8.2.0246: MSVC: deprecation warnings with Ruby
Bram Moolenaar <Bram@vim.org>
parents: 19102
diff changeset
1053 #if RUBY_VERSION >= 21
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1054 bt = rb_funcallv(error, rb_intern("backtrace"), 0, 0);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1055 for (i = 0; i < RARRAY_LEN(bt); i++)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1056 msg_attr(RSTRING_PTR(RARRAY_AREF(bt, i)), attr);
19376
1cae476a7c82 patch 8.2.0246: MSVC: deprecation warnings with Ruby
Bram Moolenaar <Bram@vim.org>
parents: 19102
diff changeset
1057 #else
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1058 bt = rb_funcall2(error, rb_intern("backtrace"), 0, 0);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1059 for (i = 0; i < RARRAY_LEN(bt); i++)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1060 msg_attr(RSTRING_PTR(RARRAY_PTR(bt)[i]), attr);
19376
1cae476a7c82 patch 8.2.0246: MSVC: deprecation warnings with Ruby
Bram Moolenaar <Bram@vim.org>
parents: 19102
diff changeset
1061 #endif
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1062 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1063 default:
26897
d02d40f0261c patch 8.2.3977: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1064 vim_snprintf(buff, BUFSIZ, _(e_unknown_longjmp_status_nr), state);
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15454
diff changeset
1065 emsg(buff);
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1066 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1070 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1071 vim_message(VALUE self UNUSED, VALUE str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 char *buff, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 str = rb_obj_as_string(str);
2990
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1076 if (RSTRING_LEN(str) > 0)
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1077 {
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1078 // Only do this when the string isn't empty, alloc(0) causes trouble.
12335
df498e3e34fc patch 8.0.1047: buffer overflow in Ruby
Christian Brabandt <cb@256bit.org>
parents: 10761
diff changeset
1079 buff = ALLOCA_N(char, RSTRING_LEN(str) + 1);
2990
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1080 strcpy(buff, RSTRING_PTR(str));
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1081 p = strchr(buff, '\n');
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1082 if (p) *p = '\0';
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1083 msg(buff);
2990
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1084 }
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1085 else
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1086 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1087 msg("");
2990
ad404f2a4bfa updated for version 7.3.267
Bram Moolenaar <bram@vim.org>
parents: 2683
diff changeset
1088 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1092 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1093 vim_set_option(VALUE self UNUSED, VALUE str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1095 do_set((char_u *)StringValuePtr(str), 0);
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
1096 update_screen(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1100 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1101 vim_command(VALUE self UNUSED, VALUE str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1103 do_cmdline_cmd((char_u *)StringValuePtr(str));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1107 #ifdef FEAT_EVAL
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1108 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1109 vim_to_ruby(typval_T *tv)
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1110 {
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1111 VALUE result = Qnil;
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1112
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1113 if (tv->v_type == VAR_STRING)
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1114 {
2121
20d9fc2f13a4 updated for version 7.2.403
Bram Moolenaar <bram@zimbu.org>
parents: 2117
diff changeset
1115 result = rb_str_new2(tv->vval.v_string == NULL
20d9fc2f13a4 updated for version 7.2.403
Bram Moolenaar <bram@zimbu.org>
parents: 2117
diff changeset
1116 ? "" : (char *)(tv->vval.v_string));
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1117 }
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1118 else if (tv->v_type == VAR_NUMBER)
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1119 {
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1120 result = INT2NUM(tv->vval.v_number);
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1121 }
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1122 else if (tv->v_type == VAR_FLOAT)
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1123 {
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1124 result = rb_float_new(tv->vval.v_float);
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1125 }
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1126 else if (tv->v_type == VAR_LIST)
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1127 {
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1128 list_T *list = tv->vval.v_list;
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1129 listitem_T *curr;
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1130
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1131 result = rb_ary_new();
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1132
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1133 if (list != NULL)
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1134 {
19888
435726a03481 patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents: 19846
diff changeset
1135 FOR_ALL_LIST_ITEMS(list, curr)
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1136 rb_ary_push(result, vim_to_ruby(&curr->li_tv));
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1137 }
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1138 }
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1139 else if (tv->v_type == VAR_DICT)
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1140 {
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1141 result = rb_hash_new();
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1142
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1143 if (tv->vval.v_dict != NULL)
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1144 {
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1145 hashtab_T *ht = &tv->vval.v_dict->dv_hashtab;
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1146 long_u todo = ht->ht_used;
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1147 hashitem_T *hi;
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1148 dictitem_T *di;
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1149
32118
04d9dff67d99 patch 9.0.1390: FOR_ALL_ macros are defined in an unexpected file
Bram Moolenaar <Bram@vim.org>
parents: 31702
diff changeset
1150 FOR_ALL_HASHTAB_ITEMS(ht, hi, todo)
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1151 {
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1152 if (!HASHITEM_EMPTY(hi))
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1153 {
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1154 --todo;
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1155
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1156 di = dict_lookup(hi);
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1157 rb_hash_aset(result, rb_str_new2((char *)hi->hi_key),
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1158 vim_to_ruby(&di->di_tv));
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1159 }
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1160 }
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1161 }
7712
bce3b5ddb393 commit https://github.com/vim/vim/commit/520e1e41f35b063ede63b41738c82d6636e78c34
Christian Brabandt <cb@256bit.org>
parents: 7668
diff changeset
1162 }
19102
ba9f50bfda83 patch 8.2.0111: VAR_SPECIAL is also used for booleans
Bram Moolenaar <Bram@vim.org>
parents: 19079
diff changeset
1163 else if (tv->v_type == VAR_BOOL || tv->v_type == VAR_SPECIAL)
7712
bce3b5ddb393 commit https://github.com/vim/vim/commit/520e1e41f35b063ede63b41738c82d6636e78c34
Christian Brabandt <cb@256bit.org>
parents: 7668
diff changeset
1164 {
14411
504091aca571 patch 8.1.0220: Ruby converts v:true and v:false to a number
Christian Brabandt <cb@256bit.org>
parents: 14395
diff changeset
1165 if (tv->vval.v_number == VVAL_TRUE)
504091aca571 patch 8.1.0220: Ruby converts v:true and v:false to a number
Christian Brabandt <cb@256bit.org>
parents: 14395
diff changeset
1166 result = Qtrue;
504091aca571 patch 8.1.0220: Ruby converts v:true and v:false to a number
Christian Brabandt <cb@256bit.org>
parents: 14395
diff changeset
1167 else if (tv->vval.v_number == VVAL_FALSE)
504091aca571 patch 8.1.0220: Ruby converts v:true and v:false to a number
Christian Brabandt <cb@256bit.org>
parents: 14395
diff changeset
1168 result = Qfalse;
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1169 }
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1170 else if (tv->v_type == VAR_BLOB)
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1171 {
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1172 result = rb_str_new(tv->vval.v_blob->bv_ga.ga_data,
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1173 tv->vval.v_blob->bv_ga.ga_len);
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1174 }
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1175 // else return Qnil;
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1176
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1177 return result;
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1178 }
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1179 #endif
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1180
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1181 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1182 vim_evaluate(VALUE self UNUSED, VALUE str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 #ifdef FEAT_EVAL
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1185 typval_T *tv;
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1186 VALUE result;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1188 tv = eval_expr((char_u *)StringValuePtr(str), NULL);
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1189 if (tv == NULL)
2117
4be6da0fa3d9 updated for version 7.2.400
Bram Moolenaar <bram@zimbu.org>
parents: 2104
diff changeset
1190 return Qnil;
2090
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1191 result = vim_to_ruby(tv);
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1192
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1193 free_tv(tv);
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1194
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1195 return result;
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1196 #else
53d475dff0e3 updated for version 7.2.374
Bram Moolenaar <bram@zimbu.org>
parents: 2084
diff changeset
1197 return Qnil;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1201 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1202 static size_t buffer_dsize(const void *buf);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1203
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1204 static const rb_data_type_t buffer_type = {
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1205 "vim_buffer",
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1206 {0, 0, buffer_dsize,
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1207 # if RUBY_VERSION >= 27
19479
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
1208 0, {0}
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1209 # else
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1210 {0, 0}
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1211 # endif
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1212 },
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1213 0, 0,
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1214 # ifdef RUBY_TYPED_FREE_IMMEDIATELY
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1215 0,
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1216 # endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1217 };
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1218
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1219 static size_t
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1220 buffer_dsize(const void *buf UNUSED)
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1221 {
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1222 return sizeof(buf_T);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1223 }
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1224 #endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1225
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1226 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1227 buffer_new(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 {
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1229 if (buf->b_ruby_ref)
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1230 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1231 return (VALUE) buf->b_ruby_ref;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 }
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1233 else
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1234 {
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1235 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1236 VALUE obj = TypedData_Wrap_Struct(cBuffer, &buffer_type, buf);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1237 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 VALUE obj = Data_Wrap_Struct(cBuffer, 0, 0, buf);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1239 #endif
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1240 buf->b_ruby_ref = (void *) obj;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 rb_hash_aset(objtbl, rb_obj_id(obj), obj);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 return obj;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1246 static buf_T *
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1247 get_buf(VALUE obj)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1251 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1252 TypedData_Get_Struct(obj, buf_T, &buffer_type, buf);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1253 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 Data_Get_Struct(obj, buf_T, buf);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1255 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 rb_raise(eDeletedBufferError, "attempt to refer to deleted buffer");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1261 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1262 vim_blob(VALUE self UNUSED, VALUE str)
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1263 {
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1264 VALUE result = rb_str_new("0z", 2);
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1265 char buf[4];
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1266 int i;
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1267 for (i = 0; i < RSTRING_LEN(str); i++)
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1268 {
15943
e5f82e8b3c06 patch 8.1.0977: blob not tested with Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15882
diff changeset
1269 sprintf(buf, "%02X", (unsigned char)(RSTRING_PTR(str)[i]));
15681
ef9c89680e7f patch 8.1.0848: cannot build with Ruby 1.8
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
1270 rb_str_concat(result, rb_str_new2(buf));
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1271 }
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1272 return result;
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1273 }
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1274
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1275 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1276 buffer_s_current(VALUE self UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 return buffer_new(curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1281 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1282 buffer_s_current_getter(ID id UNUSED, VALUE *x UNUSED)
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1283 {
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1284 return buffer_new(curbuf);
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1285 }
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1286
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1287 static VALUE
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1288 buffer_s_count(VALUE self UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 buf_T *b;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9293
diff changeset
1293 FOR_ALL_BUFFERS(b)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1294 {
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1295 // Deleted buffers should not be counted
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1296 // SegPhault - 01/07/05
856
8cd729851562 updated for version 7.0g
vimboss
parents: 835
diff changeset
1297 if (b->b_p_bl)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1298 n++;
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1299 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1300
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 return INT2NUM(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1304 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1305 buffer_s_aref(VALUE self UNUSED, VALUE num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 buf_T *b;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 int n = NUM2INT(num);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9293
diff changeset
1310 FOR_ALL_BUFFERS(b)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1311 {
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1312 // Deleted buffers should not be counted
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1313 // SegPhault - 01/07/05
856
8cd729851562 updated for version 7.0g
vimboss
parents: 835
diff changeset
1314 if (!b->b_p_bl)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1315 continue;
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1316
856
8cd729851562 updated for version 7.0g
vimboss
parents: 835
diff changeset
1317 if (n == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 return buffer_new(b);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1319
856
8cd729851562 updated for version 7.0g
vimboss
parents: 835
diff changeset
1320 n--;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1325 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1326 buffer_name(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 buf_T *buf = get_buf(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329
750
e2f45cbe2b8a updated for version 7.0223
vimboss
parents: 714
diff changeset
1330 return buf->b_ffname ? rb_str_new2((char *)buf->b_ffname) : Qnil;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1333 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1334 buffer_number(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 buf_T *buf = get_buf(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 return INT2NUM(buf->b_fnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1341 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1342 buffer_count(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 buf_T *buf = get_buf(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 return INT2NUM(buf->b_ml.ml_line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1349 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1350 get_buffer_line(buf_T *buf, linenr_T n)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 {
2637
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1352 if (n <= 0 || n > buf->b_ml.ml_line_count)
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1353 rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1354 return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1357 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1358 buffer_aref(VALUE self, VALUE num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 buf_T *buf = get_buf(self);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1361
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1362 if (buf != NULL)
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1363 return get_buffer_line(buf, (linenr_T)NUM2LONG(num));
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1364 return Qnil; // For stop warning
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1365 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1366
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1367 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1368 set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1369 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1370 char *line = StringValuePtr(str);
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1371 aco_save_T aco;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1373 if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1374 {
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1375 // Set curwin/curbuf for "buf" and save some things.
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1376 aucmd_prepbuf(&aco, buf);
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1377 if (curbuf == buf)
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1378 {
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1379 // Only when it worked to set "curbuf".
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1380 if (u_savesub(n) == OK)
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1381 {
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1382 ml_replace(n, (char_u *)line, TRUE);
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1383 changed();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 #ifdef SYNTAX_HL
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1385 syn_changed(n); // recompute syntax hl. for this line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 #endif
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1387 }
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1388
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1389 // restore curwin/curbuf and a few other things
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1390 aucmd_restbuf(&aco);
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1391 // Careful: autocommands may have made "buf" invalid!
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1392 }
934
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 896
diff changeset
1393
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
1394 update_curbuf(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 }
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1396 else
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1397 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1398 rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 return str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1403 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1404 buffer_aset(VALUE self, VALUE num, VALUE str)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1405 {
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1406 buf_T *buf = get_buf(self);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1407
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1408 if (buf != NULL)
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1409 return set_buffer_line(buf, (linenr_T)NUM2LONG(num), str);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1410 return str;
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1411 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1412
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1413 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1414 buffer_delete(VALUE self, VALUE num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 {
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1416 buf_T *buf = get_buf(self);
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1417 long n = NUM2LONG(num);
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1418 aco_save_T aco;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1420 if (n > 0 && n <= buf->b_ml.ml_line_count)
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1421 {
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1422 // Set curwin/curbuf for "buf" and save some things.
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1423 aucmd_prepbuf(&aco, buf);
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1424 if (curbuf == buf)
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1425 {
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1426 // Only when it worked to set "curbuf".
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1427 if (u_savedel(n, 1) == OK)
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1428 {
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1429 ml_delete(n);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1430
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1431 // Changes to non-active buffers should properly refresh
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1432 // SegPhault - 01/09/05
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1433 deleted_lines_mark(n, 1L);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1434
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1435 changed();
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1436 }
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1437
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1438 // restore curwin/curbuf and a few other things
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1439 aucmd_restbuf(&aco);
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1440 // Careful: autocommands may have made "buf" invalid!
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1441 }
934
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 896
diff changeset
1442
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
1443 update_curbuf(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 }
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1445 else
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1446 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1447 rb_raise(rb_eIndexError, "line number %ld out of range", n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1452 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1453 buffer_append(VALUE self, VALUE num, VALUE str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 {
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1455 buf_T *buf = get_buf(self);
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1456 char *line = StringValuePtr(str);
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1457 long n = NUM2LONG(num);
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1458 aco_save_T aco;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459
2637
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1460 if (line == NULL)
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1461 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1462 rb_raise(rb_eIndexError, "NULL line");
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1463 }
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1464 else if (n >= 0 && n <= buf->b_ml.ml_line_count)
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1465 {
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1466 // set curwin/curbuf for "buf" and save some things
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1467 aucmd_prepbuf(&aco, buf);
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1468 if (curbuf == buf)
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1469 {
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1470 // Only when it worked to set "curbuf".
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1471 if (u_inssub(n + 1) == OK)
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1472 {
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1473 ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1474
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1475 // Changes to non-active buffers should properly refresh screen
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1476 // SegPhault - 12/20/04
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1477 appended_lines_mark(n, 1L);
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1478
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1479 changed();
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1480 }
896
354ea37841d1 updated for version 7.0-022
vimboss
parents: 856
diff changeset
1481
31263
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1482 // restore curwin/curbuf and a few other things
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1483 aucmd_restbuf(&aco);
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1484 // Careful: autocommands may have made "buf" invalid!
d8e7d725a666 patch 9.0.0965: using one window for executing autocommands is insufficient
Bram Moolenaar <Bram@vim.org>
parents: 31231
diff changeset
1485 }
934
e44efb3af0d5 updated for version 7.0-060
vimboss
parents: 896
diff changeset
1486
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
1487 update_curbuf(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 }
2637
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1489 else
37d62d968182 updated for version 7.3.058
Bram Moolenaar <bram@vim.org>
parents: 2624
diff changeset
1490 {
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1491 rb_raise(rb_eIndexError, "line number %ld out of range", n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 return str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1496 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1497 static size_t window_dsize(const void *buf);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1498
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1499 static const rb_data_type_t window_type = {
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1500 "vim_window",
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1501 {0, 0, window_dsize,
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1502 # if RUBY_VERSION >= 27
19479
bc6c7be92527 patch 8.2.0297: compiler warnings for the Ruby interface
Bram Moolenaar <Bram@vim.org>
parents: 19376
diff changeset
1503 0, {0}
19079
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1504 # else
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1505 {0, 0}
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1506 # endif
23df4b83fd31 patch 8.2.0100: macros for Ruby are too complicated
Bram Moolenaar <Bram@vim.org>
parents: 18798
diff changeset
1507 },
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1508 0, 0,
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1509 # ifdef RUBY_TYPED_FREE_IMMEDIATELY
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1510 0,
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1511 # endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1512 };
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1513
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1514 static size_t
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1515 window_dsize(const void *win UNUSED)
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1516 {
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1517 return sizeof(win_T);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1518 }
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1519 #endif
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1520
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1521 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1522 window_new(win_T *win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 {
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1524 if (win->w_ruby_ref)
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1525 {
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1526 return (VALUE) win->w_ruby_ref;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 }
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1528 else
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1529 {
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1530 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1531 VALUE obj = TypedData_Wrap_Struct(cVimWindow, &window_type, win);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1532 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 VALUE obj = Data_Wrap_Struct(cVimWindow, 0, 0, win);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1534 #endif
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 501
diff changeset
1535 win->w_ruby_ref = (void *) obj;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 rb_hash_aset(objtbl, rb_obj_id(obj), obj);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 return obj;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1541 static win_T *
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1542 get_win(VALUE obj)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 win_T *win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1546 #ifdef USE_TYPEDDATA
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1547 TypedData_Get_Struct(obj, win_T, &window_type, win);
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1548 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 Data_Get_Struct(obj, win_T, win);
7360
b20095ba6fc2 commit https://github.com/vim/vim/commit/f2f6d297966ec0e357640b71a238e51afcaba6cc
Christian Brabandt <cb@256bit.org>
parents: 7237
diff changeset
1550 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 if (win == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 rb_raise(eDeletedWindowError, "attempt to refer to deleted window");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 return win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1556 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1557 window_s_current(VALUE self UNUSED)
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1558 {
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1559 return window_new(curwin);
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1560 }
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1561
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1562 static VALUE
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1563 window_s_current_getter(ID id UNUSED, VALUE *x UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 return window_new(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1568 /*
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1569 * Added line manipulation functions
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1570 * SegPhault - 03/07/05
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1571 */
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1572 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1573 line_s_current(VALUE self UNUSED)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1574 {
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1575 return get_buffer_line(curbuf, curwin->w_cursor.lnum);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1576 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1577
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1578 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1579 set_current_line(VALUE self UNUSED, VALUE str)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1580 {
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1581 return set_buffer_line(curbuf, curwin->w_cursor.lnum, str);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1582 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1583
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1584 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1585 current_line_number(VALUE self UNUSED)
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1586 {
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1587 return INT2FIX((int)curwin->w_cursor.lnum);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1588 }
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1589
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1590 static VALUE
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1591 window_s_count(VALUE self UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 win_T *w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9293
diff changeset
1596 FOR_ALL_WINDOWS(w)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 n++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 return INT2NUM(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1601 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1602 window_s_aref(VALUE self UNUSED, VALUE num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 win_T *w;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 int n = NUM2INT(num);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 for (w = firstwin; w != NULL; w = w->w_next, --n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 if (n == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 return window_new(w);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1613 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1614 window_buffer(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 win_T *win = get_win(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 return buffer_new(win->w_buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1621 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1622 window_height(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 win_T *win = get_win(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 return INT2NUM(win->w_height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1629 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1630 window_set_height(VALUE self, VALUE height)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 win_T *win = get_win(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 win_T *savewin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 curwin = win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 win_setheight(NUM2INT(height));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 curwin = savewin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 return height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1641 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1642 window_width(VALUE self UNUSED)
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1643 {
12517
1b65cbe1578d patch 8.0.1137: cannot build with Ruby
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
1644 return INT2NUM(get_win(self)->w_width);
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1645 }
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1646
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1647 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1648 window_set_width(VALUE self UNUSED, VALUE width)
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1649 {
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1650 win_T *win = get_win(self);
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1651 win_T *savewin = curwin;
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1652
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1653 curwin = win;
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1654 win_setwidth(NUM2INT(width));
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1655 curwin = savewin;
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1656 return width;
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1657 }
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1658
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1659 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1660 window_cursor(VALUE self)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 win_T *win = get_win(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 return rb_assoc_new(INT2NUM(win->w_cursor.lnum), INT2NUM(win->w_cursor.col));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1667 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1668 window_set_cursor(VALUE self, VALUE pos)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 VALUE lnum, col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 win_T *win = get_win(self);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 Check_Type(pos, T_ARRAY);
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1674 if (RARRAY_LEN(pos) != 2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 rb_raise(rb_eArgError, "array length must be 2");
2077
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1676 lnum = RARRAY_PTR(pos)[0];
d8983769c9dd updated for version 7.2.361
Bram Moolenaar <bram@zimbu.org>
parents: 2076
diff changeset
1677 col = RARRAY_PTR(pos)[1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 win->w_cursor.lnum = NUM2LONG(lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 win->w_cursor.col = NUM2UINT(col);
14395
c15bef307de6 patch 8.1.0212: preferred cursor column not set in interfaces
Christian Brabandt <cb@256bit.org>
parents: 14389
diff changeset
1680 win->w_set_curswant = TRUE;
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1681 check_cursor(); // put cursor on an existing line
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
1682 update_screen(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 return Qnil;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1686 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1687 f_nop(VALUE self UNUSED)
3474
d7b335626ddc updated for version 7.3.501
Bram Moolenaar <bram@vim.org>
parents: 2990
diff changeset
1688 {
d7b335626ddc updated for version 7.3.501
Bram Moolenaar <bram@vim.org>
parents: 2990
diff changeset
1689 return Qnil;
d7b335626ddc updated for version 7.3.501
Bram Moolenaar <bram@vim.org>
parents: 2990
diff changeset
1690 }
d7b335626ddc updated for version 7.3.501
Bram Moolenaar <bram@vim.org>
parents: 2990
diff changeset
1691
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1692 static VALUE
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1693 f_p(int argc, VALUE *argv, VALUE self UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 VALUE str = rb_str_new("", 0);
14511
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1697 VALUE ret = Qnil;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698
8802
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1699 for (i = 0; i < argc; i++)
eaf11fa2fec8 commit https://github.com/vim/vim/commit/758535a1df4c5e86b45dddf12db2a54dea28ca40
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1700 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 if (i > 0) rb_str_cat(str, ", ", 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 rb_str_concat(str, rb_inspect(argv[i]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 }
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1704 msg(RSTRING_PTR(str));
14511
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1705
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1706 if (argc == 1)
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1707 ret = argv[0];
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1708 else if (argc > 1)
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1709 ret = rb_ary_new4(argc, argv);
e6ad77cf13e0 patch 8.1.0269: Ruby Kernel.#p method always returns nil
Christian Brabandt <cb@256bit.org>
parents: 14451
diff changeset
1710 return ret;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1713 static void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1714 ruby_io_init(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 #ifndef DYNAMIC_RUBY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 RUBYEXTERN VALUE rb_stdout;
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
1718 RUBYEXTERN VALUE rb_stderr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 rb_stdout = rb_obj_alloc(rb_cObject);
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
1722 rb_stderr = rb_obj_alloc(rb_cObject);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
3474
d7b335626ddc updated for version 7.3.501
Bram Moolenaar <bram@vim.org>
parents: 2990
diff changeset
1724 rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
14389
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
1725 rb_define_singleton_method(rb_stderr, "write", vim_message, 1);
424ccd85d5c6 patch 8.1.0209: stderr output from Ruby messes up display
Christian Brabandt <cb@256bit.org>
parents: 13958
diff changeset
1726 rb_define_singleton_method(rb_stderr, "flush", f_nop, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 rb_define_global_function("p", f_p, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1730 static void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1731 ruby_vim_init(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 objtbl = rb_hash_new();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 rb_global_variable(&objtbl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1736 // The Vim module used to be called "VIM", but "Vim" is better. Make an
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1737 // alias "VIM" for backwards compatibility.
1188
2a276274c592 updated for version 7.1b
vimboss
parents: 1131
diff changeset
1738 mVIM = rb_define_module("Vim");
2a276274c592 updated for version 7.1b
vimboss
parents: 1131
diff changeset
1739 rb_define_const(rb_cObject, "VIM", mVIM);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 rb_define_const(mVIM, "VERSION_MAJOR", INT2NUM(VIM_VERSION_MAJOR));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 rb_define_const(mVIM, "VERSION_MINOR", INT2NUM(VIM_VERSION_MINOR));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 rb_define_const(mVIM, "VERSION_BUILD", INT2NUM(VIM_VERSION_BUILD));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 rb_define_const(mVIM, "VERSION_PATCHLEVEL", INT2NUM(VIM_VERSION_PATCHLEVEL));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 rb_define_const(mVIM, "VERSION_SHORT", rb_str_new2(VIM_VERSION_SHORT));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 rb_define_const(mVIM, "VERSION_MEDIUM", rb_str_new2(VIM_VERSION_MEDIUM));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 rb_define_const(mVIM, "VERSION_LONG", rb_str_new2(VIM_VERSION_LONG));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 rb_define_const(mVIM, "VERSION_LONG_DATE", rb_str_new2(VIM_VERSION_LONG_DATE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 rb_define_module_function(mVIM, "message", vim_message, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 rb_define_module_function(mVIM, "set_option", vim_set_option, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 rb_define_module_function(mVIM, "command", vim_command, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 rb_define_module_function(mVIM, "evaluate", vim_evaluate, 1);
15454
1d2b5c016f17 patch 8.1.0735: cannot handle binary data
Bram Moolenaar <Bram@vim.org>
parents: 15392
diff changeset
1752 rb_define_module_function(mVIM, "blob", vim_blob, 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 eDeletedBufferError = rb_define_class_under(mVIM, "DeletedBufferError",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 rb_eStandardError);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 eDeletedWindowError = rb_define_class_under(mVIM, "DeletedWindowError",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 rb_eStandardError);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 cBuffer = rb_define_class_under(mVIM, "Buffer", rb_cObject);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 rb_define_singleton_method(cBuffer, "current", buffer_s_current, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 rb_define_singleton_method(cBuffer, "count", buffer_s_count, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 rb_define_singleton_method(cBuffer, "[]", buffer_s_aref, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 rb_define_method(cBuffer, "name", buffer_name, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 rb_define_method(cBuffer, "number", buffer_number, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 rb_define_method(cBuffer, "count", buffer_count, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 rb_define_method(cBuffer, "length", buffer_count, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 rb_define_method(cBuffer, "[]", buffer_aref, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 rb_define_method(cBuffer, "[]=", buffer_aset, 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 rb_define_method(cBuffer, "delete", buffer_delete, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 rb_define_method(cBuffer, "append", buffer_append, 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1772 // Added line manipulation functions
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1773 // SegPhault - 03/07/05
779
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1774 rb_define_method(cBuffer, "line_number", current_line_number, 0);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1775 rb_define_method(cBuffer, "line", line_s_current, 0);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1776 rb_define_method(cBuffer, "line=", set_current_line, 1);
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1777
fb913578cbf5 updated for version 7.0228
vimboss
parents: 750
diff changeset
1778
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 cVimWindow = rb_define_class_under(mVIM, "Window", rb_cObject);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 rb_define_singleton_method(cVimWindow, "current", window_s_current, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 rb_define_singleton_method(cVimWindow, "count", window_s_count, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 rb_define_singleton_method(cVimWindow, "[]", window_s_aref, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 rb_define_method(cVimWindow, "buffer", window_buffer, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 rb_define_method(cVimWindow, "height", window_height, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 rb_define_method(cVimWindow, "height=", window_set_height, 1);
501
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1786 rb_define_method(cVimWindow, "width", window_width, 0);
ce2181d14aa0 updated for version 7.0139
vimboss
parents: 272
diff changeset
1787 rb_define_method(cVimWindow, "width=", window_set_width, 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 rb_define_method(cVimWindow, "cursor", window_cursor, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 rb_define_method(cVimWindow, "cursor=", window_set_cursor, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790
23116
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1791 rb_define_virtual_variable("$curbuf", buffer_s_current_getter, 0);
55f8b7da27f3 patch 8.2.2104: build problem with Ruby 2.7
Bram Moolenaar <Bram@vim.org>
parents: 20830
diff changeset
1792 rb_define_virtual_variable("$curwin", window_s_current_getter, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 }
4369
c9820396afb9 updated for version 7.3.933
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1794
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1795 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1796 vim_ruby_init(void *stack_start)
4369
c9820396afb9 updated for version 7.3.933
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1797 {
18798
f0f9692d4487 patch 8.1.2387: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 16338
diff changeset
1798 // should get machine stack start address early in main function
4369
c9820396afb9 updated for version 7.3.933
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1799 ruby_stack_start = stack_start;
c9820396afb9 updated for version 7.3.933
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1800 }
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1801
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1802 static int
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1803 convert_hash2dict(VALUE key, VALUE val, VALUE arg)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1804 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1805 dict_T *d = (dict_T *)arg;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1806 dictitem_T *di;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1807
23384
f719577ddae6 patch 8.2.2235: build failure with some Ruby versions
Bram Moolenaar <Bram@vim.org>
parents: 23160
diff changeset
1808 di = dictitem_alloc((char_u *)RSTRING_PTR(rb_obj_as_string(key)));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1809 if (di == NULL || ruby_convert_to_vim_value(val, &di->di_tv) != OK
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1810 || dict_add(d, di) != OK)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1811 {
31231
684e6dfa2fba patch 9.0.0949: crash when unletting a variable while listing variables
Bram Moolenaar <Bram@vim.org>
parents: 30421
diff changeset
1812 d->dv_hashtab.ht_flags |= HTFLAGS_ERROR;
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1813 return ST_STOP;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1814 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1815 return ST_CONTINUE;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1816 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1817
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1818 static int
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1819 ruby_convert_to_vim_value(VALUE val, typval_T *rettv)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1820 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1821 switch (TYPE(val))
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1822 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1823 case T_NIL:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1824 rettv->v_type = VAR_SPECIAL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1825 rettv->vval.v_number = VVAL_NULL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1826 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1827 case T_TRUE:
19102
ba9f50bfda83 patch 8.2.0111: VAR_SPECIAL is also used for booleans
Bram Moolenaar <Bram@vim.org>
parents: 19079
diff changeset
1828 rettv->v_type = VAR_BOOL;
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1829 rettv->vval.v_number = VVAL_TRUE;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1830 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1831 case T_FALSE:
19102
ba9f50bfda83 patch 8.2.0111: VAR_SPECIAL is also used for booleans
Bram Moolenaar <Bram@vim.org>
parents: 19079
diff changeset
1832 rettv->v_type = VAR_BOOL;
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1833 rettv->vval.v_number = VVAL_FALSE;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1834 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1835 case T_BIGNUM:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1836 case T_FIXNUM:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1837 rettv->v_type = VAR_NUMBER;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1838 rettv->vval.v_number = (varnumber_T)NUM2LONG(val);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1839 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1840 case T_FLOAT:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1841 rettv->v_type = VAR_FLOAT;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1842 rettv->vval.v_float = (float_T)NUM2DBL(val);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1843 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1844 default:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1845 val = rb_obj_as_string(val);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1846 // FALLTHROUGH
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1847 case T_STRING:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1848 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1849 VALUE str = (VALUE)RSTRING(val);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1850
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1851 rettv->v_type = VAR_STRING;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1852 rettv->vval.v_string = vim_strnsave((char_u *)RSTRING_PTR(str),
20830
9064044fd4f6 patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
1853 RSTRING_LEN(str));
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1854 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1855 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1856 case T_ARRAY:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1857 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1858 list_T *l;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1859 long i;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1860 typval_T v;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1861
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1862 l = list_alloc();
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1863 if (l == NULL)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1864 return FAIL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1865
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1866 for (i = 0; i < RARRAY_LEN(val); ++i)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1867 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1868 if (ruby_convert_to_vim_value((VALUE)RARRAY_PTR(val)[i],
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1869 &v) != OK)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1870 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1871 list_unref(l);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1872 return FAIL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1873 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1874 list_append_tv(l, &v);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1875 clear_tv(&v);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1876 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1877
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1878 rettv->v_type = VAR_LIST;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1879 rettv->vval.v_list = l;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1880 ++l->lv_refcount;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1881 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1882 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1883 case T_HASH:
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1884 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1885 dict_T *d;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1886
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1887 d = dict_alloc();
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1888 if (d == NULL)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1889 return FAIL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1890
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1891 rb_hash_foreach(val, convert_hash2dict, (VALUE)d);
31231
684e6dfa2fba patch 9.0.0949: crash when unletting a variable while listing variables
Bram Moolenaar <Bram@vim.org>
parents: 30421
diff changeset
1892 if (d->dv_hashtab.ht_flags & HTFLAGS_ERROR)
16103
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1893 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1894 dict_unref(d);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1895 return FAIL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1896 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1897
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1898 rettv->v_type = VAR_DICT;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1899 rettv->vval.v_dict = d;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1900 ++d->dv_refcount;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1901 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1902 break;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1903 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1904 return OK;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1905 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1906
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1907 void
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1908 do_rubyeval(char_u *str, typval_T *rettv)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1909 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1910 int retval = FAIL;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1911
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1912 if (ensure_ruby_initialized())
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1913 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1914 int state;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1915 VALUE obj;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1916
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1917 obj = rb_eval_string_protect((const char *)str, &state);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1918 if (state)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1919 error_print(state);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1920 else
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1921 retval = ruby_convert_to_vim_value(obj, rettv);
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1922 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1923 if (retval == FAIL)
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1924 {
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1925 rettv->v_type = VAR_NUMBER;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1926 rettv->vval.v_number = 0;
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1927 }
518f44125207 patch 8.1.1056: no eval function for Ruby
Bram Moolenaar <Bram@vim.org>
parents: 15943
diff changeset
1928 }