diff options
author | Jeremy Evans <code@jeremyevans.net> | 2021-05-21 11:01:06 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2021-07-29 13:51:03 -0700 |
commit | 64ac984129a7a4645efe5ac57c168ef880b479b2 (patch) | |
tree | 3d5aa171e3e63e39b9b8d4ab4425d01894880f02 /ast.c | |
parent | 6998d758248d778fa95b008c78d05473e48b8428 (diff) |
Make RubyVM::AbstractSyntaxTree.of raise for method/proc created in eval
This changes Thread::Location::Backtrace#absolute_path to return
nil for methods/procs defined in eval. If the realpath of an iseq
is nil, that indicates it was defined in eval, in which case you
cannot use RubyVM::AbstractSyntaxTree.of.
Fixes [Bug #16983]
Co-authored-by: Koichi Sasada <ko1@atdot.net>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4519
Diffstat (limited to 'ast.c')
-rw-r--r-- | ast.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -213,6 +213,9 @@ ast_s_of(rb_execution_context_t *ec, VALUE module, VALUE body, VALUE save_script else { iseq = rb_method_iseq(body); } + if (rb_iseq_from_eval_p(iseq)) { + rb_raise(rb_eArgError, "cannot get AST for method defined in eval"); + } path = rb_iseq_path(iseq); node_id = iseq->body->location.node_id; } |