[ruby-dev:31789] Re: 文字列のinspect

From: Nobuyoshi Nakada <nobu@...>
Date: 2007-09-15 06:10:21 UTC
List: ruby-dev #31789
なかだです。

At Sat, 15 Sep 2007 14:27:14 +0900,
eklerni wrote in [ruby-dev:31787]:
> 1.9で文字列のinspectが文字化けした感じになります。(Windows)

> $ruby -v -Ks -e "print 'るびぃ' , 'るびぃ'.inspect"
> ruby 1.9.0 (2007-09-14 patchlevel 0) [i386-mswin32_80]
> るびぃ"\202\351\202\321\202\241"

encoding pragmaがないとリテラルのエンコーディングはすべて
US-ASCIIになってますね。


Index: parse.y
===================================================================
--- parse.y	(revision 13443)
+++ parse.y	(working copy)
@@ -8687,5 +8790,5 @@ parser_initialize(struct parser_params *
     parser->heap = NULL;
 #endif
-    parser->enc = rb_enc_from_index(0);
+    parser->enc = onigenc_get_default_encoding();
 }
 
Index: ruby.c
===================================================================
--- ruby.c	(revision 13443)
+++ ruby.c	(working copy)
@@ -65,5 +65,5 @@ char *getenv();
 char *ruby_inplace_mode = 0;
 
-static NODE *load_file(VALUE, const char *, int);
+static NODE *load_file(VALUE *, const char *, int);
 static void forbid_setid(const char *);
 
@@ -881,14 +881,14 @@ proc_options(int argc, char **argv)
 
     ruby_init_loadpath();
-    parser = rb_parser_new();
     if (e_script) {
 	require_libraries();
+	parser = rb_parser_new();
 	tree = rb_parser_compile_string(parser, script, e_script, 1);
     }
     else {
 	if (script[0] == '-' && !script[1]) {
 	    forbid_setid("program input from stdin");
 	}
-	tree = load_file(parser, script, 1);
+	tree = load_file(&parser, script, 1);
     }
 
@@ -912,5 +912,5 @@ proc_options(int argc, char **argv)
 
 static NODE *
-load_file(VALUE parser, const char *fname, int script)
+load_file(VALUE *parser, const char *fname, int script)
 {
     extern VALUE rb_stdin;
@@ -1028,6 +1028,7 @@ load_file(VALUE parser, const char *fnam
 	require_libraries();	/* Why here? unnatural */
     }
-    tree = (NODE *)rb_parser_compile_file(parser, fname, f, line_start);
-    if (script && rb_parser_end_seen_p(parser)) {
+    *parser = rb_parser_new();
+    tree = (NODE *)rb_parser_compile_file(*parser, fname, f, line_start);
+    if (script && rb_parser_end_seen_p(*parser)) {
 	rb_define_global_const("DATA", f);
     }
@@ -1041,5 +1042,7 @@ void *
 rb_load_file(const char *fname)
 {
-    return load_file(rb_parser_new(), fname, 0);
+    VALUE parser;
+
+    return load_file(&parser, fname, 0);
 }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread