Skip to content

Commit 28f7a33

Browse files
authored
Merge pull request #99 from sue445/rb_define_method_id
Add RbDefineMethodId
2 parents c2882b6 + 40aa15e commit 28f7a33

File tree

5 files changed

+23
-1
lines changed

5 files changed

+23
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ ref. https://docs.ruby-lang.org/ja/latest/function/index.html
206206
* [ ] `rb_define_global_function`
207207
* [ ] `rb_define_hooked_variable`
208208
* [x] `rb_define_method`
209-
* [ ] `rb_define_method_id`
209+
* [x] `rb_define_method_id`
210210
* [x] `rb_define_module`
211211
* [x] `rb_define_module_function`
212212
* [ ] `rb_define_module_id`

ruby-internal-intern-class.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,12 @@ func RbDefineSingletonMethod(obj VALUE, mid string, fun unsafe.Pointer, arity in
2222

2323
C.rb_define_singleton_method(C.VALUE(obj), char, toFunctionPointer(fun), C.int(arity))
2424
}
25+
26+
// RbDefineMethodId calls `rb_define_method_id` in C
27+
//
28+
// Original definition is following
29+
//
30+
// void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int arity)
31+
func RbDefineMethodId(klass VALUE, mid ID, fun unsafe.Pointer, arity int) {
32+
C.rb_define_method_id(C.VALUE(klass), C.ID(mid), toFunctionPointer(fun), C.int(arity))
33+
}

testdata/dummy/ext/dummy/tests.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
/*
44
#include "dummy.h"
55
6+
void rb_dummy_tests_nop(VALUE self);
67
VALUE rb_dummy_tests_rb_ivar_get(VALUE self);
78
void rb_dummy_tests_rb_ivar_set(VALUE self, VALUE value);
89
VALUE rb_dummy_tests_rb_yield(VALUE self, VALUE arg);
@@ -33,6 +34,10 @@ import (
3334
ruby "github.com/sue445/go-gem-wrapper"
3435
)
3536

37+
//export rb_dummy_tests_nop
38+
func rb_dummy_tests_nop(_ C.VALUE) {
39+
}
40+
3641
//export rb_dummy_tests_rb_ivar_get
3742
func rb_dummy_tests_rb_ivar_get(self C.VALUE) C.VALUE {
3843
ivarID := ruby.RbIntern("@ivar")
@@ -247,6 +252,8 @@ func defineMethodsToDummyTests(rb_mDummy ruby.VALUE) {
247252
ruby.RbDefineMethod(rb_cTests, "rb_ivar_get", C.rb_dummy_tests_rb_ivar_get, 0)
248253
ruby.RbDefineMethod(rb_cTests, "rb_ivar_set", C.rb_dummy_tests_rb_ivar_set, 1)
249254

255+
ruby.RbDefineMethodId(rb_cTests, ruby.RbIntern("nop_rb_define_method_id"), C.rb_dummy_tests_nop, 0)
256+
250257
ruby.RbDefineSingletonMethod(rb_cTests, "rb_yield", C.rb_dummy_tests_rb_yield, 1)
251258
ruby.RbDefineSingletonMethod(rb_cTests, "rb_block_proc", C.rb_dummy_tests_rb_block_proc, 1)
252259
ruby.RbDefineSingletonMethod(rb_cTests, "rb_funcall2", C.rb_dummy_tests_rb_funcall2, 2)

testdata/dummy/sig/dummy/tests.rbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ module Dummy
1212
def rb_ivar_get: () -> untyped
1313
def rb_ivar_set: (untyped ivar) -> void
1414

15+
def nop_rb_define_method_id: () -> void
16+
1517
def self.rb_yield: (untyped) { (untyped) -> untyped } -> untyped
1618
def self.rb_block_proc: (untyped) { (untyped) -> untyped } -> untyped
1719
def self.rb_funcall2: (Integer num, Integer ndigits) -> Integer

testdata/dummy/test/dummy/tests_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,5 +158,9 @@ class RbAttrTest < Test::Unit::TestCase
158158
assert { array == [2, 1] }
159159
assert { ret == [2, 1] }
160160
end
161+
162+
test "#nop_rb_define_method_id" do
163+
assert { Dummy::Tests.new.respond_to?(:nop_rb_define_method_id) }
164+
end
161165
end
162166
end

0 commit comments

Comments
 (0)