Bug #4537 ยป attr-visibility-4537.patch
| test/ruby/test_module.rb | ||
|---|---|---|
|     assert_equal(false, o.respond_to?(:bar=)) | ||
|   end | ||
|   def test_attr_public_at_toplevel | ||
|     eval(<<-END, TOPLEVEL_BINDING) | ||
|       String.send(:attr_accessor, :x) | ||
|       String.send(:attr, :y) | ||
|       String.send(:attr_reader, :z) | ||
|       String.send(:attr_writer, :w) | ||
|     END | ||
|     s = "" | ||
|     assert_nil s.x | ||
|     s.x = 1 | ||
|     assert_equal 1, s.x | ||
|     assert_nil s.y | ||
|     s.instance_variable_set(:@y, 2) | ||
|     assert_equal 2, s.y | ||
|     assert_nil s.z | ||
|     s.instance_variable_set(:@z, 3) | ||
|     assert_equal 3, s.z | ||
|     s.w = 4 | ||
|     assert_equal 4, s.instance_variable_get(:@w) | ||
|   ensure | ||
|     [:x, :x=, :y, :z, :w=].each do |meth| | ||
|       String.undef_method(meth) rescue nil | ||
|     end | ||
|   end | ||
|   def test_const_get_evaled | ||
|     c1 = Class.new | ||
|     c2 = Class.new(c1) | ||
| vm.c | ||
|---|---|---|
|     const rb_execution_context_t *ec = GET_EC(); | ||
|     const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp); | ||
|     const rb_cref_t *cref; | ||
|     if (cfp->self != self) return NULL; | ||
|     if (!cfp || cfp->self != self) return NULL; | ||
|     if (!vm_env_cref_by_cref(cfp->ep)) return NULL; | ||
|     cref = vm_get_cref(cfp->ep); | ||
|     if (CREF_CLASS(cref) != cbase) return NULL; | ||
| vm_method.c | ||
|---|---|---|
|     vm_cref_set_visibility(METHOD_VISI_PRIVATE, TRUE); | ||
| } | ||
| const rb_cref_t *rb_vm_cref_in_context(VALUE self, VALUE cbase); | ||
| void | ||
| rb_attr(VALUE klass, ID id, int read, int write, int ex) | ||
| { | ||
|     ID attriv; | ||
|     rb_method_visibility_t visi; | ||
|     const rb_execution_context_t *ec = GET_EC(); | ||
|     const rb_cref_t *cref = rb_vm_cref_in_context(klass, klass); | ||
|     if (!ex) { | ||
|     if (!ex || !cref) { | ||
| 	visi = METHOD_VISI_PUBLIC; | ||
|     } | ||
|     else { | ||