summaryrefslogtreecommitdiff
path: root/iseq.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-10-04 02:35:10 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-10-04 02:35:10 +0900
commitc3dd3b95538a641bbffb02993985ce0cbac1b9d6 (patch)
treeb2e7f29f354fa52e56b230b720c9c7d1933db690 /iseq.c
parentb732a9f8a0f694d8668bb1d42e94435c47e05df3 (diff)
iseq.c (rb_iseq_compile_with_option): dummy parent_iseq for the parser
The parsing of `RubyVM::InstructionSequence.compile` does not support an outer scope currently. So it specified NULL as parent_iseq for the parser. However, it resulted in the following false-positive warning. ``` RubyVM::InstructionSequence.compile(<<END) o = Object.new o #=> <compiled>:2: warning: possibly useless use of a variable in void context END ``` This change specifies a dummy empty parent_iseq instead of NULL, which suppresses the false positive.
Diffstat (limited to 'iseq.c')
-rw-r--r--iseq.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/iseq.c b/iseq.c
index d7e8cce821..fcf38fcea8 100644
--- a/iseq.c
+++ b/iseq.c
@@ -994,7 +994,14 @@ rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE realpath, VALUE line, c
}
{
const VALUE parser = rb_parser_new();
- rb_parser_set_context(parser, parent, FALSE);
+ const rb_iseq_t *outer_scope = parent;
+ if (!outer_scope) {
+ VALUE name = rb_fstring_lit("<compiled>");
+ outer_scope = rb_iseq_new(NULL, name, name, Qnil, 0, ISEQ_TYPE_TOP);
+ }
+ VALUE outer_scope_v = (VALUE)outer_scope;
+ rb_parser_set_context(parser, outer_scope, FALSE);
+ RB_GC_GUARD(outer_scope_v);
ast = (*parse)(parser, file, src, ln);
}