summaryrefslogtreecommitdiff
path: root/ast.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2021-05-21 11:01:06 -0700
committerJeremy Evans <code@jeremyevans.net>2021-07-29 13:51:03 -0700
commit64ac984129a7a4645efe5ac57c168ef880b479b2 (patch)
tree3d5aa171e3e63e39b9b8d4ab4425d01894880f02 /ast.c
parent6998d758248d778fa95b008c78d05473e48b8428 (diff)
downloadruby-64ac984129a7a4645efe5ac57c168ef880b479b2.tar.gz
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>
Diffstat (limited to 'ast.c')
-rw-r--r--ast.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/ast.c b/ast.c
index 32d8ab9eb6..20c4588cd7 100644
--- a/ast.c
+++ b/ast.c
@@ -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;
}