From 284f4c8431b140898ee9ff5711cce0e41e0c2c39 Mon Sep 17 00:00:00 2001 From: matz Date: Sun, 12 Oct 2008 22:52:01 +0000 Subject: * transcode.c (str_transcode0): String#encode() with no encoding specified transcode the string into Encoding.default_internal. inspired by [ruby-core:19298]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19764 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- transcode.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'transcode.c') diff --git a/transcode.c b/transcode.c index cd1f27cf05..35acdca27a 100644 --- a/transcode.c +++ b/transcode.c @@ -2448,12 +2448,20 @@ str_transcode0(int argc, VALUE *argv, VALUE *self, int ecflags, VALUE ecopts) const char *sname, *dname; int dencidx; - if (argc < 1 || argc > 2) { - rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc); + if (argc <0 || argc > 2) { + rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc); } - arg1 = argv[0]; - arg2 = argc==1 ? Qnil : argv[1]; + if (argc == 0) { + arg1 = rb_enc_default_internal(); + if (NIL_P(arg1)) { + rb_raise(rb_eArgError, "Encoding.default_internal is not specified"); + } + } + else { + arg1 = argv[0]; + } + arg2 = argc<=1 ? Qnil : argv[1]; dencidx = str_transcode_enc_args(str, &arg1, &arg2, &sname, &senc, &dname, &denc); if ((ecflags & (ECONV_UNIVERSAL_NEWLINE_DECORATOR| @@ -2568,6 +2576,7 @@ str_encode_bang(int argc, VALUE *argv, VALUE str) * call-seq: * str.encode(encoding [, options] ) => str * str.encode(dst_encoding, src_encoding [, options] ) => str + * str.encode([options]) => str * * The first form returns a copy of str transcoded * to encoding +encoding+. @@ -2575,6 +2584,8 @@ str_encode_bang(int argc, VALUE *argv, VALUE str) * from src_encoding to dst_encoding. * The options Hash gives details for conversion. Details * to be added. + * The last form returns a copy of str transcoded to + * Encoding.default_internal. */ static VALUE -- cgit v1.2.3