1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* eval.c (rb_call), eval_method.ci (rb_add_method, rb_alias),

insnhelper.ci (vm_call_method): fix to save safelevel for
  method node.
* include/ruby/node.h: ditto.
* bootstraptest/test_method.rb: add a test for above.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2007-08-17 12:25:47 +00:00
parent e5d5f5a61a
commit b982cff67c
6 changed files with 107 additions and 32 deletions

View file

@ -860,5 +860,49 @@ class C0; def m *args; [:C0_m, args]; end; end
class C1 < C0; def m a, o=:o; super; end; end
; C1.new.m 1, 2}
assert_equal %q{[:ok, :ok, :ok, :ok, :ok, :ok, :ng, :ng]}, %q{
$ans = []
class Foo
def m
end
end
alias funcall send unless defined? funcall
c1 = c2 = nil
lambda{
$SAFE = 4
c1 = Class.new{
def m
end
}
c2 = Class.new(Foo){
alias mm m
}
}.call
def test
begin
yield
rescue SecurityError
$ans << :ok
else
$ans << :ng
end
end
o1 = c1.new
o2 = c2.new
test{o1.m}
test{o2.mm}
test{o1.send :m}
test{o2.send :mm}
test{o1.funcall :m}
test{o2.funcall :mm}
test{o1.method(:m).call}
test{o2.method(:mm).call}
$ans
}