summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--compile.c7
-rw-r--r--test/ruby/test_syntax.rb5
3 files changed, 16 insertions, 1 deletions
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 <nobu@ruby-lang.org>
+
+ * 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 <nobu@ruby-lang.org>
* 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_")