Issue #4352 has been updated by Yui NARUSE. Status changed from Open to Assigned Assignee set to Yusuke Endoh ---------------------------------------- Bug #4352: [patch] Fix eval(s, b) backtrace; make eval(s, b) consistent with eval(s) http://redmine.ruby-lang.org/issues/4352 Author: James M. Lawrence Status: Assigned Priority: Normal Assignee: Yusuke Endoh Category: core Target version: 1.9.x ruby -v: ruby 1.9.3dev (2011-02-01 trunk 30751) [i386-darwin9.8.0] =begin def ex_message begin yield rescue => e p e.message end end ex_message { eval('raise') } ex_message { eval('raise', binding) } eval('def f ; end') p method(:f).source_location eval('def g ; end', binding) p method(:g).source_location ---- Without patch: "(eval):1:in `block in <main>': " "" ["(eval)", 1] ["eval_test.rb", 14] With patch: "(eval):1:in `block in <main>': " "(eval):1:in `block in <main>': " ["(eval)", 1] ["(eval)", 1] Knowing the line of an error inside eval is useful. Passing a binding shouldn't discard that information. Present behavior is even wrong: there's no line 10 in this file. ---- eval %{ # .. code ... raise }, binding ---- Without patch: /Users/jlawrence/tmp/raiser.rb:10:in `<main>': unhandled exception from /Users/jlawrence/tmp/raiser.rb:7:in `eval' from /Users/jlawrence/tmp/raiser.rb:7:in `<main>' With patch: /Users/jlawrence/tmp/raiser.rb:7:in `eval': (eval):4:in `<main>': (RuntimeError) from /Users/jlawrence/tmp/raiser.rb:7:in `eval' from /Users/jlawrence/tmp/raiser.rb:7:in `<main>' =end -- http://redmine.ruby-lang.org