Skip to content

Commit 494e3f6

Browse files
committed
Import TruffleRuby implementation
Fix GH-145 lib/fiddle/truffleruby.rb is based on https://github.com/oracle/truffleruby/blob/master/lib/truffle/truffle/fiddle_backend.rb . Here are changes for it: * Add `Fiddle::Types::VARIADIC` * Add `Fiddle::Types::CONST_STRING` * Add `Fiddle::Types::BOOL` * Add `Fiddle::ALIGN_BOOL` * Add `Fiddle::SIZEOF_BOOL` * Add `Fiddle::SIZEOF_CONST_STRING` * Add support for specifying type as not only `Fiddle::Types::*` but also `Symbol` like `:int` * Add `Fiddle::Error` as base the error class * Add support for `Fiddle::Pointer.malloc {}` `Fiddle::Pointer` * Add support for `Fiddle.free(#to_int)` * Accept `Fiddle::Function(need_gvl:)` but it's just ignored * `Fiddle::Function#initialize`: Add an argument validation * `Fiddle::Function#initialize`: Keep arguments as instance variables for getters * Add support for `Fiddle::Handle.sym` * Add support for `Fiddle::Handle.[]` * Add support for `Fiddle::Handle.sym_defined?` * Add support for `Fiddle::Handle#sym` * Add support for `Fiddle::Handle#[]` * Add support for `Fiddle::Handle#sym_defined?` * Add support for `Fiddle::Pointer.malloc` * Add support for `Fiddle::Pointer.to_ptr(#to_ptr)` * Add support for `Fiddle::Pointer#free=` * Add `Fiddle::Pointer#freed?` * Add support for `Fiddle::Pointer#call_free` * Add support for `Fiddle::Pointer#to_i` * Add support for `Fiddle::Pointer#to_int` * Add support for `Fiddle::Pointer#ptr` * Add support for `Fiddle::Pointer#+@` * Add support for `Fiddle::Pointer#ref` * Add support for `Fiddle::Pointer#-@` * Add support for `Fiddle::Pointer#null?` * Add support for `Fiddle::Pointer#to_s` * Add support for `Fiddle::Pointer#to_str` * Add support for `Fiddle::Pointer#inspect` * Add support for `Fiddle::Pointer#<=>` * Add support for `Fiddle::Pointer#==` * Add support for `Fiddle::Pointer#eql?` * Add support for `Fiddle::Pointer#+` * Add support for `Fiddle::Pointer#-` * Add support for `Fiddle::Pointer#[]=` * Add support for `Fiddle::Pointer#size` * Add support for `Fiddle::Pointer#size=` * Add `Fiddle::ClearedReferenceError` * Add no-op `Fiddle::Pinned` * Add `Fiddle::NULL` Some features are still "not implemented". So there are some "omit"s for TruffleRuby in tests.
1 parent 833bd73 commit 494e3f6

14 files changed

+719
-8
lines changed

.github/workflows/ci.yml

+2
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ jobs:
2626
- '3.2'
2727
- debug
2828
- jruby
29+
- truffleruby
2930
include:
3031
- { os: windows-latest , ruby: mingw }
3132
- { os: windows-latest , ruby: mswin }
3233
exclude:
3334
- { os: macos-14 , ruby: '2.5' }
3435
- { os: windows-latest , ruby: '3.0' }
3536
- { os: windows-latest , ruby: debug }
37+
- { os: windows-latest , ruby: truffleruby }
3638

3739
steps:
3840
- uses: actions/checkout@v4

ext/fiddle/extconf.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22
require 'mkmf'
33

4-
if RUBY_ENGINE == "jruby"
4+
unless RUBY_ENGINE == "ruby"
55
File.write('Makefile', dummy_makefile("").join)
66
return
77
end

fiddle.gemspec

+2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ Gem::Specification.new do |spec|
4242
"lib/fiddle/import.rb",
4343
"lib/fiddle/jruby.rb",
4444
"lib/fiddle/pack.rb",
45+
"lib/fiddle/ruby.rb",
4546
"lib/fiddle/struct.rb",
47+
"lib/fiddle/truffleruby.rb",
4648
"lib/fiddle/types.rb",
4749
"lib/fiddle/value.rb",
4850
"lib/fiddle/version.rb",

lib/fiddle.rb

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
# frozen_string_literal: true
22

3-
case RUBY_ENGINE
4-
when 'jruby'
5-
require 'fiddle/jruby'
6-
else
7-
require 'fiddle.so'
8-
end
3+
require "fiddle/#{RUBY_ENGINE}"
94
require 'fiddle/closure'
105
require 'fiddle/function'
116
require 'fiddle/version'

lib/fiddle/jruby.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ def -@
450450
end
451451

452452
def ref
453-
cptr = Pointer.malloc(FFI::Type::POINTER.size)
453+
cptr = Pointer.malloc(FFI::Type::POINTER.size, RUBY_FREE)
454454
cptr.ffi_ptr.put_pointer(0, ffi_ptr)
455455
cptr
456456
end

lib/fiddle/ruby.rb

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require "fiddle.so"

0 commit comments

Comments
 (0)