Make eval(code, binding) use (eval) as __FILE__ and 1 as __LINE__

This removes the warning that was added in
3802fb92ff, and switches the behavior
so that the eval does not use the binding's __FILE__ and __LINE__
implicitly.

Fixes [Bug #4352]
This commit is contained in:
Jeremy Evans 2019-07-30 16:15:19 -07:00
parent 170f4dbb9b
commit 0eeed5bcc5
Notes: git 2020-01-04 13:13:49 +09:00
7 changed files with 103 additions and 67 deletions

View file

@ -470,9 +470,12 @@ class TestEval < Test::Unit::TestCase
end
def test_eval_location_binding
assert_warning(/__FILE__ in eval/) do
assert_equal(__FILE__, eval("__FILE__", binding))
end
assert_equal(['(eval)', 1], eval("[__FILE__, __LINE__]", nil))
assert_equal(['(eval)', 1], eval("[__FILE__, __LINE__]", binding))
assert_equal(['foo', 1], eval("[__FILE__, __LINE__]", nil, 'foo'))
assert_equal(['foo', 1], eval("[__FILE__, __LINE__]", binding, 'foo'))
assert_equal(['foo', 2], eval("[__FILE__, __LINE__]", nil, 'foo', 2))
assert_equal(['foo', 2], eval("[__FILE__, __LINE__]", binding, 'foo', 2))
end
def test_fstring_instance_eval