[#35406] RE: win32ole で excel が終了しない — "Oka Yasushi" <oka@...>

こんにちは、岡といいます。

20 messages 2002/06/19
[#35407] Re: win32ole で excel が終了しない — Takashi Kanai <kanai@...4u.or.jp> 2002/06/19

金井です。

[#35408] Re: win32ole で excel が終了しない — Takashi Kanai <kanai@...4u.or.jp> 2002/06/19

金井です。

[#35412] Re: win32ole で excel が終了しない — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/06/20

なひです。

[#35418] Re: win32ole で excel が終了しない — Takashi Kanai <kanai@...4u.or.jp> 2002/06/20

金井です。

[#35419] Re: win32ole で excel が終了しない — nobu.nakada@... 2002/06/21

なかだです。

[#35480] Re: 1.7 系を使っていますが、5月頃は式展開内のコメントが使えていましたが、今は使えなくなっていますね。 — "井上 浩一" <kyoui32@...>

=1B$B0f>e$G$9!#=1B(B

12 messages 2002/06/28
[#35490] Re: 1.7 系を使っていますが、5月頃は式展開内のコメントが使えていましたが、今は使えなくなっていますね。 — "Inoue" <rubyist@117.ne.jp> 2002/06/28

井上です。

[ruby-list:35498] Re: 1.7 系を使っていますが、5月頃は式展開内のコメントが使えていましたが、今は使えなくなっていますね。

From: nobu.nakada@...
Date: 2002-06-28 09:44:07 UTC
List: ruby-list #35498
なかだです。

At Fri, 28 Jun 2002 16:18:16 +0900,
Inoue wrote:
> これは結構便利でしたが、皆さん、他に良いWEBメールはあるのでしょか?
> 今回は、outlookを使用しました。(これも評判の良くないメールですが、テキスト
> 設定可)

Outlookを使うときはウィルスに注意が必要ですね。しかし、今どき
HTMLメールしか送れないようなものを平気でリリースしてるというの
は、少々理解しがたい神経です。

> パッチを当てたあと、VC6++でコンパイルして、挙動を確かめたところ、
> 以前は正しく動作していましたが、どうやら 式展開+コメント で不具合?(仕様
> の変化)
> が発生しています。
> 私としては、以前の方が意味的にすっきりしていて、覚えることが少ないので良いな
> と思いました。

どちらがすっきりしているかは異論もあるわけですが、やはりネスト
させてましたか。これでどうでしょう。念のため書いときますが、オ
リジナルの、パッチを当てていないparse.yに対して当ててください。


Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.195
diff -u -2 -p -r1.195 parse.y
--- parse.y	27 Jun 2002 17:16:39 -0000	1.195
+++ parse.y	28 Jun 2002 09:35:43 -0000
@@ -102,4 +102,5 @@ static int class_nest = 0;
 static int in_single = 0;
 static int in_def = 0;
+static int in_string = 0;
 static int compile_for_eval = 0;
 static ID cur_mid = 0;
@@ -1948,4 +1949,5 @@ string_content	: tSTRING_CONTENT {$$ = N
 			lex_strterm = 0;
 			lex_state = EXPR_BEG;
+			++in_string;
 		    }
 		  compstmt '}'
@@ -1958,4 +1960,5 @@ string_content	: tSTRING_CONTENT {$$ = N
 			    rb_gc_force_recycle((VALUE)$4);
 			}
+			--in_string;
 		    }
 		;
@@ -2407,4 +2410,5 @@ yycompile(f, line)
     in_single = 0;
     in_def = 0;
+    in_string = 0;
     cur_mid = 0;
 
@@ -2869,5 +2873,5 @@ tokadd_string(func, term, paren)
 	    for (i = 0; i < len; i++) {
 		tokadd(c);
-		c = nextc();
+		if ((c = nextc()) == -1) return c;
 	    }
 	}
@@ -3117,4 +3121,34 @@ double strtod ();
 #endif
 
+static int
+skip_inline_comment(term, oparen, cparen)
+    int term, oparen, cparen;
+{
+    int line = ruby_sourceline;
+    int nest = 0;
+    int c;
+
+    while ((c = nextc()) != -1) {
+	if (!nest && c == term) {
+	    return 0;
+	}
+	else if (oparen && c == oparen) {
+	    ++nest;
+	}
+	else if (cparen && c == cparen) {
+	    if (!nest--) {
+		pushback(c);
+		return 0;
+	    }
+	}
+	else if (ismbchar(c) && (lex_p += mbclen(c) - 1) > lex_pend)
+	    lex_p = lex_pend;
+	}
+    }
+    ruby_sourceline = line;
+    yyerror("unterminated comment");
+    return -1;
+}
+
 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
 
@@ -3163,7 +3197,9 @@ yylex()
 
       case '#':		/* it's a comment */
-	while ((c = nextc()) != '\n') {
-	    if (c == -1)
-		return 0;
+	if (in_string) {
+	    if (skip_inline_comment('\n', '{', '}')) return 0;
+	}
+	else {
+	    lex_p = lex_pend;
 	}
 	/* fall through */


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

In This Thread