From 443657b32becb2318ae40e30a849bbe5cc1a153c Mon Sep 17 00:00:00 2001 From: Isao Sato Date: Wed, 3 Jan 2024 19:31:05 +0100 Subject: [PATCH] patch 9.1.0003: Cannot build against Ruby 33 dynamically Problem: Cannot build against Ruby 33 dynamically Solution: Ruby 33 removed transient heap, so do not use rb_ary_transient anymore, NoMethodError format changed, so update test for expected error message (Isao Sato) - ruby-3.3 removed transient heap for ruby/dyn when +ruby/dyn with ruby-3.3 do command :ruby, E448 occur. ruby-3.3 has no transient heap anymore, so disable rb_ary_transient etc. $ LC_ALL=C VIMRUNTIME=runtime ./src/vim -u NONE -c 'ruby puts RUBY_VERSION' "=> Error detected while processing command line: "=> E448: Could not load library function rb_ary_detransient "=> E266: Sorry, this command is disabled, the Ruby library could not be loaded. - ruby-3.3 changed NoMethodError format: $ rvm 3.2.2, 3.3.0-rc1 do ruby -e 'begin; nil.name; rescue => e; puts "%s : %s"%[RUBY_VERSION, e.message]; end ' => 3.2.2 : undefined method `name' for nil:NilClass => 3.3.0 : undefined method `name' for nil so loose pattern in Test_ruby_Vim_buffer_get() closes: #13741 Signed-off-by: Isao Sato Signed-off-by: Christian Brabandt --- src/if_ruby.c | 10 +++++----- src/testdir/test_ruby.vim | 2 +- src/version.c | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/if_ruby.c b/src/if_ruby.c index a921205255..7fab211a8a 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -83,7 +83,7 @@ # define rb_gc_writebarrier_unprotect rb_gc_writebarrier_unprotect_stub # endif -# if RUBY_VERSION >= 26 +# if RUBY_VERSION >= 26 && RUBY_VERSION <= 32 # define rb_ary_detransient rb_ary_detransient_stub # endif @@ -456,7 +456,7 @@ static VALUE (*dll_rb_float_new) (double); static VALUE (*dll_rb_ary_new) (void); static VALUE (*dll_rb_ary_new4) (long n, const VALUE *elts); static VALUE (*dll_rb_ary_push) (VALUE, VALUE); -# if RUBY_VERSION >= 26 +# if RUBY_VERSION >= 26 && RUBY_VERSION <= 32 static void (*dll_rb_ary_detransient) (VALUE); # endif # ifdef __ia64 @@ -491,7 +491,7 @@ NORETURN(static void (*dll_ruby_malloc_size_overflow)(size_t, size_t)); # endif # endif -# if RUBY_VERSION >= 26 +# if RUBY_VERSION >= 26 && RUBY_VERSION <= 32 void rb_ary_detransient_stub(VALUE x); # endif @@ -561,7 +561,7 @@ rb_gc_writebarrier_unprotect_stub(VALUE obj) } # endif # endif -# if RUBY_VERSION >= 26 +# if RUBY_VERSION >= 26 && RUBY_VERSION <= 32 void rb_ary_detransient_stub(VALUE x) { @@ -718,7 +718,7 @@ static struct {"rb_ary_new4", (RUBY_PROC*)&dll_rb_ary_new4}, # endif {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push}, -# if RUBY_VERSION >= 26 +# if RUBY_VERSION >= 26 && RUBY_VERSION <= 32 {"rb_ary_detransient", (RUBY_PROC*)&dll_rb_ary_detransient}, # endif {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big}, diff --git a/src/testdir/test_ruby.vim b/src/testdir/test_ruby.vim index 224dffb994..2e0835cbe0 100644 --- a/src/testdir/test_ruby.vim +++ b/src/testdir/test_ruby.vim @@ -275,7 +275,7 @@ func Test_ruby_Vim_buffer_get() call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name')) call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name')) call assert_fails('ruby print Vim::Buffer[3].name', - \ "NoMethodError: undefined method `name' for nil:NilClass") + \ "NoMethodError: undefined method `name' for nil") %bwipe endfunc diff --git a/src/version.c b/src/version.c index 8c71b6864f..749d6af13a 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3, /**/ 2, /**/