[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]