summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defs/id.def10
-rw-r--r--object.c33
2 files changed, 24 insertions, 19 deletions
diff --git a/defs/id.def b/defs/id.def
index 53ed377..90d2e84 100644
--- a/defs/id.def
+++ b/defs/id.def
@@ -26,6 +26,16 @@ firstline, predefined = __LINE__+1, %[\
initialize_copy
initialize_clone
initialize_dup
+ to_int
+ to_ary
+ to_str
+ to_sym
+ to_hash
+ to_proc
+ to_io
+ to_a
+ to_s
+
_ UScore
"/*NULL*/" NULL
empty?
diff --git a/object.c b/object.c
index 6e0ca74..4f360a7 100644
--- a/object.c
+++ b/object.c
@@ -2545,20 +2545,21 @@ rb_mod_singleton_p(VALUE klass)
return Qfalse;
}
-static struct conv_method_tbl {
- const char *method;
+static const struct conv_method_tbl {
+ const char method[8];
ID id;
} conv_method_names[] = {
- {"to_int", 0},
- {"to_ary", 0},
- {"to_str", 0},
- {"to_sym", 0},
- {"to_hash", 0},
- {"to_proc", 0},
- {"to_io", 0},
- {"to_a", 0},
- {"to_s", 0},
- {NULL, 0}
+#define M(n) {"to_"#n, idTo_##n}
+ M(int),
+ M(ary),
+ M(str),
+ M(sym),
+ M(hash),
+ M(proc),
+ M(io),
+ M(a),
+ M(s),
+#undef M
};
#define IMPLICIT_CONVERSIONS 7
@@ -2569,7 +2570,7 @@ convert_type(VALUE val, const char *tname, const char *method, int raise)
int i;
VALUE r;
- for (i=0; conv_method_names[i].method; i++) {
+ for (i=0; i < numberof(conv_method_names); i++) {
if (conv_method_names[i].method[0] == method[0] &&
strcmp(conv_method_names[i].method, method) == 0) {
m = conv_method_names[i].id;
@@ -3225,8 +3226,6 @@ rb_f_hash(VALUE obj, VALUE arg)
void
Init_Object(void)
{
- int i;
-
Init_class_hierarchy();
#if 0
@@ -3439,8 +3438,4 @@ Init_Object(void)
* An alias of +false+
*/
rb_define_global_const("FALSE", Qfalse);
-
- for (i=0; conv_method_names[i].method; i++) {
- conv_method_names[i].id = rb_intern(conv_method_names[i].method);
- }
}