summaryrefslogtreecommitdiff
path: root/symbol.h
diff options
context:
space:
mode:
Diffstat (limited to 'symbol.h')
-rw-r--r--symbol.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/symbol.h b/symbol.h
index d624a46d20..3e14e02bdb 100644
--- a/symbol.h
+++ b/symbol.h
@@ -14,6 +14,15 @@
#include "id.h"
+#define DYNAMIC_ID_P(id) (!(id&ID_STATIC_SYM)&&id>tLAST_OP_ID)
+#define STATIC_ID2SYM(id) (((VALUE)(id)<<RUBY_SPECIAL_SHIFT)|SYMBOL_FLAG)
+
+#ifdef __GNUC__
+#define rb_id2sym(id) \
+ __extension__(__builtin_constant_p(id) && !DYNAMIC_ID_P(id) ? \
+ STATIC_ID2SYM(id) : rb_id2sym(id))
+#endif
+
struct RSymbol {
struct RBasic basic;
VALUE fstr;