diff --git a/src/if_ruby.c b/src/if_ruby.c
index 802e1c1..41cb791 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -53,6 +53,11 @@
 # undef _WIN32_WINNT
 #endif
 
+#if (defined(RUBY_VERSION) && RUBY_VERSION >= 19) \
+    || (defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19)
+# define RUBY19_OR_LATER 1
+#endif
+
 #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
 /* Ruby 1.9 defines a number of static functions which use rb_num2long and
  * rb_int2big */
@@ -61,7 +66,7 @@
 #endif
 
 #include <ruby.h>
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 # include <ruby/encoding.h>
 #endif
 
@@ -172,8 +177,7 @@
 # define rb_ary_new			dll_rb_ary_new
 # define rb_ary_push			dll_rb_ary_push
 #endif
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \
-    || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
 # define rb_errinfo			dll_rb_errinfo
 #else
 # define ruby_errinfo			(*dll_ruby_errinfo)
@@ -185,12 +189,13 @@
 # define rb_w32_snprintf		dll_rb_w32_snprintf
 #endif
 
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 # 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
+# define ruby_init_stack		dll_ruby_init_stack
 #endif
 
 /*
@@ -240,8 +245,7 @@
 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 \
-    || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_errinfo) (void);
 #else
 static VALUE *dll_ruby_errinfo;
@@ -255,22 +259,23 @@
 static VALUE (*dll_rb_ary_new) (void);
 static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
 #endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
 #endif
 #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
 static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
 #endif
 
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 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*, ...);
+static void (*ruby_init_stack)(VALUE*);
 #endif
 
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
 static SIGNED_VALUE rb_num2long_stub(VALUE x)
 {
     return dll_rb_num2long(x);
@@ -336,8 +341,7 @@
     {"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 \
-    || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
     {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
 #else
     {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
@@ -360,15 +364,14 @@
     {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
     {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
 #endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
     {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big},
-#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},
+    {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
 #endif
     {"", NULL},
 };
@@ -467,7 +470,7 @@
     static VALUE
 vim_str2rb_enc_str(const char *s)
 {
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
     int isnum;
     long lval;
     char_u *sval;
@@ -489,7 +492,7 @@
     static VALUE
 eval_enc_string_protect(const char *str, int *state)
 {
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
     int isnum;
     long lval;
     char_u *sval;
@@ -591,16 +594,16 @@
 	    char *argv[] = {"gvim.exe"};
 	    NtInitialize(&argc, &argv);
 #endif
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 	    RUBY_INIT_STACK;
 #endif
 	    ruby_init();
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 	    ruby_script("vim-ruby");
 #endif
 	    ruby_init_loadpath();
 	    ruby_io_init();
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 	    rb_enc_find_index("encdb");
 #endif
 	    ruby_vim_init();
@@ -657,8 +660,7 @@
 	break;
     case TAG_RAISE:
     case TAG_FATAL:
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \
-    || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+#ifdef RUBY19_OR_LATER
 	eclass = CLASS_OF(rb_errinfo());
 	einfo = rb_obj_as_string(rb_errinfo());
 #else
@@ -720,56 +722,57 @@
 
     if (tv->v_type == VAR_STRING)
     {
-        result = rb_str_new2((char *)tv->vval.v_string);
+	result = rb_str_new2((char *)(tv->vval.v_string == NULL
+						   ? "" : tv->vval.v_string));
     }
     else if (tv->v_type == VAR_NUMBER)
     {
-        result = INT2NUM(tv->vval.v_number);
+	result = INT2NUM(tv->vval.v_number);
     }
 # ifdef FEAT_FLOAT
     else if (tv->v_type == VAR_FLOAT)
     {
-        result = rb_float_new(tv->vval.v_float);
+	result = rb_float_new(tv->vval.v_float);
     }
 # endif
     else if (tv->v_type == VAR_LIST)
     {
-        list_T      *list = tv->vval.v_list;
-        listitem_T  *curr;
+	list_T      *list = tv->vval.v_list;
+	listitem_T  *curr;
 
-        result = rb_ary_new();
+	result = rb_ary_new();
 
-        if (list != NULL)
-        {
-            for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
-            {
-                rb_ary_push(result, vim_to_ruby(&curr->li_tv));
-            }
-        }
+	if (list != NULL)
+	{
+	    for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
+	    {
+		rb_ary_push(result, vim_to_ruby(&curr->li_tv));
+	    }
+	}
     }
     else if (tv->v_type == VAR_DICT)
     {
-        result = rb_hash_new();
+	result = rb_hash_new();
 
-        if (tv->vval.v_dict != NULL)
-        {
-            hashtab_T   *ht = &tv->vval.v_dict->dv_hashtab;
-            long_u      todo = ht->ht_used;
-            hashitem_T  *hi;
-            dictitem_T  *di;
+	if (tv->vval.v_dict != NULL)
+	{
+	    hashtab_T   *ht = &tv->vval.v_dict->dv_hashtab;
+	    long_u      todo = ht->ht_used;
+	    hashitem_T  *hi;
+	    dictitem_T  *di;
 
-            for (hi = ht->ht_array; todo > 0; ++hi)
-            {
-                if (!HASHITEM_EMPTY(hi))
-                {
-                    --todo;
+	    for (hi = ht->ht_array; todo > 0; ++hi)
+	    {
+		if (!HASHITEM_EMPTY(hi))
+		{
+		    --todo;
 
-                    di = dict_lookup(hi);
-                    rb_hash_aset(result, rb_str_new2((char *)hi->hi_key),
+		    di = dict_lookup(hi);
+		    rb_hash_aset(result, rb_str_new2((char *)hi->hi_key),
 						     vim_to_ruby(&di->di_tv));
-                }
-            }
-        }
+		}
+	    }
+	}
     } /* else return Qnil; */
 
     return result;
@@ -785,7 +788,7 @@
     tv = eval_expr((char_u *)StringValuePtr(str), NULL);
     if (tv == NULL)
     {
-        return Qnil;
+	return Qnil;
     }
     result = vim_to_ruby(tv);
 
