From 9a5416060beb7ccb310ae76794972befd2595020 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Feb 17 2010 17:05:01 +0000 Subject: - patchlevel 361 --- diff --git a/7.2.361 b/7.2.361 new file mode 100644 index 0000000..ddc5857 --- /dev/null +++ b/7.2.361 @@ -0,0 +1,763 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.361 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.361 +Problem: Ruby 1.9 is not supported. +Solution: Add Ruby 1.9 support. (Msaki Suketa) +Files: src/Makefile, src/auto/configure, src/configure.in, src/if_ruby.c + + +*** ../vim-7.2.360/src/Makefile 2010-02-17 15:12:22.000000000 +0100 +--- src/Makefile 2010-02-17 16:21:01.000000000 +0100 +*************** +*** 395,401 **** + + # RUBY + # Uncomment this when you want to include the Ruby interface. +! #CONF_OPT_RUBY = --enable-rubyinterp + + # MZSCHEME + # Uncomment this when you want to include the MzScheme interface. +--- 395,403 ---- + + # RUBY + # Uncomment this when you want to include the Ruby interface. +! # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu). +! # CONF_OPT_RUBY = --enable-rubyinterp +! # CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1 + + # MZSCHEME + # Uncomment this when you want to include the MzScheme interface. +*** ../vim-7.2.360/src/auto/configure 2009-12-16 17:14:08.000000000 +0100 +--- src/auto/configure 2010-02-17 16:08:59.000000000 +0100 +*************** +*** 793,798 **** +--- 793,799 ---- + enable_tclinterp + with_tclsh + enable_rubyinterp ++ with_ruby_command + enable_cscope + enable_workshop + enable_netbeans +*************** +*** 1503,1508 **** +--- 1504,1510 ---- + --with-plthome=PLTHOME Use PLTHOME. + --with-python-config-dir=PATH Python's config directory + --with-tclsh=PATH which tclsh to use (default: tclsh8.0) ++ --with-ruby-command=RUBY name of the Ruby command (default: ruby) + --with-x use the X Window System + --with-gtk-prefix=PFX Prefix where GTK is installed (optional) + --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) +*************** +*** 5703,5711 **** + { $as_echo "$as_me:$LINENO: result: $enable_rubyinterp" >&5 + $as_echo "$enable_rubyinterp" >&6; } + if test "$enable_rubyinterp" = "yes"; then + +! # Extract the first word of "ruby", so it can be a program name with args. +! set dummy ruby; ac_word=$2 + { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 + $as_echo_n "checking for $ac_word... " >&6; } + if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then +--- 5705,5725 ---- + { $as_echo "$as_me:$LINENO: result: $enable_rubyinterp" >&5 + $as_echo "$enable_rubyinterp" >&6; } + if test "$enable_rubyinterp" = "yes"; then ++ { $as_echo "$as_me:$LINENO: checking --with-ruby-command argument" >&5 ++ $as_echo_n "checking --with-ruby-command argument... " >&6; } + +! # Check whether --with-ruby-command was given. +! if test "${with_ruby_command+set}" = set; then +! withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:$LINENO: result: $RUBY_CMD" >&5 +! $as_echo "$RUBY_CMD" >&6; } +! else +! RUBY_CMD="ruby"; { $as_echo "$as_me:$LINENO: result: defaulting to $RUBY_CMD" >&5 +! $as_echo "defaulting to $RUBY_CMD" >&6; } +! fi +! +! +! # Extract the first word of "$RUBY_CMD", so it can be a program name with args. +! set dummy $RUBY_CMD; ac_word=$2 + { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 + $as_echo_n "checking for $ac_word... " >&6; } + if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then +*************** +*** 5752,5762 **** + $as_echo "OK" >&6; } + { $as_echo "$as_me:$LINENO: checking Ruby header files" >&5 + $as_echo_n "checking Ruby header files... " >&6; } +! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null` + if test "X$rubyhdrdir" != "X"; then + { $as_echo "$as_me:$LINENO: result: $rubyhdrdir" >&5 + $as_echo "$rubyhdrdir" >&6; } + RUBY_CFLAGS="-I$rubyhdrdir" + rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'` + if test "X$rubylibs" != "X"; then + RUBY_LIBS="$rubylibs" +--- 5766,5782 ---- + $as_echo "OK" >&6; } + { $as_echo "$as_me:$LINENO: checking Ruby header files" >&5 + $as_echo_n "checking Ruby header files... " >&6; } +! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null` + if test "X$rubyhdrdir" != "X"; then + { $as_echo "$as_me:$LINENO: result: $rubyhdrdir" >&5 + $as_echo "$rubyhdrdir" >&6; } + RUBY_CFLAGS="-I$rubyhdrdir" ++ rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'` ++ if test -d "$rubyhdrdir/$rubyarch"; then ++ RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" ++ fi ++ rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'` ++ RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" + rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'` + if test "X$rubylibs" != "X"; then + RUBY_LIBS="$rubylibs" +*************** +*** 5793,5800 **** + _ACEOF + + else +! { $as_echo "$as_me:$LINENO: result: not found" >&5 +! $as_echo "not found" >&6; } + fi + else + { $as_echo "$as_me:$LINENO: result: too old; need Ruby version 1.6.0 or later" >&5 +--- 5813,5820 ---- + _ACEOF + + else +! { $as_echo "$as_me:$LINENO: result: not found; disabling Ruby" >&5 +! $as_echo "not found; disabling Ruby" >&6; } + fi + else + { $as_echo "$as_me:$LINENO: result: too old; need Ruby version 1.6.0 or later" >&5 +*** ../vim-7.2.360/src/configure.in 2009-12-16 17:14:08.000000000 +0100 +--- src/configure.in 2010-02-17 16:00:58.000000000 +0100 +*************** +*** 949,965 **** + [enable_rubyinterp="no"]) + AC_MSG_RESULT($enable_rubyinterp) + if test "$enable_rubyinterp" = "yes"; then + AC_SUBST(vi_cv_path_ruby) +! AC_PATH_PROG(vi_cv_path_ruby, ruby) + if test "X$vi_cv_path_ruby" != "X"; then + AC_MSG_CHECKING(Ruby version) + if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then + AC_MSG_RESULT(OK) + AC_MSG_CHECKING(Ruby header files) +! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` + if test "X$rubyhdrdir" != "X"; then + AC_MSG_RESULT($rubyhdrdir) + RUBY_CFLAGS="-I$rubyhdrdir" + rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` + if test "X$rubylibs" != "X"; then + RUBY_LIBS="$rubylibs" +--- 949,975 ---- + [enable_rubyinterp="no"]) + AC_MSG_RESULT($enable_rubyinterp) + if test "$enable_rubyinterp" = "yes"; then ++ AC_MSG_CHECKING(--with-ruby-command argument) ++ AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)], ++ RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD), ++ RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD)) + AC_SUBST(vi_cv_path_ruby) +! AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD) + if test "X$vi_cv_path_ruby" != "X"; then + AC_MSG_CHECKING(Ruby version) + if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then + AC_MSG_RESULT(OK) + AC_MSG_CHECKING(Ruby header files) +! rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` + if test "X$rubyhdrdir" != "X"; then + AC_MSG_RESULT($rubyhdrdir) + RUBY_CFLAGS="-I$rubyhdrdir" ++ rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'` ++ if test -d "$rubyhdrdir/$rubyarch"; then ++ RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" ++ fi ++ rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'` ++ RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" + rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` + if test "X$rubylibs" != "X"; then + RUBY_LIBS="$rubylibs" +*************** +*** 997,1003 **** + RUBY_PRO="if_ruby.pro" + AC_DEFINE(FEAT_RUBY) + else +! AC_MSG_RESULT(not found, disabling Ruby) + fi + else + AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later) +--- 1007,1013 ---- + RUBY_PRO="if_ruby.pro" + AC_DEFINE(FEAT_RUBY) + else +! AC_MSG_RESULT(not found; disabling Ruby) + fi + else + AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later) +*** ../vim-7.2.360/src/if_ruby.c 2010-02-17 15:11:35.000000000 +0100 +--- src/if_ruby.c 2010-02-17 16:08:47.000000000 +0100 +*************** +*** 54,59 **** +--- 54,62 ---- + #endif + + #include ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ # include ++ #endif + + #undef EXTERN + #undef _ +*************** +*** 65,70 **** +--- 68,95 ---- + # define __OPENTRANSPORTPROVIDERS__ + #endif + ++ /* ++ * Backward compatiblity for Ruby 1.8 and earlier. ++ * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided. ++ * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead ++ * RXXX_LEN(s) and RXXX_PTR(s) are provided. ++ */ ++ #ifndef StringValuePtr ++ # define StringValuePtr(s) STR2CSTR(s) ++ #endif ++ #ifndef RARRAY_LEN ++ # define RARRAY_LEN(s) RARRAY(s)->len ++ #endif ++ #ifndef RARRAY_PTR ++ # define RARRAY_PTR(s) RARRAY(s)->ptr ++ #endif ++ #ifndef RSTRING_LEN ++ # define RSTRING_LEN(s) RSTRING(s)->len ++ #endif ++ #ifndef RSTRING_PTR ++ # define RSTRING_PTR(s) RSTRING(s)->ptr ++ #endif ++ + #include "vim.h" + #include "version.h" + +*************** +*** 134,140 **** + #define rb_str_concat dll_rb_str_concat + #define rb_str_new dll_rb_str_new + #define rb_str_new2 dll_rb_str_new2 +! #define ruby_errinfo (*dll_ruby_errinfo) + #define ruby_init dll_ruby_init + #define ruby_init_loadpath dll_ruby_init_loadpath + #define NtInitialize dll_NtInitialize +--- 159,169 ---- + #define rb_str_concat dll_rb_str_concat + #define rb_str_new dll_rb_str_new + #define rb_str_new2 dll_rb_str_new2 +! #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +! # define rb_errinfo dll_rb_errinfo +! #else +! # define ruby_errinfo (*dll_ruby_errinfo) +! #endif + #define ruby_init dll_ruby_init + #define ruby_init_loadpath dll_ruby_init_loadpath + #define NtInitialize dll_NtInitialize +*************** +*** 142,147 **** +--- 171,184 ---- + # define rb_w32_snprintf dll_rb_w32_snprintf + #endif + ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ # define ruby_script dll_ruby_script ++ # define rb_enc_find_index dll_rb_enc_find_index ++ # define rb_enc_find dll_rb_enc_find ++ # define rb_enc_str_new dll_rb_enc_str_new ++ # define rb_sprintf dll_rb_sprintf ++ #endif ++ + /* + * Pointers for dynamic link + */ +*************** +*** 189,195 **** +--- 226,236 ---- + static VALUE (*dll_rb_str_concat) (VALUE, VALUE); + static VALUE (*dll_rb_str_new) (const char*, long); + static VALUE (*dll_rb_str_new2) (const char*); ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ static VALUE (*dll_rb_errinfo) (void); ++ #else + static VALUE *dll_ruby_errinfo; ++ #endif + static void (*dll_ruby_init) (void); + static void (*dll_ruby_init_loadpath) (void); + static void (*dll_NtInitialize) (int*, char***); +*************** +*** 197,202 **** +--- 238,251 ---- + static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...); + #endif + ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ static void (*dll_ruby_script) (const char*); ++ static int (*dll_rb_enc_find_index) (const char*); ++ static rb_encoding* (*dll_rb_enc_find) (const char*); ++ static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*); ++ static VALUE (*dll_rb_sprintf) (const char*, ...); ++ #endif ++ + static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */ + + /* +*************** +*** 252,264 **** +--- 301,324 ---- + {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat}, + {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new}, + {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2}, ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo}, ++ #else + {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo}, ++ #endif + {"ruby_init", (RUBY_PROC*)&dll_ruby_init}, + {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath}, + {"NtInitialize", (RUBY_PROC*)&dll_NtInitialize}, + #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 + {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf}, + #endif ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ {"ruby_script", (RUBY_PROC*)&dll_ruby_script}, ++ {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index}, ++ {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find}, ++ {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new}, ++ {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf}, ++ #endif + {"", NULL}, + }; + +*************** +*** 348,353 **** +--- 408,465 ---- + vim_free(script); + } + ++ /* ++ * In Ruby 1.9 or later, ruby String object has encoding. ++ * conversion buffer string of vim to ruby String object using ++ * VIM encoding option. ++ */ ++ static VALUE ++ vim_str2rb_enc_str(const char *s) ++ { ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ int isnum; ++ long lval; ++ char_u *sval; ++ rb_encoding *enc; ++ ++ isnum = get_option_value((char_u *)"enc", &lval, &sval, 0); ++ if (isnum == 0) ++ { ++ enc = rb_enc_find((char *)sval); ++ vim_free(sval); ++ if (enc) { ++ return rb_enc_str_new(s, strlen(s), enc); ++ } ++ } ++ #endif ++ return rb_str_new2(s); ++ } ++ ++ static VALUE ++ eval_enc_string_protect(const char *str, int *state) ++ { ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ int isnum; ++ long lval; ++ char_u *sval; ++ rb_encoding *enc; ++ VALUE v; ++ ++ isnum = get_option_value((char_u *)"enc", &lval, &sval, 0); ++ if (isnum == 0) ++ { ++ enc = rb_enc_find((char *)sval); ++ vim_free(sval); ++ if (enc) ++ { ++ v = rb_sprintf("#-*- coding:%s -*-\n%s", rb_enc_name(enc), str); ++ return rb_eval_string_protect(StringValuePtr(v), state); ++ } ++ } ++ #endif ++ return rb_eval_string_protect(str, state); ++ } ++ + void ex_rubydo(exarg_T *eap) + { + int state; +*************** +*** 360,368 **** + for (i = eap->line1; i <= eap->line2; i++) { + VALUE line, oldline; + +! line = oldline = rb_str_new2((char *)ml_get(i)); + rb_lastline_set(line); +! rb_eval_string_protect((char *) eap->arg, &state); + if (state) { + error_print(state); + break; +--- 472,480 ---- + for (i = eap->line1; i <= eap->line2; i++) { + VALUE line, oldline; + +! line = oldline = vim_str2rb_enc_str((char *)ml_get(i)); + rb_lastline_set(line); +! eval_enc_string_protect((char *) eap->arg, &state); + if (state) { + error_print(state); + break; +*************** +*** 373,379 **** + EMSG(_("E265: $_ must be an instance of String")); + return; + } +! ml_replace(i, (char_u *) STR2CSTR(line), 1); + changed(); + #ifdef SYNTAX_HL + syn_changed(i); /* recompute syntax hl. for this line */ +--- 485,491 ---- + EMSG(_("E265: $_ must be an instance of String")); + return; + } +! ml_replace(i, (char_u *) StringValuePtr(line), 1); + changed(); + #ifdef SYNTAX_HL + syn_changed(i); /* recompute syntax hl. for this line */ +*************** +*** 428,436 **** +--- 540,557 ---- + char *argv[] = {"gvim.exe"}; + NtInitialize(&argc, &argv); + #endif ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ RUBY_INIT_STACK; ++ #endif + ruby_init(); ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ ruby_script("vim-ruby"); ++ #endif + ruby_init_loadpath(); + ruby_io_init(); ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ rb_enc_find_index("encdb"); ++ #endif + ruby_vim_init(); + ruby_initialized = 1; + #ifdef DYNAMIC_RUBY +*************** +*** 448,455 **** +--- 569,578 ---- + static void error_print(int state) + { + #ifndef DYNAMIC_RUBY ++ #if !(defined(RUBY_VERSION) && RUBY_VERSION >= 19) + RUBYEXTERN VALUE ruby_errinfo; + #endif ++ #endif + VALUE eclass; + VALUE einfo; + char buff[BUFSIZ]; +*************** +*** 482,490 **** + break; + case TAG_RAISE: + case TAG_FATAL: + eclass = CLASS_OF(ruby_errinfo); + einfo = rb_obj_as_string(ruby_errinfo); +! if (eclass == rb_eRuntimeError && RSTRING(einfo)->len == 0) { + EMSG(_("E272: unhandled exception")); + } + else { +--- 605,618 ---- + break; + case TAG_RAISE: + case TAG_FATAL: ++ #if defined(RUBY_VERSION) && RUBY_VERSION >= 19 ++ eclass = CLASS_OF(rb_errinfo()); ++ einfo = rb_obj_as_string(rb_errinfo()); ++ #else + eclass = CLASS_OF(ruby_errinfo); + einfo = rb_obj_as_string(ruby_errinfo); +! #endif +! if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0) { + EMSG(_("E272: unhandled exception")); + } + else { +*************** +*** 493,499 **** + + epath = rb_class_path(eclass); + vim_snprintf(buff, BUFSIZ, "%s: %s", +! RSTRING(epath)->ptr, RSTRING(einfo)->ptr); + p = strchr(buff, '\n'); + if (p) *p = '\0'; + EMSG(buff); +--- 621,627 ---- + + epath = rb_class_path(eclass); + vim_snprintf(buff, BUFSIZ, "%s: %s", +! RSTRING_PTR(epath), RSTRING_PTR(einfo)); + p = strchr(buff, '\n'); + if (p) *p = '\0'; + EMSG(buff); +*************** +*** 511,518 **** + char *buff, *p; + + str = rb_obj_as_string(str); +! buff = ALLOCA_N(char, RSTRING(str)->len); +! strcpy(buff, RSTRING(str)->ptr); + p = strchr(buff, '\n'); + if (p) *p = '\0'; + MSG(buff); +--- 639,646 ---- + char *buff, *p; + + str = rb_obj_as_string(str); +! buff = ALLOCA_N(char, RSTRING_LEN(str)); +! strcpy(buff, RSTRING_PTR(str)); + p = strchr(buff, '\n'); + if (p) *p = '\0'; + MSG(buff); +*************** +*** 521,541 **** + + static VALUE vim_set_option(VALUE self UNUSED, VALUE str) + { +! do_set((char_u *)STR2CSTR(str), 0); + update_screen(NOT_VALID); + return Qnil; + } + + static VALUE vim_command(VALUE self UNUSED, VALUE str) + { +! do_cmdline_cmd((char_u *)STR2CSTR(str)); + return Qnil; + } + + static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) + { + #ifdef FEAT_EVAL +! char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE); + + if (value != NULL) + { +--- 649,669 ---- + + static VALUE vim_set_option(VALUE self UNUSED, VALUE str) + { +! do_set((char_u *)StringValuePtr(str), 0); + update_screen(NOT_VALID); + return Qnil; + } + + static VALUE vim_command(VALUE self UNUSED, VALUE str) + { +! do_cmdline_cmd((char_u *)StringValuePtr(str)); + return Qnil; + } + + static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) + { + #ifdef FEAT_EVAL +! char_u *value = eval_to_string((char_u *)StringValuePtr(str), NULL, TRUE); + + if (value != NULL) + { +*************** +*** 640,648 **** + if (n > 0 && n <= buf->b_ml.ml_line_count) + { + char *line = (char *)ml_get_buf(buf, n, FALSE); +! return line ? rb_str_new2(line) : Qnil; + } +! rb_raise(rb_eIndexError, "index %d out of buffer", n); + #ifndef __GNUC__ + return Qnil; /* For stop warning */ + #endif +--- 768,776 ---- + if (n > 0 && n <= buf->b_ml.ml_line_count) + { + char *line = (char *)ml_get_buf(buf, n, FALSE); +! return line ? vim_str2rb_enc_str(line) : Qnil; + } +! rb_raise(rb_eIndexError, "line number %ld out of range", (long)n); + #ifndef __GNUC__ + return Qnil; /* For stop warning */ + #endif +*************** +*** 659,665 **** + + static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str) + { +! char *line = STR2CSTR(str); + aco_save_T aco; + + if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) +--- 787,793 ---- + + static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str) + { +! char *line = StringValuePtr(str); + aco_save_T aco; + + if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) +*************** +*** 683,689 **** + } + else + { +! rb_raise(rb_eIndexError, "index %d out of buffer", n); + #ifndef __GNUC__ + return Qnil; /* For stop warning */ + #endif +--- 811,817 ---- + } + else + { +! rb_raise(rb_eIndexError, "line number %ld out of range", (long)n); + #ifndef __GNUC__ + return Qnil; /* For stop warning */ + #endif +*************** +*** 729,735 **** + } + else + { +! rb_raise(rb_eIndexError, "index %d out of buffer", n); + } + return Qnil; + } +--- 857,863 ---- + } + else + { +! rb_raise(rb_eIndexError, "line number %ld out of range", n); + } + return Qnil; + } +*************** +*** 737,747 **** + static VALUE buffer_append(VALUE self, VALUE num, VALUE str) + { + buf_T *buf = get_buf(self); +! char *line = STR2CSTR(str); + long n = NUM2LONG(num); + aco_save_T aco; + +! if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) + { + /* set curwin/curbuf for "buf" and save some things */ + aucmd_prepbuf(&aco, buf); +--- 865,878 ---- + static VALUE buffer_append(VALUE self, VALUE num, VALUE str) + { + buf_T *buf = get_buf(self); +! char *line = StringValuePtr(str); + long n = NUM2LONG(num); + aco_save_T aco; + +! if (line != NULL) { +! rb_raise(rb_eIndexError, "NULL line"); +! } +! else if (n >= 0 && n <= buf->b_ml.ml_line_count) + { + /* set curwin/curbuf for "buf" and save some things */ + aucmd_prepbuf(&aco, buf); +*************** +*** 763,769 **** + update_curbuf(NOT_VALID); + } + else { +! rb_raise(rb_eIndexError, "index %d out of buffer", n); + } + return str; + } +--- 894,900 ---- + update_curbuf(NOT_VALID); + } + else { +! rb_raise(rb_eIndexError, "line number %ld out of range", n); + } + return str; + } +*************** +*** 904,913 **** + win_T *win = get_win(self); + + Check_Type(pos, T_ARRAY); +! if (RARRAY(pos)->len != 2) + rb_raise(rb_eArgError, "array length must be 2"); +! lnum = RARRAY(pos)->ptr[0]; +! col = RARRAY(pos)->ptr[1]; + win->w_cursor.lnum = NUM2LONG(lnum); + win->w_cursor.col = NUM2UINT(col); + check_cursor(); /* put cursor on an existing line */ +--- 1035,1044 ---- + win_T *win = get_win(self); + + Check_Type(pos, T_ARRAY); +! if (RARRAY_LEN(pos) != 2) + rb_raise(rb_eArgError, "array length must be 2"); +! lnum = RARRAY_PTR(pos)[0]; +! col = RARRAY_PTR(pos)[1]; + win->w_cursor.lnum = NUM2LONG(lnum); + win->w_cursor.col = NUM2UINT(col); + check_cursor(); /* put cursor on an existing line */ +*************** +*** 924,930 **** + if (i > 0) rb_str_cat(str, ", ", 2); + rb_str_concat(str, rb_inspect(argv[i])); + } +! MSG(RSTRING(str)->ptr); + return Qnil; + } + +--- 1055,1061 ---- + if (i > 0) rb_str_cat(str, ", ", 2); + rb_str_concat(str, rb_inspect(argv[i])); + } +! MSG(RSTRING_PTR(str)); + return Qnil; + } + +*** ../vim-7.2.360/src/version.c 2010-02-17 15:11:35.000000000 +0100 +--- src/version.c 2010-02-17 15:59:12.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 361, + /**/ + +-- +"Marriage is when a man and woman become as one; the trouble starts +when they try to decide which one" + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///