* include/ruby/intern.h (rb_check_frozen): optimize.

[ruby-core:32878]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2010-10-24 08:05:55 +00:00
Родитель 5383964f98
Коммит 58d3597e74
3 изменённых файлов: 24 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sun Oct 24 17:05:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/intern.h (rb_check_frozen): optimize.
[ruby-core:32878]
Sun Oct 24 15:16:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/test/unit.rb (Test::Unit::Mini#run): abort if interrupted.

Просмотреть файл

@ -1589,10 +1589,11 @@ rb_error_frozen(const char *what)
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

Просмотреть файл

@ -213,6 +213,23 @@ PRINTF_ARGS(void rb_compile_error_append(const char*, ...), 1, 2);
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);