diff --git a/lib/cext/include/truffleruby/truffleruby-abi-version.h b/lib/cext/include/truffleruby/truffleruby-abi-version.h index f393d5ce8a2..2b824bf84a7 100644 --- a/lib/cext/include/truffleruby/truffleruby-abi-version.h +++ b/lib/cext/include/truffleruby/truffleruby-abi-version.h @@ -20,6 +20,6 @@ // $RUBY_VERSION must be the same as TruffleRuby.LANGUAGE_VERSION. // $ABI_NUMBER starts at 1 and is incremented for every ABI-incompatible change. -#define TRUFFLERUBY_ABI_VERSION "3.2.2.12" +#define TRUFFLERUBY_ABI_VERSION "3.2.2.13" #endif diff --git a/spec/ruby/core/module/include_spec.rb b/spec/ruby/core/module/include_spec.rb index c073bc31ca0..78f6b410317 100644 --- a/spec/ruby/core/module/include_spec.rb +++ b/spec/ruby/core/module/include_spec.rb @@ -47,6 +47,34 @@ def self.append_features(mod) -> { ModuleSpecs::SubclassSpec.include(ModuleSpecs::Subclass.new) }.should_not raise_error(TypeError) end + ruby_version_is ""..."3.2" do + it "raises ArgumentError when the argument is a refinement" do + refinement = nil + + Module.new do + refine String do + refinement = self + end + end + + -> { ModuleSpecs::Basic.include(refinement) }.should raise_error(ArgumentError, "refinement module is not allowed") + end + end + + ruby_version_is "3.2" do + it "raises a TypeError when the argument is a refinement" do + refinement = nil + + Module.new do + refine String do + refinement = self + end + end + + -> { ModuleSpecs::Basic.include(refinement) }.should raise_error(TypeError, "Cannot include refinement") + end + end + it "imports constants to modules and classes" do ModuleSpecs::A.constants.should include(:CONSTANT_A) ModuleSpecs::B.constants.should include(:CONSTANT_A, :CONSTANT_B) diff --git a/spec/ruby/core/module/prepend_spec.rb b/spec/ruby/core/module/prepend_spec.rb index bce4d6f7e67..b40d12f0deb 100644 --- a/spec/ruby/core/module/prepend_spec.rb +++ b/spec/ruby/core/module/prepend_spec.rb @@ -435,6 +435,34 @@ module M -> { ModuleSpecs::SubclassSpec.prepend(ModuleSpecs::Subclass.new) }.should_not raise_error(TypeError) end + ruby_version_is ""..."3.2" do + it "raises ArgumentError when the argument is a refinement" do + refinement = nil + + Module.new do + refine String do + refinement = self + end + end + + -> { ModuleSpecs::Basic.prepend(refinement) }.should raise_error(ArgumentError, "refinement module is not allowed") + end + end + + ruby_version_is "3.2" do + it "raises a TypeError when the argument is a refinement" do + refinement = nil + + Module.new do + refine String do + refinement = self + end + end + + -> { ModuleSpecs::Basic.prepend(refinement) }.should raise_error(TypeError, "Cannot prepend refinement") + end + end + it "imports constants" do m1 = Module.new m1::MY_CONSTANT = 1 diff --git a/spec/tags/core/refinement/include_tags.txt b/spec/tags/core/refinement/include_tags.txt deleted file mode 100644 index 449e650e0d9..00000000000 --- a/spec/tags/core/refinement/include_tags.txt +++ /dev/null @@ -1 +0,0 @@ -fails:Refinement#include raises a TypeError diff --git a/spec/tags/core/refinement/prepend_tags.txt b/spec/tags/core/refinement/prepend_tags.txt deleted file mode 100644 index 474bee31656..00000000000 --- a/spec/tags/core/refinement/prepend_tags.txt +++ /dev/null @@ -1 +0,0 @@ -fails:Refinement#prepend raises a TypeError diff --git a/src/main/c/cext/globals.c b/src/main/c/cext/globals.c index d6df75c9ceb..d688eed7701 100644 --- a/src/main/c/cext/globals.c +++ b/src/main/c/cext/globals.c @@ -76,12 +76,6 @@ VALUE rb_gv_get(const char *name) { return RUBY_CEXT_INVOKE("rb_gv_get", rb_str_new_cstr(name)); } -// $SAFE - -void rb_check_trusted(VALUE obj) { - rb_warning("rb_check_trusted is deprecated and will be removed in Ruby 3.2."); -} - // $VERBOSE VALUE rb_tr_ruby_verbose_ptr; diff --git a/src/main/c/cext/string.c b/src/main/c/cext/string.c index 8d1a966f86d..a7d95cb7fd1 100644 --- a/src/main/c/cext/string.c +++ b/src/main/c/cext/string.c @@ -72,11 +72,6 @@ VALUE rb_str_new_static(const char *string, long length) { return rb_str_new(string, length); } -VALUE rb_tainted_str_new(const char *ptr, long len) { - rb_warning("rb_tainted_str_new is deprecated and will be removed in Ruby 3.2."); - return rb_str_new(ptr, len); -} - VALUE rb_str_new_cstr(const char *string) { // TODO CS 24-Oct-17 would be nice to read in one go rather than strlen followed by read size_t len = strlen(string); @@ -91,11 +86,6 @@ VALUE rb_str_new_with_class(VALUE str, const char *string, long len) { return RUBY_INVOKE(RUBY_INVOKE(str, "class"), "new", rb_str_new(string, len)); } -VALUE rb_tainted_str_new_cstr(const char *ptr) { - rb_warning("rb_tainted_str_new_cstr is deprecated and will be removed in Ruby 3.2."); - return rb_str_new_cstr(ptr); -} - VALUE rb_str_dup(VALUE string) { return rb_obj_dup(string); } diff --git a/src/main/ruby/truffleruby/core/module.rb b/src/main/ruby/truffleruby/core/module.rb index 51efbc39e50..b04b4e0f92b 100644 --- a/src/main/ruby/truffleruby/core/module.rb +++ b/src/main/ruby/truffleruby/core/module.rb @@ -79,13 +79,17 @@ def include?(mod) def include(*modules) raise ArgumentError, 'wrong number of arguments (given 0, expected 1+)' if modules.empty? if Primitive.is_a?(self, Refinement) - warn 'Refinement#include is deprecated and will be removed in Ruby 3.2', category: :deprecated, uplevel: 1 + raise TypeError, 'Refinement#include has been removed' end modules.reverse_each do |mod| if !Primitive.is_a?(mod, Module) or Primitive.is_a?(mod, Class) raise TypeError, "wrong argument type #{Primitive.class(mod)} (expected Module)" end + if Primitive.is_a?(mod, Refinement) + raise TypeError, 'Cannot include refinement' + end + mod.__send__ :append_features, self mod.__send__ :included, self end @@ -95,13 +99,17 @@ def include(*modules) def prepend(*modules) raise ArgumentError, 'wrong number of arguments (given 0, expected 1+)' if modules.empty? if Primitive.is_a?(self, Refinement) - warn 'Refinement#prepend is deprecated and will be removed in Ruby 3.2', category: :deprecated, uplevel: 1 + raise TypeError, 'Refinement#prepend has been removed' end modules.reverse_each do |mod| if !Primitive.is_a?(mod, Module) or Primitive.is_a?(mod, Class) raise TypeError, "wrong argument type #{Primitive.class(mod)} (expected Module)" end + if Primitive.is_a?(mod, Refinement) + raise TypeError, 'Cannot prepend refinement' + end + mod.__send__ :prepend_features, self mod.__send__ :prepended, self end