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:
parent
e5d5f5a61a
commit
b982cff67c
6 changed files with 107 additions and 32 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue