From 0c5d73e80be89a6de2aeba9556277f8740256ff9 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 5 Apr 2013 10:40:03 +0000 Subject: compile.c: defined? with empty expression * compile.c (iseq_compile_each): fix of defined? with empty expression. [ruby-core:53999] [Bug #8220] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ compile.c | 7 ++++++- test/ruby/test_syntax.rb | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index e809b06581..7e96cf8269 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Apr 5 19:39:52 2013 Nobuyoshi Nakada + + * compile.c (iseq_compile_each): fix of defined? with empty + expression. [ruby-core:53999] [Bug #8220] + Fri Apr 5 13:22:59 2013 Nobuyoshi Nakada * ext/curses/curses.c (Init_curses): fix implementation function, diff --git a/compile.c b/compile.c index 9360f5b791..65d01220e7 100644 --- a/compile.c +++ b/compile.c @@ -5175,7 +5175,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) break; } case NODE_DEFINED:{ - if (!poped) { + if (poped) break; + if (!node->nd_head) { + VALUE str = rb_iseq_defined_string(DEFINED_NIL); + ADD_INSN1(ret, nd_line(node), putobject, str); + } + else { LABEL *lfinish[2]; lfinish[0] = NEW_LABEL(line); lfinish[1] = 0; diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 61507ecd83..895a4569fd 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -13,6 +13,11 @@ class TestSyntax < Test::Unit::TestCase eom end + def test_defined_empty_argument + bug8220 = '[ruby-core:53999] [Bug #8220]' + assert_ruby_status(%w[--disable-gem], 'puts defined? ()', bug8220) + end + def test_must_ascii_compatible require 'tempfile' f = Tempfile.new("must_ac_") -- cgit v1.2.3