1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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.
This commit is contained in:
Yusuke Endoh 2019-10-04 02:35:10 +09:00
parent b732a9f8a0
commit c3dd3b9553

9
iseq.c
View file

@ -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);
}