From 1689cc0fa2eba174ec66bffa5d8f1656760c6702 Mon Sep 17 00:00:00 2001 From: Lars Kanis Date: Tue, 18 Apr 2023 15:06:15 +0200 Subject: Fix compat to JRuby and TuffleRuby regarding Ractor --- lib/ffi/types.rb | 11 ++++++++++- spec/ffi/memorypointer_spec.rb | 4 ++++ spec/ffi/pointer_spec.rb | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/ffi/types.rb b/lib/ffi/types.rb index da214ee..8f5d897 100644 --- a/lib/ffi/types.rb +++ b/lib/ffi/types.rb @@ -33,6 +33,15 @@ # see {file:README} module FFI + unless defined?(self.custom_typedefs) + # Truffleruby and JRuby don't support Ractor so far. + # So they don't need separation between builtin and custom types. + def self.custom_typedefs + TypeDefs + end + writable_typemap = true + end + # @param [Type, DataConverter, Symbol] old type definition used by {FFI.find_type} # @param [Symbol] add new type definition's name to add # @return [Type] @@ -206,5 +215,5 @@ module FFI rescue Errno::ENOENT end - FFI.make_shareable(TypeDefs) + FFI.make_shareable(TypeDefs) unless writable_typemap end diff --git a/spec/ffi/memorypointer_spec.rb b/spec/ffi/memorypointer_spec.rb index 904fdc9..f29e2cb 100644 --- a/spec/ffi/memorypointer_spec.rb +++ b/spec/ffi/memorypointer_spec.rb @@ -37,6 +37,8 @@ describe "MemoryPointer#clear" do expect(ptr.read_long).to eq(0) end it "should deny changes when frozen" do + skip "not yet supported on TruffleRuby" if RUBY_ENGINE == "truffleruby" + skip "not yet supported on JRuby" if RUBY_ENGINE == "jruby" ptr = MemoryPointer.new(:long).freeze expect{ ptr.clear }.to raise_error(RuntimeError, /memory write/) end @@ -102,6 +104,8 @@ describe "#autorelease" do end it "should deny changes when frozen" do + skip "not yet supported on TruffleRuby" if RUBY_ENGINE == "truffleruby" + skip "not yet supported on JRuby" if RUBY_ENGINE == "jruby" ptr = MemoryPointer.new(8).freeze expect{ ptr.autorelease = false }.to raise_error(FrozenError) end diff --git a/spec/ffi/pointer_spec.rb b/spec/ffi/pointer_spec.rb index 7232a5f..880ffd3 100644 --- a/spec/ffi/pointer_spec.rb +++ b/spec/ffi/pointer_spec.rb @@ -91,6 +91,8 @@ describe "Pointer" do end it "#write_pointer frozen object" do + skip "not yet supported on TruffleRuby" if RUBY_ENGINE == "truffleruby" + skip "not yet supported on JRuby" if RUBY_ENGINE == "jruby" memory = FFI::MemoryPointer.new(:pointer).freeze expect{ memory.write_pointer(PointerTestLib.ptr_from_address(0xdeadbeef)) }.to raise_error(RuntimeError, /memory write/) end -- cgit v1.2.1