[#19011] open-uri - very easy net access library — Tanaka Akira <akr@...17n.org>

HTTP, FTP に簡単にアクセスするための open-uri というライブラリを作って

19 messages 2002/12/06

[#19066] ruby 1.6.9 preview4 予告 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

41 messages 2002/12/13
[#19079] Re: ruby 1.6.9 preview4 予告 — "Akinori MUSHA" <knu@...> 2002/12/16

At Fri, 13 Dec 2002 15:28:47 +0900,

[#19086] Re: ruby 1.6.9 preview4 予告 — UENO Katsuhiro <unnie@...> 2002/12/17

うえのです。

[#19087] Re: ruby 1.6.9 preview4 予告 — matz@... (Yukihiro Matsumoto) 2002/12/17

まつもと ゆきひろです

[#19083] Re: [ruby-cvs] ruby: * file.c (utimbuf): need to define for VC++. — WATANABE Hirofumi <eban@...>

わたなべです。

11 messages 2002/12/16

[#19127] Re: 1.6.8-preview4 build failed (on Vine Linux 2.1.5) (PR#373) — nobu.nakada@...

なかだです。

16 messages 2002/12/19
[#19129] Re: 1.6.8-preview4 build failed (on Vine Linux 2.1.5) (PR#373) — WATANABE Hirofumi <eban@...> 2002/12/19

わたなべです。

[#19198] ruby-1.8.0 / yield(nil)とyield()のちがい — m_seki@...

38 messages 2002/12/25
[#19209] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2002/12/27

まつもと ゆきひろです

[#19218] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — m_seki@... 2002/12/27

[#19219] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2002/12/27

まつもと ゆきひろです

[#19264] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19266] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041383157.631472.21307.nullmailer@picachu.netlab.jp>,

[#19271] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19272] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041394108.920587.21729.nullmailer@picachu.netlab.jp>,

[#19276] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — matz@... (Yukihiro Matsumoto) 2003/01/01

まつもと ゆきひろです

[#19278] Re: ruby-1.8.0 / yield(nil)とyield()のちがい — Tanaka Akira <akr@...17n.org> 2003/01/01

In article <1041420724.492653.22355.nullmailer@picachu.netlab.jp>,

[ruby-dev:19253] Re: CRLF (here document)

From: nobu.nakada@...
Date: 2002-12-30 21:50:18 UTC
List: ruby-dev #19253
なかだです。

At Tue, 31 Dec 2002 03:24:37 +0900,
WATANABE Hirofumi wrote:
> > > > > これだと、" __END__\n"がエラーになりません。
> > > > 
> > > > じゃ、1.6.8も同じようにまずいっすね。
> > > 
> > > あ、うそうそ。結局Ruby 1.8.0で試してました。
> > 
> > なぜか1.6.8はちゃんと通りますね。あ、nextc()の中で\rをスキップ
> > する前に見てるからか。てことは#{}を改造したときにミスったか。
> 
> ということは
>   % ruby-1.6.8 -ve 'eval " __END__\n"'
>   ruby 1.6.8 (2002-12-24) [i386-linux]
>   -e:1: undefined local variable or method `__END__' for #<Object:0x40237ce0> (NameError)
> とエラーになるのは意図してなかった?

いや、その__END__は行頭から始まってるわけではないので、エラーに
なるのが正しいと思います。ミスったのは、nextc()では'\r'をスキッ
プするのにpushback()ではそれを考慮しない、というのを見落とした
というあたりです。

> > ついでに余分な条件判断をちょっと削ってみたバージョン。
> 
> すみません。このメールを見る前に元のコードのなるべく活かして
> commitしちゃいました。

全然本質的なとこではないので、とくに入れる必要はないかも。

それよりも、改行コード絡みのバグがもう一つありました。

$ cat -e a.rb
p <<END^M$
foo^M$
END^M$
p <<'END'^M$
bar^M$
END^M$

$ ruby -v a.rb
ruby 1.8.0 (2002-12-31) [i686-linux]
"foo\n"
"bar\r\n"


Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.238
diff -u -2 -p -r1.238 parse.y
--- parse.y	30 Dec 2002 18:19:07 -0000	1.238
+++ parse.y	30 Dec 2002 21:10:37 -0000
@@ -3119,7 +3119,7 @@ here_document(here)
 {
     int c, func, indent = 0;
-    char *eos;
+    char *eos, *p, *pend;
     long len;
-    VALUE str = 0, line;
+    VALUE str = 0;
 
     eos = RSTRING(here->nd_lit)->ptr;
@@ -3141,9 +3141,22 @@ here_document(here)
     if (!(func & STR_FUNC_EXPAND)) {
 	do {
-	    line = lex_lastline;
+	    p = RSTRING(lex_lastline)->ptr;
+	    pend = lex_pend;
+	    if (pend > p) {
+		switch (pend[-1]) {
+		  case '\n':
+		    if (--pend == p || pend[-1] != '\r') {
+			pend++;
+			break;
+		    }
+		  case '\r':
+		    --pend;
+		}
+	    }
 	    if (str)
-		rb_str_cat(str, RSTRING(line)->ptr, RSTRING(line)->len);
+		rb_str_cat(str, p, pend - p);
 	    else
-		str = rb_str_new(RSTRING(line)->ptr, RSTRING(line)->len);
+		str = rb_str_new(p, pend - p);
+	    if (pend < lex_pend) rb_str_cat(str, "\n", 1);
 	    lex_p = lex_pend;
 	    if (nextc() == -1) {


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

In This Thread