ruby-changes:2507
From: ko1@a...
Date: 23 Nov 2007 10:47:04 +0900
Subject: [ruby-changes:2507] matz - Ruby:r13998 (trunk): * compile.c (defined_expr): defined(method(x)) dumped core. a
matz 2007-11-23 10:46:44 +0900 (Fri, 23 Nov 2007)
New Revision: 13998
Modified files:
trunk/ChangeLog
trunk/compile.c
trunk/test/ruby/test_defined.rb
trunk/version.h
Log:
* compile.c (defined_expr): defined(method(x)) dumped core. a
patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32335]
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=13998&r2=13997
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/compile.c?r1=13998&r2=13997
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13998&r2=13997
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_defined.rb?r1=13998&r2=13997
Index: ChangeLog
===================================================================
--- ChangeLog (revision 13997)
+++ ChangeLog (revision 13998)
@@ -1,3 +1,8 @@
+Fri Nov 23 10:44:24 2007 Yukihiro Matsumoto <matz@r...>
+
+ * compile.c (defined_expr): defined(method(x)) dumped core. a
+ patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32335]
+
Wed Nov 21 18:03:49 2007 Koichi Sasada <ko1@a...>
* vm.c: fix to recycle thread data (VM stack).
Index: compile.c
===================================================================
--- compile.c (revision 13997)
+++ compile.c (revision 13998)
@@ -2295,13 +2295,11 @@
if (node->nd_args) {
lfalse = NEW_LABEL(nd_line(node));
defined_expr(iseq, ret, node->nd_args, lfinish, Qfalse);
+ ADD_INSNL(ret, nd_line(node), branchunless, lfalse);
}
if (!self) {
LABEL *lcont = NEW_LABEL(nd_line(node));
- if (lfalse) {
- ADD_INSNL(ret, nd_line(node), branchunless, lfalse);
- }
defined_expr(iseq, ret, node->nd_recv, lfinish, Qfalse);
ADD_INSNL(ret, nd_line(node), branchif, lcont);
if (lfalse) {
@@ -2319,9 +2317,8 @@
ADD_INSN(ret, nd_line(node), putself);
ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_FUNC),
ID2SYM(node->nd_mid), needstr);
+ ADD_INSNL(ret, nd_line(node), jump, lfinish);
if (lfalse) {
- ADD_INSNL(ret, nd_line(node), branchif, lfinish);
-
ADD_LABEL(ret, lfalse);
ADD_INSN(ret, nd_line(node), putnil);
ADD_INSNL(ret, nd_line(node), jump, lfinish);
Index: version.h
===================================================================
--- version.h (revision 13997)
+++ version.h (revision 13998)
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-11-22"
+#define RUBY_RELEASE_DATE "2007-11-23"
#define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20071122
+#define RUBY_RELEASE_CODE 20071123
#define RUBY_PATCHLEVEL 0
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 11
-#define RUBY_RELEASE_DAY 22
+#define RUBY_RELEASE_DAY 23
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];
Index: test/ruby/test_defined.rb
===================================================================
--- test/ruby/test_defined.rb (revision 13997)
+++ test/ruby/test_defined.rb (revision 13998)
@@ -10,6 +10,8 @@
yield(defined?(self.foo))
yield(defined?(f.foo))
end
+ def baz(f)
+ end
end
def defined_test
@@ -34,10 +36,17 @@
assert(defined?(1 == 2)) # operator expression
f = Foo.new
- assert_nil(defined?(f.foo))
+ assert_nil(defined?(f.foo)) # protected method
f.bar(f) { |v| assert(v) }
+ assert_nil(defined?(f.quux)) # undefined method
+ assert_nil(defined?(f.baz(x))) # undefined argument
+ x = 0
+ assert(defined?(f.baz(x)))
+ assert_nil(defined?(f.quux(x)))
+ assert(defined?(print(x)))
+ assert_nil(defined?(quux(x)))
assert(defined_test) # not iterator
- assert(!defined_test{}) # called as iterator
+ assert(!defined_test{}) # called as iterator
end
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml