Imported Upstream version 8.0.586
[platform/upstream/vim.git] / src / if_ruby.c
index fc72d33..02b59dd 100644 (file)
@@ -303,6 +303,7 @@ static void ruby_vim_init(void);
 # define ruby_init_loadpath            dll_ruby_init_loadpath
 # ifdef WIN3264
 #  define NtInitialize                 dll_NtInitialize
+#  define ruby_sysinit                 dll_ruby_sysinit
 #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
 #   define rb_w32_snprintf             dll_rb_w32_snprintf
 #  endif
@@ -405,6 +406,7 @@ static void (*dll_ruby_init) (void);
 static void (*dll_ruby_init_loadpath) (void);
 # ifdef WIN3264
 static void (*dll_NtInitialize) (int*, char***);
+static void (*dll_ruby_sysinit) (int*, char***);
 #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
 static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
 #  endif
@@ -514,9 +516,10 @@ static struct
 {
     {"rb_assoc_new", (RUBY_PROC*)&dll_rb_assoc_new},
     {"rb_cFalseClass", (RUBY_PROC*)&dll_rb_cFalseClass},
-    {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
 # if defined(USE_RUBY_INTEGER)
     {"rb_cInteger", (RUBY_PROC*)&dll_rb_cInteger},
+# else
+    {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
 # endif
 # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
     {"rb_cFloat", (RUBY_PROC*)&dll_rb_cFloat},
@@ -593,13 +596,11 @@ static struct
     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
 # ifdef WIN3264
-    {
 #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
-    "NtInitialize",
+    {"NtInitialize", (RUBY_PROC*)&dll_NtInitialize},
 #  else
-    "ruby_sysinit",
+    {"ruby_sysinit", (RUBY_PROC*)&dll_ruby_sysinit},
 #  endif
-                       (RUBY_PROC*)&dll_NtInitialize},
 #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
 #  endif
@@ -782,6 +783,7 @@ void ex_rubydo(exarg_T *eap)
 {
     int state;
     linenr_T i;
+    buf_T   *was_curbuf = curbuf;
 
     if (ensure_ruby_initialized())
     {
@@ -791,6 +793,8 @@ void ex_rubydo(exarg_T *eap)
        {
            VALUE line;
 
+           if (i > curbuf->b_ml.ml_line_count)
+               break;
            line = vim_str2rb_enc_str((char *)ml_get(i));
            rb_lastline_set(line);
            eval_enc_string_protect((char *) eap->arg, &state);
@@ -799,6 +803,8 @@ void ex_rubydo(exarg_T *eap)
                error_print(state);
                break;
            }
+           if (was_curbuf != curbuf)
+               break;
            line = rb_lastline_get();
            if (!NIL_P(line))
            {
@@ -861,7 +867,11 @@ static int ensure_ruby_initialized(void)
            int argc = 1;
            char *argv[] = {"gvim.exe"};
            char **argvp = argv;
+# ifdef RUBY19_OR_LATER
+           ruby_sysinit(&argc, &argvp);
+# else
            NtInitialize(&argc, &argvp);
+# endif
 #endif
            {
 #if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)