#! /usr/bin/env ruby
# 
# this if my current preferred method of reporting errors from the correct
# filename and line number when executing eval'd/metaprogrammed code
#

class C
  def C.binding
    Kernel.binding
  end
end

lineno, code = __LINE__ + 1, <<-__
  def foo
    42
  end
  def bar
    raise
  end
__
srcfile = __FILE__
eval(code, C.binding, srcfile, lineno)

p C.new.foo
p C.new.bar


__END__
42
a.rb:18:in `bar': unhandled exception
        from a.rb:20