diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-06-16 04:24:38 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-06-16 04:24:38 +0000 |
commit | 16487ee284f17cfbf6fad9f6b2fedc57f0f37e0a (patch) | |
tree | 0c0aab325ab782ff559d1cfa5df269e786219ee3 /struct.c | |
parent | 83687c4eb47e2bcbe463d097317d068d1dd0b734 (diff) |
baseline
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@243 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -136,11 +136,17 @@ make_struct(name, member, klass) ID id; int i; - id = rb_intern(RSTRING(name)->ptr); - if (!rb_is_const_id(id)) { - NameError("identifier %s needs to be constant", RSTRING(name)->ptr); + if (NIL_P(name)) { + nstr = class_new(klass); + } + else { + char *cname = STR2CSTR(name); + id = rb_intern(cname); + if (!rb_is_const_id(id)) { + NameError("identifier %s needs to be constant", cname); + } + nstr = rb_define_class_under(klass, cname, klass); } - nstr = rb_define_class_under(klass, RSTRING(name)->ptr, klass); rb_iv_set(nstr, "__size__", INT2FIX(RARRAY(member)->len)); rb_iv_set(nstr, "__member__", member); @@ -206,7 +212,6 @@ struct_s_def(argc, argv, klass) VALUE st; rb_scan_args(argc, argv, "1*", &name, &rest); - Check_Type(name, T_STRING); for (i=0; i<rest->len; i++) { ID id = rb_to_id(rest->ptr[i]); rest->ptr[i] = INT2FIX(id); |