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

ruby-changes:17577

From: nobu <ko1@a...>
Date: Sun, 24 Oct 2010 17:13:21 +0900 (JST)
Subject: [ruby-changes:17577] Ruby:r29582 (trunk): * include/ruby/intern.h (rb_check_frozen): optimize.

nobu	2010-10-24 17:05:55 +0900 (Sun, 24 Oct 2010)

  New Revision: 29582

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29582

  Log:
    * include/ruby/intern.h (rb_check_frozen): optimize.
      [ruby-core:32878]

  Modified files:
    trunk/ChangeLog
    trunk/error.c
    trunk/include/ruby/intern.h

Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h	(revision 29581)
+++ include/ruby/intern.h	(revision 29582)
@@ -213,6 +213,23 @@
 NORETURN(void rb_load_fail(const char*));
 NORETURN(void rb_error_frozen(const char*));
 void rb_check_frozen(VALUE);
+#define rb_check_frozen_internal(obj) do { \
+	VALUE frozen_obj = (obj); \
+	if (OBJ_FROZEN(frozen_obj)) { \
+	    rb_error_frozen(rb_obj_classname(frozen_obj)); \
+	} \
+    } while (0)
+#ifdef __GNUC__
+#define rb_check_frozen(obj) __extension__({rb_check_frozen_internal(obj);})
+#else
+static inline void
+rb_check_frozen_inline(VALUE obj)
+{
+    rb_check_frozen_internal(obj);
+}
+#define rb_check_frozen(obj) rb_check_frozen_inline(obj)
+#endif
+
 /* eval.c */
 int rb_sourceline(void);
 const char *rb_sourcefile(void);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29581)
+++ ChangeLog	(revision 29582)
@@ -1,3 +1,8 @@
+Sun Oct 24 17:05:51 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* include/ruby/intern.h (rb_check_frozen): optimize.
+	  [ruby-core:32878]
+
 Sun Oct 24 15:16:30 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/test/unit.rb (Test::Unit::Mini#run): abort if interrupted.
Index: error.c
===================================================================
--- error.c	(revision 29581)
+++ error.c	(revision 29582)
@@ -1589,10 +1589,11 @@
     rb_raise(rb_eRuntimeError, "can't modify frozen %s", what);
 }
 
+#undef rb_check_frozen
 void
 rb_check_frozen(VALUE obj)
 {
-    if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));
+    rb_check_frozen_internal(obj);
 }
 
 void

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

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