From: Nobuyoshi Nakada Date: 2008-01-18T23:01:05+09:00 Subject: [ruby-dev:33172] Re: default script encoding and -K option なかだです。 At Fri, 18 Jan 2008 14:34:23 +0900, Yukihiro Matsumoto wrote in [ruby-dev:33168]: > |というか、ライブラリはおろか、メインスクリプトにすら-Kが効か > |なくなっているのですが、これはわざとですか? > |(r15099のまつもとさんのcommit) > > わざとじゃないです。どうやって直すかはともかく。 こんな感じですか。 Index: parse.y =================================================================== --- parse.y (revision 15114) +++ parse.y (working copy) @@ -4765,5 +4765,4 @@ rb_parser_compile_string(volatile VALUE lex_gets_ptr = 0; lex_input = s; - parser->enc = rb_enc_get(s); lex_pbeg = lex_p = lex_pend = 0; compile_for_eval = rb_parse_in_eval(); @@ -5958,4 +5957,5 @@ parser_prepare(struct parser_params *par } pushback(c); + parser->enc = rb_enc_get(lex_lastline); } @@ -9690,7 +9690,4 @@ ripper_initialize(int argc, VALUE *argv, } parser_initialize(parser); - if (parser->parser_lex_gets == lex_get_str) { - parser->enc = rb_enc_get(src); - } parser->parser_ruby_sourcefile_string = fname2; Index: ruby.c =================================================================== --- ruby.c (revision 15114) +++ ruby.c (working copy) @@ -1039,4 +1039,5 @@ load_file(VALUE parser, const char *fnam int line_start = 1; NODE *tree = 0; + rb_encoding *enc; if (!fname) @@ -1152,8 +1153,14 @@ load_file(VALUE parser, const char *fnam } if (opt->enc_index >= 0) { - rb_enc_associate_index(f, opt->enc_index); + enc = rb_enc_from_index(opt->enc_index); } else if (f == rb_stdin) { - rb_enc_associate(f, rb_locale_encoding()); + enc = rb_locale_encoding(); + } + else { + enc = 0; + } + if (enc) { + rb_funcall(f, rb_intern("set_encoding"), 1, rb_enc_from_encoding(enc)); } tree = (NODE *)rb_parser_compile_file(parser, fname, f, line_start); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦