summaryrefslogtreecommitdiff
path: root/struct.c
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-25 14:46:28 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-25 14:46:28 +0000
commit3a724e086af6a6a8846da1f194cfb12c1977573b (patch)
treed1da4b8bde7e01e4dcc21d039ae1764e359aed99 /struct.c
parent0a84a18ef486c13ae75d2272e2e3d4a23e4634ce (diff)
merges r24513,r24514 and r24515 from trunk into ruby_1_9_1.
-- * class.c (rb_define_class_id_under, rb_define_module_id_under): new functions to define a nested class/module with non-ascii name. * struct.c (make_struct): use name with encoding. * struct.c (inspect_struct): ditto. [ruby-core:24849] -- * test/ruby/test_marshal.rb (test_class_nonascii): test for non-ascii name class. -- * class.c (rb_define_module_id_under): fix the name. * class.c (rb_define_module_under): fix for prevvious changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@25479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'struct.c')
-rw-r--r--struct.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/struct.c b/struct.c
index bda3cde409..3d876bb216 100644
--- a/struct.c
+++ b/struct.c
@@ -191,7 +191,7 @@ make_struct(VALUE name, VALUE members, VALUE klass)
rb_warn("redefining constant Struct::%s", StringValuePtr(name));
rb_mod_remove_const(klass, ID2SYM(id));
}
- nstr = rb_define_class_under(klass, rb_id2name(id), klass);
+ nstr = rb_define_class_id_under(klass, id, klass);
}
rb_iv_set(nstr, "__members__", members);
@@ -488,21 +488,19 @@ rb_struct_each_pair(VALUE s)
static VALUE
inspect_struct(VALUE s, VALUE dummy, int recur)
{
- const char *cname = rb_class2name(rb_obj_class(s));
- VALUE str, members;
+ VALUE cname = rb_class_name(rb_obj_class(s));
+ VALUE members, str = rb_str_new2("#<struct ");
long i;
+ char first = RSTRING_PTR(cname)[0];
+ if (recur || first != '#') {
+ rb_str_append(str, cname);
+ }
if (recur) {
- return rb_sprintf("#<struct %s:...>", cname);
+ return rb_str_cat2(str, ":...>");
}
members = rb_struct_members(s);
- if (cname[0] == '#') {
- str = rb_str_new2("#<struct ");
- }
- else {
- str = rb_sprintf("#<struct %s ", cname);
- }
for (i=0; i<RSTRUCT_LEN(s); i++) {
VALUE slot;
ID id;
@@ -510,6 +508,9 @@ inspect_struct(VALUE s, VALUE dummy, int recur)
if (i > 0) {
rb_str_cat2(str, ", ");
}
+ else if (first != '#') {
+ rb_str_cat2(str, " ");
+ }
slot = RARRAY_PTR(members)[i];
id = SYM2ID(slot);
if (rb_is_local_id(id) || rb_is_const_id(id)) {