summaryrefslogtreecommitdiff
path: root/include/ruby
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-24 08:05:55 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-24 08:05:55 +0000
commit58d3597e743967bb4c486b108e7dcd0db5c3efca (patch)
tree7b4d73bd0d9206ffdd2c658d926ddb760d285b3c /include/ruby
parent5383964f98659ea0cd371d77b9ed97f46702e591 (diff)
* 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
Diffstat (limited to 'include/ruby')
-rw-r--r--include/ruby/intern.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index 3f6f4a2743..b18a1f542b 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -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);