Feature #11689 ยป 0001-Add-Method-visibility-and-UnboundMethod-visibility.patch
| proc.c | ||
|---|---|---|
|
}
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* meth.visibility -> symbol
|
||
|
*
|
||
|
* Returns a symbol (:public, :private, or :protected).
|
||
|
*/
|
||
|
static VALUE
|
||
|
rb_method_visibility(VALUE method)
|
||
|
{
|
||
|
const struct METHOD *data;
|
||
|
VALUE sym;
|
||
|
TypedData_Get_Struct(method, struct METHOD, &method_data_type, data);
|
||
|
switch(METHOD_ENTRY_VISI(data->me)) {
|
||
|
case METHOD_VISI_UNDEF:
|
||
|
case METHOD_VISI_PUBLIC: sym = ID2SYM(rb_intern("public")); break;
|
||
|
case METHOD_VISI_PRIVATE: sym = ID2SYM(rb_intern("private")); break;
|
||
|
case METHOD_VISI_PROTECTED: sym = ID2SYM(rb_intern("protected")); break;
|
||
|
default: UNREACHABLE;
|
||
|
}
|
||
|
return sym;
|
||
|
}
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* local_jump_error.exit_value -> obj
|
||
|
*
|
||
| ... | ... | |
|
rb_define_method(rb_cMethod, "source_location", rb_method_location, 0);
|
||
|
rb_define_method(rb_cMethod, "parameters", rb_method_parameters, 0);
|
||
|
rb_define_method(rb_cMethod, "super_method", method_super_method, 0);
|
||
|
rb_define_method(rb_cMethod, "visibility", rb_method_visibility, 0);
|
||
|
rb_define_method(rb_mKernel, "method", rb_obj_method, 1);
|
||
|
rb_define_method(rb_mKernel, "public_method", rb_obj_public_method, 1);
|
||
|
rb_define_method(rb_mKernel, "singleton_method", rb_obj_singleton_method, 1);
|
||
| ... | ... | |
|
rb_define_method(rb_cUnboundMethod, "source_location", rb_method_location, 0);
|
||
|
rb_define_method(rb_cUnboundMethod, "parameters", rb_method_parameters, 0);
|
||
|
rb_define_method(rb_cUnboundMethod, "super_method", method_super_method, 0);
|
||
|
rb_define_method(rb_cUnboundMethod, "visibility", rb_method_visibility, 0);
|
||
|
/* Module#*_method */
|
||
|
rb_define_method(rb_cModule, "instance_method", rb_mod_instance_method, 1);
|
||
| test/ruby/test_method.rb | ||
|---|---|---|
|
assert_nil(m, Feature9781)
|
||
|
end
|
||
|
def test_visibility_method
|
||
|
v = Visibility.new
|
||
|
assert_equal(:public, v.method(:mv1).visibility)
|
||
|
assert_equal(:private, v.method(:mv2).visibility)
|
||
|
assert_equal(:protected, v.method(:mv3).visibility)
|
||
|
end
|
||
|
def test_visibility_method_unbound
|
||
|
assert_equal(:public, Visibility.instance_method(:mv1).visibility)
|
||
|
assert_equal(:private, Visibility.instance_method(:mv2).visibility)
|
||
|
assert_equal(:protected, Visibility.instance_method(:mv3).visibility)
|
||
|
end
|
||
|
def rest_parameter(*rest)
|
||
|
rest
|
||
|
end
|
||