]>
Commit | Line | Data |
---|---|---|
8587d00a AM |
1 | To: vim-dev@vim.org |
2 | Subject: Patch 7.2.361 | |
3 | Fcc: outbox | |
4 | From: Bram Moolenaar <Bram@moolenaar.net> | |
5 | Mime-Version: 1.0 | |
6 | Content-Type: text/plain; charset=UTF-8 | |
7 | Content-Transfer-Encoding: 8bit | |
8 | ------------ | |
9 | ||
10 | Patch 7.2.361 | |
11 | Problem: Ruby 1.9 is not supported. | |
12 | Solution: Add Ruby 1.9 support. (Msaki Suketa) | |
13 | Files: src/Makefile, src/auto/configure, src/configure.in, src/if_ruby.c | |
14 | ||
15 | ||
16 | *** ../vim-7.2.360/src/Makefile 2010-02-17 15:12:22.000000000 +0100 | |
17 | --- src/Makefile 2010-02-17 16:21:01.000000000 +0100 | |
18 | *************** | |
19 | *** 395,401 **** | |
20 | ||
21 | # RUBY | |
22 | # Uncomment this when you want to include the Ruby interface. | |
23 | ! #CONF_OPT_RUBY = --enable-rubyinterp | |
24 | ||
25 | # MZSCHEME | |
26 | # Uncomment this when you want to include the MzScheme interface. | |
27 | --- 395,403 ---- | |
28 | ||
29 | # RUBY | |
30 | # Uncomment this when you want to include the Ruby interface. | |
31 | ! # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu). | |
32 | ! # CONF_OPT_RUBY = --enable-rubyinterp | |
33 | ! # CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1 | |
34 | ||
35 | # MZSCHEME | |
36 | # Uncomment this when you want to include the MzScheme interface. | |
37 | *** ../vim-7.2.360/src/auto/configure 2009-12-16 17:14:08.000000000 +0100 | |
38 | --- src/auto/configure 2010-02-17 16:08:59.000000000 +0100 | |
39 | *************** | |
40 | *** 793,798 **** | |
41 | --- 793,799 ---- | |
42 | enable_tclinterp | |
43 | with_tclsh | |
44 | enable_rubyinterp | |
45 | + with_ruby_command | |
46 | enable_cscope | |
47 | enable_workshop | |
48 | enable_netbeans | |
49 | *************** | |
50 | *** 1503,1508 **** | |
51 | --- 1504,1510 ---- | |
52 | --with-plthome=PLTHOME Use PLTHOME. | |
53 | --with-python-config-dir=PATH Python's config directory | |
54 | --with-tclsh=PATH which tclsh to use (default: tclsh8.0) | |
55 | + --with-ruby-command=RUBY name of the Ruby command (default: ruby) | |
56 | --with-x use the X Window System | |
57 | --with-gtk-prefix=PFX Prefix where GTK is installed (optional) | |
58 | --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) | |
59 | *************** | |
60 | *** 5703,5711 **** | |
61 | { $as_echo "$as_me:$LINENO: result: $enable_rubyinterp" >&5 | |
62 | $as_echo "$enable_rubyinterp" >&6; } | |
63 | if test "$enable_rubyinterp" = "yes"; then | |
64 | ||
65 | ! # Extract the first word of "ruby", so it can be a program name with args. | |
66 | ! set dummy ruby; ac_word=$2 | |
67 | { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 | |
68 | $as_echo_n "checking for $ac_word... " >&6; } | |
69 | if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then | |
70 | --- 5705,5725 ---- | |
71 | { $as_echo "$as_me:$LINENO: result: $enable_rubyinterp" >&5 | |
72 | $as_echo "$enable_rubyinterp" >&6; } | |
73 | if test "$enable_rubyinterp" = "yes"; then | |
74 | + { $as_echo "$as_me:$LINENO: checking --with-ruby-command argument" >&5 | |
75 | + $as_echo_n "checking --with-ruby-command argument... " >&6; } | |
76 | ||
77 | ! # Check whether --with-ruby-command was given. | |
78 | ! if test "${with_ruby_command+set}" = set; then | |
79 | ! withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:$LINENO: result: $RUBY_CMD" >&5 | |
80 | ! $as_echo "$RUBY_CMD" >&6; } | |
81 | ! else | |
82 | ! RUBY_CMD="ruby"; { $as_echo "$as_me:$LINENO: result: defaulting to $RUBY_CMD" >&5 | |
83 | ! $as_echo "defaulting to $RUBY_CMD" >&6; } | |
84 | ! fi | |
85 | ! | |
86 | ! | |
87 | ! # Extract the first word of "$RUBY_CMD", so it can be a program name with args. | |
88 | ! set dummy $RUBY_CMD; ac_word=$2 | |
89 | { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 | |
90 | $as_echo_n "checking for $ac_word... " >&6; } | |
91 | if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then | |
92 | *************** | |
93 | *** 5752,5762 **** | |
94 | $as_echo "OK" >&6; } | |
95 | { $as_echo "$as_me:$LINENO: checking Ruby header files" >&5 | |
96 | $as_echo_n "checking Ruby header files... " >&6; } | |
97 | ! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null` | |
98 | if test "X$rubyhdrdir" != "X"; then | |
99 | { $as_echo "$as_me:$LINENO: result: $rubyhdrdir" >&5 | |
100 | $as_echo "$rubyhdrdir" >&6; } | |
101 | RUBY_CFLAGS="-I$rubyhdrdir" | |
102 | rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'` | |
103 | if test "X$rubylibs" != "X"; then | |
104 | RUBY_LIBS="$rubylibs" | |
105 | --- 5766,5782 ---- | |
106 | $as_echo "OK" >&6; } | |
107 | { $as_echo "$as_me:$LINENO: checking Ruby header files" >&5 | |
108 | $as_echo_n "checking Ruby header files... " >&6; } | |
109 | ! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null` | |
110 | if test "X$rubyhdrdir" != "X"; then | |
111 | { $as_echo "$as_me:$LINENO: result: $rubyhdrdir" >&5 | |
112 | $as_echo "$rubyhdrdir" >&6; } | |
113 | RUBY_CFLAGS="-I$rubyhdrdir" | |
114 | + rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'` | |
115 | + if test -d "$rubyhdrdir/$rubyarch"; then | |
116 | + RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" | |
117 | + fi | |
118 | + rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'` | |
119 | + RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" | |
120 | rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'` | |
121 | if test "X$rubylibs" != "X"; then | |
122 | RUBY_LIBS="$rubylibs" | |
123 | *************** | |
124 | *** 5793,5800 **** | |
125 | _ACEOF | |
126 | ||
127 | else | |
128 | ! { $as_echo "$as_me:$LINENO: result: not found" >&5 | |
129 | ! $as_echo "not found" >&6; } | |
130 | fi | |
131 | else | |
132 | { $as_echo "$as_me:$LINENO: result: too old; need Ruby version 1.6.0 or later" >&5 | |
133 | --- 5813,5820 ---- | |
134 | _ACEOF | |
135 | ||
136 | else | |
137 | ! { $as_echo "$as_me:$LINENO: result: not found; disabling Ruby" >&5 | |
138 | ! $as_echo "not found; disabling Ruby" >&6; } | |
139 | fi | |
140 | else | |
141 | { $as_echo "$as_me:$LINENO: result: too old; need Ruby version 1.6.0 or later" >&5 | |
142 | *** ../vim-7.2.360/src/configure.in 2009-12-16 17:14:08.000000000 +0100 | |
143 | --- src/configure.in 2010-02-17 16:00:58.000000000 +0100 | |
144 | *************** | |
145 | *** 949,965 **** | |
146 | [enable_rubyinterp="no"]) | |
147 | AC_MSG_RESULT($enable_rubyinterp) | |
148 | if test "$enable_rubyinterp" = "yes"; then | |
149 | AC_SUBST(vi_cv_path_ruby) | |
150 | ! AC_PATH_PROG(vi_cv_path_ruby, ruby) | |
151 | if test "X$vi_cv_path_ruby" != "X"; then | |
152 | AC_MSG_CHECKING(Ruby version) | |
153 | if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then | |
154 | AC_MSG_RESULT(OK) | |
155 | AC_MSG_CHECKING(Ruby header files) | |
156 | ! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` | |
157 | if test "X$rubyhdrdir" != "X"; then | |
158 | AC_MSG_RESULT($rubyhdrdir) | |
159 | RUBY_CFLAGS="-I$rubyhdrdir" | |
160 | rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` | |
161 | if test "X$rubylibs" != "X"; then | |
162 | RUBY_LIBS="$rubylibs" | |
163 | --- 949,975 ---- | |
164 | [enable_rubyinterp="no"]) | |
165 | AC_MSG_RESULT($enable_rubyinterp) | |
166 | if test "$enable_rubyinterp" = "yes"; then | |
167 | + AC_MSG_CHECKING(--with-ruby-command argument) | |
168 | + AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)], | |
169 | + RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD), | |
170 | + RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD)) | |
171 | AC_SUBST(vi_cv_path_ruby) | |
172 | ! AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD) | |
173 | if test "X$vi_cv_path_ruby" != "X"; then | |
174 | AC_MSG_CHECKING(Ruby version) | |
175 | if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then | |
176 | AC_MSG_RESULT(OK) | |
177 | AC_MSG_CHECKING(Ruby header files) | |
178 | ! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` | |
179 | if test "X$rubyhdrdir" != "X"; then | |
180 | AC_MSG_RESULT($rubyhdrdir) | |
181 | RUBY_CFLAGS="-I$rubyhdrdir" | |
182 | + rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'` | |
183 | + if test -d "$rubyhdrdir/$rubyarch"; then | |
184 | + RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" | |
185 | + fi | |
186 | + rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'` | |
187 | + RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" | |
188 | rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` | |
189 | if test "X$rubylibs" != "X"; then | |
190 | RUBY_LIBS="$rubylibs" | |
191 | *************** | |
192 | *** 997,1003 **** | |
193 | RUBY_PRO="if_ruby.pro" | |
194 | AC_DEFINE(FEAT_RUBY) | |
195 | else | |
196 | ! AC_MSG_RESULT(not found, disabling Ruby) | |
197 | fi | |
198 | else | |
199 | AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later) | |
200 | --- 1007,1013 ---- | |
201 | RUBY_PRO="if_ruby.pro" | |
202 | AC_DEFINE(FEAT_RUBY) | |
203 | else | |
204 | ! AC_MSG_RESULT(not found; disabling Ruby) | |
205 | fi | |
206 | else | |
207 | AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later) | |
208 | *** ../vim-7.2.360/src/if_ruby.c 2010-02-17 15:11:35.000000000 +0100 | |
209 | --- src/if_ruby.c 2010-02-17 16:08:47.000000000 +0100 | |
210 | *************** | |
211 | *** 54,59 **** | |
212 | --- 54,62 ---- | |
213 | #endif | |
214 | ||
215 | #include <ruby.h> | |
216 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
217 | + # include <ruby/encoding.h> | |
218 | + #endif | |
219 | ||
220 | #undef EXTERN | |
221 | #undef _ | |
222 | *************** | |
223 | *** 65,70 **** | |
224 | --- 68,95 ---- | |
225 | # define __OPENTRANSPORTPROVIDERS__ | |
226 | #endif | |
227 | ||
228 | + /* | |
229 | + * Backward compatiblity for Ruby 1.8 and earlier. | |
230 | + * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided. | |
231 | + * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead | |
232 | + * RXXX_LEN(s) and RXXX_PTR(s) are provided. | |
233 | + */ | |
234 | + #ifndef StringValuePtr | |
235 | + # define StringValuePtr(s) STR2CSTR(s) | |
236 | + #endif | |
237 | + #ifndef RARRAY_LEN | |
238 | + # define RARRAY_LEN(s) RARRAY(s)->len | |
239 | + #endif | |
240 | + #ifndef RARRAY_PTR | |
241 | + # define RARRAY_PTR(s) RARRAY(s)->ptr | |
242 | + #endif | |
243 | + #ifndef RSTRING_LEN | |
244 | + # define RSTRING_LEN(s) RSTRING(s)->len | |
245 | + #endif | |
246 | + #ifndef RSTRING_PTR | |
247 | + # define RSTRING_PTR(s) RSTRING(s)->ptr | |
248 | + #endif | |
249 | + | |
250 | #include "vim.h" | |
251 | #include "version.h" | |
252 | ||
253 | *************** | |
254 | *** 134,140 **** | |
255 | #define rb_str_concat dll_rb_str_concat | |
256 | #define rb_str_new dll_rb_str_new | |
257 | #define rb_str_new2 dll_rb_str_new2 | |
258 | ! #define ruby_errinfo (*dll_ruby_errinfo) | |
259 | #define ruby_init dll_ruby_init | |
260 | #define ruby_init_loadpath dll_ruby_init_loadpath | |
261 | #define NtInitialize dll_NtInitialize | |
262 | --- 159,169 ---- | |
263 | #define rb_str_concat dll_rb_str_concat | |
264 | #define rb_str_new dll_rb_str_new | |
265 | #define rb_str_new2 dll_rb_str_new2 | |
266 | ! #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
267 | ! # define rb_errinfo dll_rb_errinfo | |
268 | ! #else | |
269 | ! # define ruby_errinfo (*dll_ruby_errinfo) | |
270 | ! #endif | |
271 | #define ruby_init dll_ruby_init | |
272 | #define ruby_init_loadpath dll_ruby_init_loadpath | |
273 | #define NtInitialize dll_NtInitialize | |
274 | *************** | |
275 | *** 142,147 **** | |
276 | --- 171,184 ---- | |
277 | # define rb_w32_snprintf dll_rb_w32_snprintf | |
278 | #endif | |
279 | ||
280 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
281 | + # define ruby_script dll_ruby_script | |
282 | + # define rb_enc_find_index dll_rb_enc_find_index | |
283 | + # define rb_enc_find dll_rb_enc_find | |
284 | + # define rb_enc_str_new dll_rb_enc_str_new | |
285 | + # define rb_sprintf dll_rb_sprintf | |
286 | + #endif | |
287 | + | |
288 | /* | |
289 | * Pointers for dynamic link | |
290 | */ | |
291 | *************** | |
292 | *** 189,195 **** | |
293 | --- 226,236 ---- | |
294 | static VALUE (*dll_rb_str_concat) (VALUE, VALUE); | |
295 | static VALUE (*dll_rb_str_new) (const char*, long); | |
296 | static VALUE (*dll_rb_str_new2) (const char*); | |
297 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
298 | + static VALUE (*dll_rb_errinfo) (void); | |
299 | + #else | |
300 | static VALUE *dll_ruby_errinfo; | |
301 | + #endif | |
302 | static void (*dll_ruby_init) (void); | |
303 | static void (*dll_ruby_init_loadpath) (void); | |
304 | static void (*dll_NtInitialize) (int*, char***); | |
305 | *************** | |
306 | *** 197,202 **** | |
307 | --- 238,251 ---- | |
308 | static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...); | |
309 | #endif | |
310 | ||
311 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
312 | + static void (*dll_ruby_script) (const char*); | |
313 | + static int (*dll_rb_enc_find_index) (const char*); | |
314 | + static rb_encoding* (*dll_rb_enc_find) (const char*); | |
315 | + static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*); | |
316 | + static VALUE (*dll_rb_sprintf) (const char*, ...); | |
317 | + #endif | |
318 | + | |
319 | static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */ | |
320 | ||
321 | /* | |
322 | *************** | |
323 | *** 252,264 **** | |
324 | --- 301,324 ---- | |
325 | {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat}, | |
326 | {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new}, | |
327 | {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2}, | |
328 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
329 | + {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo}, | |
330 | + #else | |
331 | {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo}, | |
332 | + #endif | |
333 | {"ruby_init", (RUBY_PROC*)&dll_ruby_init}, | |
334 | {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath}, | |
335 | {"NtInitialize", (RUBY_PROC*)&dll_NtInitialize}, | |
336 | #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 | |
337 | {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf}, | |
338 | #endif | |
339 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
340 | + {"ruby_script", (RUBY_PROC*)&dll_ruby_script}, | |
341 | + {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index}, | |
342 | + {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find}, | |
343 | + {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new}, | |
344 | + {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf}, | |
345 | + #endif | |
346 | {"", NULL}, | |
347 | }; | |
348 | ||
349 | *************** | |
350 | *** 348,353 **** | |
351 | --- 408,465 ---- | |
352 | vim_free(script); | |
353 | } | |
354 | ||
355 | + /* | |
356 | + * In Ruby 1.9 or later, ruby String object has encoding. | |
357 | + * conversion buffer string of vim to ruby String object using | |
358 | + * VIM encoding option. | |
359 | + */ | |
360 | + static VALUE | |
361 | + vim_str2rb_enc_str(const char *s) | |
362 | + { | |
363 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
364 | + int isnum; | |
365 | + long lval; | |
366 | + char_u *sval; | |
367 | + rb_encoding *enc; | |
368 | + | |
369 | + isnum = get_option_value((char_u *)"enc", &lval, &sval, 0); | |
370 | + if (isnum == 0) | |
371 | + { | |
372 | + enc = rb_enc_find((char *)sval); | |
373 | + vim_free(sval); | |
374 | + if (enc) { | |
375 | + return rb_enc_str_new(s, strlen(s), enc); | |
376 | + } | |
377 | + } | |
378 | + #endif | |
379 | + return rb_str_new2(s); | |
380 | + } | |
381 | + | |
382 | + static VALUE | |
383 | + eval_enc_string_protect(const char *str, int *state) | |
384 | + { | |
385 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
386 | + int isnum; | |
387 | + long lval; | |
388 | + char_u *sval; | |
389 | + rb_encoding *enc; | |
390 | + VALUE v; | |
391 | + | |
392 | + isnum = get_option_value((char_u *)"enc", &lval, &sval, 0); | |
393 | + if (isnum == 0) | |
394 | + { | |
395 | + enc = rb_enc_find((char *)sval); | |
396 | + vim_free(sval); | |
397 | + if (enc) | |
398 | + { | |
399 | + v = rb_sprintf("#-*- coding:%s -*-\n%s", rb_enc_name(enc), str); | |
400 | + return rb_eval_string_protect(StringValuePtr(v), state); | |
401 | + } | |
402 | + } | |
403 | + #endif | |
404 | + return rb_eval_string_protect(str, state); | |
405 | + } | |
406 | + | |
407 | void ex_rubydo(exarg_T *eap) | |
408 | { | |
409 | int state; | |
410 | *************** | |
411 | *** 360,368 **** | |
412 | for (i = eap->line1; i <= eap->line2; i++) { | |
413 | VALUE line, oldline; | |
414 | ||
415 | ! line = oldline = rb_str_new2((char *)ml_get(i)); | |
416 | rb_lastline_set(line); | |
417 | ! rb_eval_string_protect((char *) eap->arg, &state); | |
418 | if (state) { | |
419 | error_print(state); | |
420 | break; | |
421 | --- 472,480 ---- | |
422 | for (i = eap->line1; i <= eap->line2; i++) { | |
423 | VALUE line, oldline; | |
424 | ||
425 | ! line = oldline = vim_str2rb_enc_str((char *)ml_get(i)); | |
426 | rb_lastline_set(line); | |
427 | ! eval_enc_string_protect((char *) eap->arg, &state); | |
428 | if (state) { | |
429 | error_print(state); | |
430 | break; | |
431 | *************** | |
432 | *** 373,379 **** | |
433 | EMSG(_("E265: $_ must be an instance of String")); | |
434 | return; | |
435 | } | |
436 | ! ml_replace(i, (char_u *) STR2CSTR(line), 1); | |
437 | changed(); | |
438 | #ifdef SYNTAX_HL | |
439 | syn_changed(i); /* recompute syntax hl. for this line */ | |
440 | --- 485,491 ---- | |
441 | EMSG(_("E265: $_ must be an instance of String")); | |
442 | return; | |
443 | } | |
444 | ! ml_replace(i, (char_u *) StringValuePtr(line), 1); | |
445 | changed(); | |
446 | #ifdef SYNTAX_HL | |
447 | syn_changed(i); /* recompute syntax hl. for this line */ | |
448 | *************** | |
449 | *** 428,436 **** | |
450 | --- 540,557 ---- | |
451 | char *argv[] = {"gvim.exe"}; | |
452 | NtInitialize(&argc, &argv); | |
453 | #endif | |
454 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
455 | + RUBY_INIT_STACK; | |
456 | + #endif | |
457 | ruby_init(); | |
458 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
459 | + ruby_script("vim-ruby"); | |
460 | + #endif | |
461 | ruby_init_loadpath(); | |
462 | ruby_io_init(); | |
463 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
464 | + rb_enc_find_index("encdb"); | |
465 | + #endif | |
466 | ruby_vim_init(); | |
467 | ruby_initialized = 1; | |
468 | #ifdef DYNAMIC_RUBY | |
469 | *************** | |
470 | *** 448,455 **** | |
471 | --- 569,578 ---- | |
472 | static void error_print(int state) | |
473 | { | |
474 | #ifndef DYNAMIC_RUBY | |
475 | + #if !(defined(RUBY_VERSION) && RUBY_VERSION >= 19) | |
476 | RUBYEXTERN VALUE ruby_errinfo; | |
477 | #endif | |
478 | + #endif | |
479 | VALUE eclass; | |
480 | VALUE einfo; | |
481 | char buff[BUFSIZ]; | |
482 | *************** | |
483 | *** 482,490 **** | |
484 | break; | |
485 | case TAG_RAISE: | |
486 | case TAG_FATAL: | |
487 | eclass = CLASS_OF(ruby_errinfo); | |
488 | einfo = rb_obj_as_string(ruby_errinfo); | |
489 | ! if (eclass == rb_eRuntimeError && RSTRING(einfo)->len == 0) { | |
490 | EMSG(_("E272: unhandled exception")); | |
491 | } | |
492 | else { | |
493 | --- 605,618 ---- | |
494 | break; | |
495 | case TAG_RAISE: | |
496 | case TAG_FATAL: | |
497 | + #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 | |
498 | + eclass = CLASS_OF(rb_errinfo()); | |
499 | + einfo = rb_obj_as_string(rb_errinfo()); | |
500 | + #else | |
501 | eclass = CLASS_OF(ruby_errinfo); | |
502 | einfo = rb_obj_as_string(ruby_errinfo); | |
503 | ! #endif | |
504 | ! if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0) { | |
505 | EMSG(_("E272: unhandled exception")); | |
506 | } | |
507 | else { | |
508 | *************** | |
509 | *** 493,499 **** | |
510 | ||
511 | epath = rb_class_path(eclass); | |
512 | vim_snprintf(buff, BUFSIZ, "%s: %s", | |
513 | ! RSTRING(epath)->ptr, RSTRING(einfo)->ptr); | |
514 | p = strchr(buff, '\n'); | |
515 | if (p) *p = '\0'; | |
516 | EMSG(buff); | |
517 | --- 621,627 ---- | |
518 | ||
519 | epath = rb_class_path(eclass); | |
520 | vim_snprintf(buff, BUFSIZ, "%s: %s", | |
521 | ! RSTRING_PTR(epath), RSTRING_PTR(einfo)); | |
522 | p = strchr(buff, '\n'); | |
523 | if (p) *p = '\0'; | |
524 | EMSG(buff); | |
525 | *************** | |
526 | *** 511,518 **** | |
527 | char *buff, *p; | |
528 | ||
529 | str = rb_obj_as_string(str); | |
530 | ! buff = ALLOCA_N(char, RSTRING(str)->len); | |
531 | ! strcpy(buff, RSTRING(str)->ptr); | |
532 | p = strchr(buff, '\n'); | |
533 | if (p) *p = '\0'; | |
534 | MSG(buff); | |
535 | --- 639,646 ---- | |
536 | char *buff, *p; | |
537 | ||
538 | str = rb_obj_as_string(str); | |
539 | ! buff = ALLOCA_N(char, RSTRING_LEN(str)); | |
540 | ! strcpy(buff, RSTRING_PTR(str)); | |
541 | p = strchr(buff, '\n'); | |
542 | if (p) *p = '\0'; | |
543 | MSG(buff); | |
544 | *************** | |
545 | *** 521,541 **** | |
546 | ||
547 | static VALUE vim_set_option(VALUE self UNUSED, VALUE str) | |
548 | { | |
549 | ! do_set((char_u *)STR2CSTR(str), 0); | |
550 | update_screen(NOT_VALID); | |
551 | return Qnil; | |
552 | } | |
553 | ||
554 | static VALUE vim_command(VALUE self UNUSED, VALUE str) | |
555 | { | |
556 | ! do_cmdline_cmd((char_u *)STR2CSTR(str)); | |
557 | return Qnil; | |
558 | } | |
559 | ||
560 | static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) | |
561 | { | |
562 | #ifdef FEAT_EVAL | |
563 | ! char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE); | |
564 | ||
565 | if (value != NULL) | |
566 | { | |
567 | --- 649,669 ---- | |
568 | ||
569 | static VALUE vim_set_option(VALUE self UNUSED, VALUE str) | |
570 | { | |
571 | ! do_set((char_u *)StringValuePtr(str), 0); | |
572 | update_screen(NOT_VALID); | |
573 | return Qnil; | |
574 | } | |
575 | ||
576 | static VALUE vim_command(VALUE self UNUSED, VALUE str) | |
577 | { | |
578 | ! do_cmdline_cmd((char_u *)StringValuePtr(str)); | |
579 | return Qnil; | |
580 | } | |
581 | ||
582 | static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) | |
583 | { | |
584 | #ifdef FEAT_EVAL | |
585 | ! char_u *value = eval_to_string((char_u *)StringValuePtr(str), NULL, TRUE); | |
586 | ||
587 | if (value != NULL) | |
588 | { | |
589 | *************** | |
590 | *** 640,648 **** | |
591 | if (n > 0 && n <= buf->b_ml.ml_line_count) | |
592 | { | |
593 | char *line = (char *)ml_get_buf(buf, n, FALSE); | |
594 | ! return line ? rb_str_new2(line) : Qnil; | |
595 | } | |
596 | ! rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
597 | #ifndef __GNUC__ | |
598 | return Qnil; /* For stop warning */ | |
599 | #endif | |
600 | --- 768,776 ---- | |
601 | if (n > 0 && n <= buf->b_ml.ml_line_count) | |
602 | { | |
603 | char *line = (char *)ml_get_buf(buf, n, FALSE); | |
604 | ! return line ? vim_str2rb_enc_str(line) : Qnil; | |
605 | } | |
606 | ! rb_raise(rb_eIndexError, "line number %ld out of range", (long)n); | |
607 | #ifndef __GNUC__ | |
608 | return Qnil; /* For stop warning */ | |
609 | #endif | |
610 | *************** | |
611 | *** 659,665 **** | |
612 | ||
613 | static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str) | |
614 | { | |
615 | ! char *line = STR2CSTR(str); | |
616 | aco_save_T aco; | |
617 | ||
618 | if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) | |
619 | --- 787,793 ---- | |
620 | ||
621 | static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str) | |
622 | { | |
623 | ! char *line = StringValuePtr(str); | |
624 | aco_save_T aco; | |
625 | ||
626 | if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) | |
627 | *************** | |
628 | *** 683,689 **** | |
629 | } | |
630 | else | |
631 | { | |
632 | ! rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
633 | #ifndef __GNUC__ | |
634 | return Qnil; /* For stop warning */ | |
635 | #endif | |
636 | --- 811,817 ---- | |
637 | } | |
638 | else | |
639 | { | |
640 | ! rb_raise(rb_eIndexError, "line number %ld out of range", (long)n); | |
641 | #ifndef __GNUC__ | |
642 | return Qnil; /* For stop warning */ | |
643 | #endif | |
644 | *************** | |
645 | *** 729,735 **** | |
646 | } | |
647 | else | |
648 | { | |
649 | ! rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
650 | } | |
651 | return Qnil; | |
652 | } | |
653 | --- 857,863 ---- | |
654 | } | |
655 | else | |
656 | { | |
657 | ! rb_raise(rb_eIndexError, "line number %ld out of range", n); | |
658 | } | |
659 | return Qnil; | |
660 | } | |
661 | *************** | |
662 | *** 737,747 **** | |
663 | static VALUE buffer_append(VALUE self, VALUE num, VALUE str) | |
664 | { | |
665 | buf_T *buf = get_buf(self); | |
666 | ! char *line = STR2CSTR(str); | |
667 | long n = NUM2LONG(num); | |
668 | aco_save_T aco; | |
669 | ||
670 | ! if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) | |
671 | { | |
672 | /* set curwin/curbuf for "buf" and save some things */ | |
673 | aucmd_prepbuf(&aco, buf); | |
674 | --- 865,878 ---- | |
675 | static VALUE buffer_append(VALUE self, VALUE num, VALUE str) | |
676 | { | |
677 | buf_T *buf = get_buf(self); | |
678 | ! char *line = StringValuePtr(str); | |
679 | long n = NUM2LONG(num); | |
680 | aco_save_T aco; | |
681 | ||
682 | ! if (line != NULL) { | |
683 | ! rb_raise(rb_eIndexError, "NULL line"); | |
684 | ! } | |
685 | ! else if (n >= 0 && n <= buf->b_ml.ml_line_count) | |
686 | { | |
687 | /* set curwin/curbuf for "buf" and save some things */ | |
688 | aucmd_prepbuf(&aco, buf); | |
689 | *************** | |
690 | *** 763,769 **** | |
691 | update_curbuf(NOT_VALID); | |
692 | } | |
693 | else { | |
694 | ! rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
695 | } | |
696 | return str; | |
697 | } | |
698 | --- 894,900 ---- | |
699 | update_curbuf(NOT_VALID); | |
700 | } | |
701 | else { | |
702 | ! rb_raise(rb_eIndexError, "line number %ld out of range", n); | |
703 | } | |
704 | return str; | |
705 | } | |
706 | *************** | |
707 | *** 904,913 **** | |
708 | win_T *win = get_win(self); | |
709 | ||
710 | Check_Type(pos, T_ARRAY); | |
711 | ! if (RARRAY(pos)->len != 2) | |
712 | rb_raise(rb_eArgError, "array length must be 2"); | |
713 | ! lnum = RARRAY(pos)->ptr[0]; | |
714 | ! col = RARRAY(pos)->ptr[1]; | |
715 | win->w_cursor.lnum = NUM2LONG(lnum); | |
716 | win->w_cursor.col = NUM2UINT(col); | |
717 | check_cursor(); /* put cursor on an existing line */ | |
718 | --- 1035,1044 ---- | |
719 | win_T *win = get_win(self); | |
720 | ||
721 | Check_Type(pos, T_ARRAY); | |
722 | ! if (RARRAY_LEN(pos) != 2) | |
723 | rb_raise(rb_eArgError, "array length must be 2"); | |
724 | ! lnum = RARRAY_PTR(pos)[0]; | |
725 | ! col = RARRAY_PTR(pos)[1]; | |
726 | win->w_cursor.lnum = NUM2LONG(lnum); | |
727 | win->w_cursor.col = NUM2UINT(col); | |
728 | check_cursor(); /* put cursor on an existing line */ | |
729 | *************** | |
730 | *** 924,930 **** | |
731 | if (i > 0) rb_str_cat(str, ", ", 2); | |
732 | rb_str_concat(str, rb_inspect(argv[i])); | |
733 | } | |
734 | ! MSG(RSTRING(str)->ptr); | |
735 | return Qnil; | |
736 | } | |
737 | ||
738 | --- 1055,1061 ---- | |
739 | if (i > 0) rb_str_cat(str, ", ", 2); | |
740 | rb_str_concat(str, rb_inspect(argv[i])); | |
741 | } | |
742 | ! MSG(RSTRING_PTR(str)); | |
743 | return Qnil; | |
744 | } | |
745 | ||
746 | *** ../vim-7.2.360/src/version.c 2010-02-17 15:11:35.000000000 +0100 | |
747 | --- src/version.c 2010-02-17 15:59:12.000000000 +0100 | |
748 | *************** | |
749 | *** 683,684 **** | |
750 | --- 683,686 ---- | |
751 | { /* Add new patch number below this line */ | |
752 | + /**/ | |
753 | + 361, | |
754 | /**/ | |
755 | ||
756 | -- | |
757 | "Marriage is when a man and woman become as one; the trouble starts | |
758 | when they try to decide which one" | |
759 | ||
760 | /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ | |
761 | /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ | |
762 | \\\ download, build and distribute -- http://www.A-A-P.org /// | |
763 | \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |