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/