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

ruby-changes:4624

From: ko1@a...
Date: Mon, 21 Apr 2008 11:02:45 +0900 (JST)
Subject: [ruby-changes:4624] matz - Ruby:r16118 (trunk): * compile.c (defined_expr): capture exception during defined?

matz	2008-04-21 11:02:26 +0900 (Mon, 21 Apr 2008)

  New Revision: 16118

  Modified files:
    trunk/ChangeLog
    trunk/compile.c

  Log:
    * compile.c (defined_expr): capture exception during defined?
      evaluation.  a patch from wanabe <s.wanabe at gmail.com> in
      [ruby-dev:34461].  [ruby-core:16010]

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/compile.c?r1=16118&r2=16117&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16118&r2=16117&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16117)
+++ ChangeLog	(revision 16118)
@@ -1,3 +1,9 @@
+Mon Apr 21 11:00:27 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* compile.c (defined_expr): capture exception during defined?
+	  evaluation.  a patch from wanabe <s.wanabe at gmail.com> in
+	  [ruby-dev:34461].  [ruby-core:16010]
+
 Mon Apr 21 10:06:26 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* time.c: should include <errno.h> to refer errno.
Index: compile.c
===================================================================
--- compile.c	(revision 16117)
+++ compile.c	(revision 16118)
@@ -2421,10 +2421,21 @@
 	    ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
 	}
 	if (!self) {
+	    LABEL *lstart = NEW_LABEL(nd_line(node));
+	    LABEL *lend = NEW_LABEL(nd_line(node));
+	    VALUE rescue = NEW_CHILD_ISEQVAL(NEW_NIL(),
+					     rb_str_concat(rb_str_new2
+							   ("defined guard in "),
+							   iseq->name),
+					     ISEQ_TYPE_DEFINED_GUARD);
+
 	    defined_expr(iseq, ret, node->nd_recv, lfinish, Qfalse);
 	    ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
 
+	    ADD_LABEL(ret, lstart);
 	    COMPILE(ret, "defined/recv", node->nd_recv);
+	    ADD_LABEL(ret, lend);
+	    ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]);
 	    ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_METHOD),
 		      ID2SYM(node->nd_mid), needstr);
 	}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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