summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Kanis <lars@greiz-reinsdorf.de>2023-04-18 15:06:15 +0200
committerLars Kanis <lars@greiz-reinsdorf.de>2023-04-18 16:23:24 +0200
commit1689cc0fa2eba174ec66bffa5d8f1656760c6702 (patch)
tree7f699efc6394f222c142aee0035768ab794f9387
parent1b78458ff28819cb541d7410616d3d2907e30f73 (diff)
downloadffi-1689cc0fa2eba174ec66bffa5d8f1656760c6702.tar.gz
Fix compat to JRuby and TuffleRuby regarding Ractor
-rw-r--r--lib/ffi/types.rb11
-rw-r--r--spec/ffi/memorypointer_spec.rb4
-rw-r--r--spec/ffi/pointer_spec.rb2
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