summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/-test-/symbol/extconf.rb1
-rw-r--r--ext/-test-/symbol/type.c14
2 files changed, 15 insertions, 0 deletions
diff --git a/ext/-test-/symbol/extconf.rb b/ext/-test-/symbol/extconf.rb
index 0b7c387..fc00ec9 100644
--- a/ext/-test-/symbol/extconf.rb
+++ b/ext/-test-/symbol/extconf.rb
@@ -3,4 +3,5 @@ inits = $srcs.map {|s| File.basename(s, ".*")}
inits.delete("init")
inits.map! {|s|"X(#{s})"}
$defs << "-DTEST_INIT_FUNCS(X)=\"#{inits.join(' ')}\""
+have_func("rb_pin_dynamic_symbol")
create_makefile("-test-/symbol")
diff --git a/ext/-test-/symbol/type.c b/ext/-test-/symbol/type.c
index c6dbdd1..296c74c 100644
--- a/ext/-test-/symbol/type.c
+++ b/ext/-test-/symbol/type.c
@@ -53,6 +53,17 @@ bug_dynamic_p(VALUE self, VALUE sym)
return DYNAMIC_SYM_P(sym) ? Qtrue : Qfalse;
}
+#ifdef HAVE_RB_PIN_DYNAMIC_SYMBOL
+ID rb_pin_dynamic_symbol(VALUE);
+
+static VALUE
+bug_pindown(VALUE self, VALUE sym)
+{
+ rb_pin_dynamic_symbol(sym);
+ return sym;
+}
+#endif
+
void
Init_type(VALUE klass)
{
@@ -61,4 +72,7 @@ Init_type(VALUE klass)
rb_define_singleton_method(klass, "id2str", bug_id2str, 1);
rb_define_singleton_method(klass, "static?", bug_static_p, 1);
rb_define_singleton_method(klass, "dynamic?", bug_dynamic_p, 1);
+#ifdef HAVE_RB_PIN_DYNAMIC_SYMBOL
+ rb_define_singleton_method(klass, "pindown", bug_pindown, 1);
+#endif
}