diff options
author | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-04-18 15:06:15 +0200 |
---|---|---|
committer | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-04-18 16:23:24 +0200 |
commit | 1689cc0fa2eba174ec66bffa5d8f1656760c6702 (patch) | |
tree | 7f699efc6394f222c142aee0035768ab794f9387 | |
parent | 1b78458ff28819cb541d7410616d3d2907e30f73 (diff) | |
download | ffi-1689cc0fa2eba174ec66bffa5d8f1656760c6702.tar.gz |
Fix compat to JRuby and TuffleRuby regarding Ractor
-rw-r--r-- | lib/ffi/types.rb | 11 | ||||
-rw-r--r-- | spec/ffi/memorypointer_spec.rb | 4 | ||||
-rw-r--r-- | spec/ffi/pointer_spec.rb | 2 |
3 files changed, 16 insertions, 1 deletions
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 |