diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-07 08:37:59 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-07 08:37:59 +0000 |
commit | 4d215cd9d3e0c4ea8ba802aa87773d6578c45a15 (patch) | |
tree | 0726d5ac3dbee381503921a9a6016c6dea786115 /object.c | |
parent | 73d2362580ad40c267419a31cc1fd1bf550760c8 (diff) |
2000-03-07
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 47 |
1 files changed, 42 insertions, 5 deletions
@@ -23,6 +23,7 @@ VALUE rb_cData; VALUE rb_cNilClass; VALUE rb_cTrueClass; VALUE rb_cFalseClass; +VALUE rb_cSymbol; VALUE rb_f_sprintf(); VALUE rb_obj_alloc(); @@ -477,6 +478,29 @@ rb_obj_alloc(klass) } static VALUE +sym_type(sym) + VALUE sym; +{ + return rb_cSymbol; +} + +static VALUE +sym_to_i(sym) + VALUE sym; +{ + ID id = SYM2ID(sym); + + return INT2FIX(id); +} + +static VALUE +sym_to_s(sym) + VALUE sym; +{ + return rb_str_new2(rb_id2name(SYM2ID(sym))); +} + +static VALUE rb_mod_clone(module) VALUE module; { @@ -644,12 +668,18 @@ rb_to_id(name) { ID id; - if (TYPE(name) == T_STRING) { + switch (TYPE(name)) { + case T_STRING: return rb_intern(RSTRING(name)->ptr); - } - id = NUM2UINT(name); - if (!rb_id2name(id)) { - rb_raise(rb_eArgError, "%d is not a symbol", id); + case T_FIXNUM: + id = FIX2INT(name); + if (!rb_id2name(id)) { + rb_raise(rb_eArgError, "%d is not a symbol", id); + } + break; + case T_SYMBOL: + id = SYM2ID(name); + break; } return id; } @@ -1069,6 +1099,13 @@ Init_Object() rb_undef_method(CLASS_OF(rb_cNilClass), "new"); rb_define_global_const("NIL", Qnil); + rb_cSymbol = rb_define_class("Symbol", rb_cObject); + rb_undef_method(CLASS_OF(rb_cNilClass), "new"); + rb_define_method(rb_cSymbol, "type", sym_type, 0); + rb_define_method(rb_cSymbol, "to_i", sym_to_i, 0); + rb_define_method(rb_cSymbol, "to_s", sym_to_s, 0); + rb_define_method(rb_cSymbol, "id2name", sym_to_s, 0); + rb_define_method(rb_cModule, "===", rb_mod_eqq, 1); rb_define_method(rb_cModule, "<=>", rb_mod_cmp, 1); rb_define_method(rb_cModule, "<", rb_mod_lt, 1); |