From c3dd3b95538a641bbffb02993985ce0cbac1b9d6 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Fri, 4 Oct 2019 02:35:10 +0900 Subject: 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(< :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. --- iseq.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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(""); + 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); } -- cgit v1.2.3