[#7785] rb2c — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 1999/09/02

[#7845] [Q] irb and SizedQueue — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

14 messages 1999/09/15

[ruby-dev:7846] newline code and __END__, here document

From: nobu.nakada@...
Date: 1999-09-15 14:53:08 UTC
List: ruby-dev #7846
なかだです。

  CP/M(用の ruby ってあるのか?) & DOS のように改行が CR LF のソー
スを LF の環境で使おうとすると、__END__ と here document を認識し
てくれません。\ による継続行では CR LF でもつながってくれるので、
同じになってくれるとありがたいです。

  OS/9 & Mac なソースも使えるようにしようかなとか思ったんですが、
ruby_sourceline の扱いとか、めんどくさくなりそうなんで止めました。
きりないし。というか、DOS なソースも改行コードにたまたま LF が入っ
てるんでうまく行くだけなんですが。


--- dist/parse.y	Fri Aug 13 14:45:09 1999
+++ build/parse.y	Tue Sep 14 15:23:22 1999
@@ -1840,7 +1840,8 @@
 	    ruby_sourceline++;
 	    lex_pbeg = lex_p = RSTRING(v)->ptr;
 	    lex_pend = lex_p + RSTRING(v)->len;
-	    if (strncmp(lex_pbeg, "__END__", 7) == 0 && lex_pbeg[7] == '\n') {
+	    if (strncmp(lex_pbeg, "__END__", 7) == 0 &&
+		(RSTRING(v)->len == 7 || lex_pbeg[7] == '\n' || lex_pbeg[7] == '\r')) {
 		ruby__end__seen = 1;
 		lex_lastline = 0;
 		return -1;
@@ -1853,6 +1854,10 @@
 	}
     }
     c = (unsigned char)*lex_p++;
+    if (c == '\r' && lex_p <= lex_pend && *lex_p == '\n') {
+	lex_p++;
+	c = '\n';
+    }
 
     return c;
 }
@@ -3019,10 +3024,6 @@
 
       case '\\':
 	c = nextc();
-	if (c == '\r') {
-	    c = nextc();
-	    if (c != '\n') pushback(c);
-	}
 	if (c == '\n') {
 	    space_seen = 1;
 	    goto retry; /* skip \\n */

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦

In This Thread

Prev Next