[#107867] Fwd: [ruby-cvs:91197] 8f59482f5d (master): add some tests for Unicode Version 14.0.0 — Martin J. Dürst <duerst@...>
To everybody taking care of continuous integration:
3 messages
2022/03/13
[#108090] [Ruby master Bug#18666] No rule to make target 'yaml/yaml.h', needed by 'api.o' — duerst <noreply@...>
Issue #18666 has been reported by duerst (Martin D端rst).
7 messages
2022/03/28
[#108117] [Ruby master Feature#18668] Merge `io-nonblock` gems into core — "Eregon (Benoit Daloze)" <noreply@...>
Issue #18668 has been reported by Eregon (Benoit Daloze).
22 messages
2022/03/30
[ruby-core:107952] [Ruby master Feature#12655] Accessing the method visibility
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-03-17 14:00:25 UTC
List:
ruby-core #107952
Issue #12655 has been updated by matz (Yukihiro Matsumoto). OK, I accept introducing `undefined_instance_methods`. It returns a list of undefined methods of the receiver class. Unlike `instance_methods` etc. it should not traverse the inheritance chain. Matz. ---------------------------------------- Feature #12655: Accessing the method visibility https://bugs.ruby-lang.org/issues/12655#change-96902 * Author: mathieujobin (Mathieu Jobin) * Status: Feedback * Priority: Normal ---------------------------------------- I took on the task to make the looksee gem work with ruby 2.3 and 2.4. Unfortunately, some features were not directly accessible in ruby, so a C extension was made, which includes some ruby internals. For ruby 2.2 support, internal.h and method.h were included. For ruby 2.3, I found I need id_table.h at least, but I did not fully succeed making it work. In a short email thread, koichi san suggested it would be better to request to add the necessary public interface to ruby so that looksee would not need internals. looksee creates these new methods from ruby internals: ```C rb_define_method(mMRI, "internal_superclass", Looksee_internal_superclass, 1); rb_define_method(mMRI, "internal_class", Looksee_internal_class, 1); rb_define_method(mMRI, "internal_public_instance_methods", Looksee_internal_public_instance_methods, 1); rb_define_method(mMRI, "internal_protected_instance_methods", Looksee_internal_protected_instance_methods, 1); rb_define_method(mMRI, "internal_private_instance_methods", Looksee_internal_private_instance_methods, 1); rb_define_method(mMRI, "internal_undefined_instance_methods", Looksee_internal_undefined_instance_methods, 1); rb_define_method(mMRI, "included_class?", Looksee_included_class_p, 1); rb_define_method(mMRI, "singleton_class?", Looksee_singleton_class_p, 1); rb_define_method(mMRI, "singleton_instance", Looksee_singleton_instance, 1); rb_define_method(mMRI, "real_module", Looksee_real_module, 1); rb_define_method(mMRI, "module_name", Looksee_module_name, 1); ``` It uses the following macros to find the method visibility and whether it has been redefined: ```C UNDEFINED_METHOD_ENTRY_P(me) METHOD_ENTRY_VISI(me) ``` Ideally, a ruby method that returns visibility should return one of the following values: ```ruby [:public, :protected, :private, :undefined, :overridden] ``` We are using other ruby macros to find where and within which module or class the method is defined. ```C RCLASS_SUPER(internal_class) CLASS_OF(object) RCLASS_M_TBL(klass) SPECIAL_CONST_P(object) BUILTIN_TYPE(object) FL_TEST(singleton_class, FL_SINGLETON) RCLASS_IV_TBL(singleton_class) RBASIC(module_or_included_class)->klass ``` You can see what I have tried for ruby 2.3: https://github.com/oggy/looksee/pull/36/files#diff-d5ef4b0cfbd5a6712f37dfa7ffbe2130 I cannot use `rb_id_table_foreach`, which suggests that I need to import much ruby code into the extension. I prefer not to include more C into this gem. So I am trying to extract `st_table` from `struct rb_id_table*`, but I am getting a deferencing incomplete type error. Please help. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>