aboutsummaryrefslogtreecommitdiffstats
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-13 08:47:57 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-13 08:47:57 +0000
commit9adfb3066db1b78355c810448bf451a10efe4d4a (patch)
tree865cb215281dcde582b2c6c1606d3ad2864ad93a /transcode.c
parent8d4086d77366501d0c04f2b36303d3e7dfd2bcb0 (diff)
downloadruby-9adfb3066db1b78355c810448bf451a10efe4d4a.tar.gz
* transcode.c (econv_inspect): new method.
+ git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/transcode.c b/transcode.c
index 051ac70860..6e7a9368b9 100644
--- a/transcode.c
+++ b/transcode.c
@@ -1396,6 +1396,20 @@ econv_init(int argc, VALUE *argv, VALUE self)
return self;
}
+static VALUE
+econv_inspect(VALUE self)
+{
+ const char *cname = rb_obj_classname(self);
+ rb_trans_t *ts = DATA_PTR(self);
+
+ if (!ts)
+ return rb_sprintf("#<%s: uninitialized>", cname);
+ else
+ return rb_sprintf("#<%s: %s to %s>", cname,
+ ts->elems[0].from,
+ ts->last_tc->transcoder->to_encoding);
+}
+
#define IS_ECONV(obj) (RDATA(obj)->dfree == (RUBY_DATA_FUNC)econv_free)
static rb_trans_t *
@@ -1406,6 +1420,9 @@ check_econv(VALUE self)
rb_raise(rb_eTypeError, "wrong argument type %s (expected Encoding::Converter)",
rb_class2name(CLASS_OF(self)));
}
+ if (!DATA_PTR(self)) {
+ rb_raise(rb_eTypeError, "uninitialized encoding converter");
+ }
return DATA_PTR(self);
}
@@ -1542,6 +1559,7 @@ Init_transcode(void)
rb_cEncodingConverter = rb_define_class_under(rb_cEncoding, "Converter", rb_cData);
rb_define_alloc_func(rb_cEncodingConverter, econv_s_allocate);
rb_define_method(rb_cEncodingConverter, "initialize", econv_init, -1);
+ rb_define_method(rb_cEncodingConverter, "inspect", econv_inspect, 0);
rb_define_method(rb_cEncodingConverter, "primitive_convert", econv_primitive_convert, -1);
rb_define_method(rb_cEncodingConverter, "max_output", econv_max_output, 0);
rb_define_const(rb_cEncodingConverter, "PARTIAL_INPUT", INT2FIX(PARTIAL_INPUT));