[#18186] [req] Marshal — keiju@... (Keiju ISHITSUKA)

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

14 messages 2002/09/05
[#18190] Re: [req] Marshal — matz@... (Yukihiro Matsumoto) 2002/09/05

まつもと ゆきひろです

[#18229] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

22 messages 2002/09/09
[#18230] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — nobu.nakada@... 2002/09/09

なかだです。

[#18231] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

こんにちは、なかむら(う)です。

[#18232] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — nobu.nakada@... 2002/09/09

なかだです。

[#18233] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

こんにちは、なかむら(う)です。

[#18234] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — WATANABE Hirofumi <eban@...> 2002/09/09

わたなべです。

[#18236] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

こんにちは、なかむら(う)です。

[#18238] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — WATANABE Hirofumi <eban@...> 2002/09/09

わたなべです。

[#18241] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

こんにちは、なかむら(う)です。

[#18285] rubicon on EWS4800 — Koji Arai <JCA02266@...>

新井です。

59 messages 2002/09/13
[#18322] Re: rubicon on EWS4800 — Koji Arai <JCA02266@...> 2002/09/21

新井です。

[#18333] Re: rubicon on EWS4800 — kjana@...4lab.to (YANAGAWA Kazuhisa) 2002/09/21

In message <20020921.152641.11483667.JCA02266@nifty.ne.jp>

[#18336] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18337] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211605.g8LG52p04564@sharui.nakada.kanuma.tochigi.jp>,

[#18338] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18341] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211628.g8LGSxp04786@sharui.nakada.kanuma.tochigi.jp>,

[#18342] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18343] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211739.g8LHdKp05495@sharui.nakada.kanuma.tochigi.jp>,

[#18345] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/22

なかだです。

[#18349] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/22

In article <200209220415.g8M4Fkp24392@sharui.nakada.kanuma.tochigi.jp>,

[#18374] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — WATANABE Hirofumi <eban@...>

わたなべです。

20 messages 2002/09/25
[#18376] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — matz@... (Yukihiro Matsumoto) 2002/09/25

まつもと ゆきひろです

[#18377] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — nobu.nakada@... 2002/09/25

なかだです。

[#18378] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — WATANABE Hirofumi <eban@...> 2002/09/25

わたなべです。

[ruby-dev:18197] VALUEs in yacc stack (Re: autoload patch for ruby-1.7)

From: Minero Aoki <aamine@...>
Date: 2002-09-05 21:33:27 UTC
List: ruby-dev #18197
あおきです。
Subject変え & スレッド切ります。

  In mail "[ruby-dev:18195] Re: autoload patch for ruby-1.7"
    nobu.nakada@nifty.ne.jp wrote:

> なかだです。

> > あ、すみません。話を混ぜてしまったのですが、これは malloc で
> > yacc のスタックをとる場合です。
> > 
> > そのときは VALUE がヒープに置かれるので、それをカバーするために
> > スイープフェイズに入ってから NODE は無条件にマークしていますよね。
> > でも String は NODE ではないのでそのままスイープされてしまうと
> > 思うのです。
> 
> うーん、そうかも知れません。
> 
> > つまり malloc な yacc のことを考えるなら、セマンティックスタック
> > には (NODE 以外の (ポインタである VALUE)) を入れてはいけないのでは
> > ないでしょうか。具体的に問題になるのはこの三つです。
> > 
> >   %token <val>  tINTEGER tFLOAT tSTRING_CONTENT
> 
> NODE_LITやNODE_STRに入れて返すようにするってことですね。むしろ、

です。


> rb_gc_mark_parser()を導入するなら、セマンティックスタックもマー
> クするようにしたいところですが。

できればそれが一番いいですけど……。インターフェイスが決まって
ないので難しいですよね。中田さんの [ruby-dev:16215] では
変数の名前が違うとまずいし、その前の malloc 差し替えるのは
ちょっと恐い感じ。

コンパイル中は rb_newobj() にフックをかけてレジストリに
入れておくのはどうだろう。ああでも生成全部フックするのは
いくらなんでも遅いか。

あ、

    void *yacc_stack = 0;
    %%
    program: DUMMY
	      {
		  yacc_stack = &$1;
	      }

とするのはどうでしょう?……長さがわからないからだめか。惜しい。

やっぱり全部 NODE を付けるのがシンプルでよさそうです。
とりあえずその方向でパッチ添付。
-------------------------------------------------------------------
青木峰郎


Index: parse.y
===================================================================
RCS file: /home/aamine/cvs/ruby/ruby/parse.y,v
retrieving revision 1.209
diff -u -p -r1.209 parse.y
--- parse.y	5 Sep 2002 20:00:52 -0000	1.209
+++ parse.y	5 Sep 2002 21:32:45 -0000
@@ -224,14 +224,14 @@ static void top_local_setup();
 	k__FILE__
 
 %token <id>   tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR
-%token <val>  tINTEGER tFLOAT tSTRING_CONTENT
+%token <node> tINTEGER tFLOAT tSTRING_CONTENT
 %token <node> tNTH_REF tBACK_REF
 %token <num>  tREGEXP_END
 
 %type <node> singleton strings string string1 xstring regexp
 %type <node> string_contents xstring_contents string_content
 %type <node> words qwords word_list qword_list word
-%type <val>  literal numeric
+%type <node> literal numeric
 %type <node> bodystmt compstmt stmts stmt expr arg primary command command_call method_call
 %type <node> expr_value arg_value primary_value
 %type <node> if_tail opt_else case_body cases opt_rescue exc_list exc_var opt_ensure
@@ -1282,9 +1282,6 @@ mrhs_basic	: args ',' arg_value
 		;
 
 primary		: literal
-		    {
-			$$ = NEW_LIT($1);
-		    }
 		| strings
 		| xstring
 		| regexp
@@ -1738,7 +1735,7 @@ opt_ensure	: kENSURE compstmt
 literal		: numeric
 		| symbol
 		    {
-			$$ = ID2SYM($1);
+			$$ = NEW_LIT(ID2SYM($1));
 		    }
 		;
 
@@ -1878,7 +1875,7 @@ qword_list	: /* none */
 		    }
 		| qword_list tSTRING_CONTENT ' '
 		    {
-			$$ = list_append($1, NEW_STR($2));
+			$$ = list_append($1, $2);
 		    }
 		;
 
@@ -1904,7 +1901,7 @@ xstring_contents: /* none */
 		    }
 		;
 
-string_content	: tSTRING_CONTENT {$$ = NEW_STR($1);}
+string_content	: tSTRING_CONTENT
 		| tSTRING_DVAR
 		    {
 			$<num>1 = lex_strnest;
@@ -2917,7 +2914,7 @@ parse_string(quote)
     }
 
     tokfix();
-    yylval.val = rb_str_new(tok(), toklen());
+    yylval.node = NEW_STR(rb_str_new(tok(), toklen()));
     return tSTRING_CONTENT;
 }
 
@@ -3070,7 +3067,7 @@ here_document(here)
 	    pushback(c);
 	    if ((c = tokadd_string(func, '\n', 0)) == -1) goto error;
 	    if (c != '\n') {
-		yylval.val = rb_str_new(tok(), toklen());
+		yylval.node = NEW_STR(rb_str_new(tok(), toklen()));
 		return tSTRING_CONTENT;
 	    }
 	    tokadd(nextc());
@@ -3080,7 +3077,7 @@ here_document(here)
     }
     heredoc_restore(lex_strterm);
     lex_strterm = NEW_STRTERM(-1, 0, 0);
-    yylval.val = str;
+    yylval.node = NEW_STR(str);
     return tSTRING_CONTENT;
 }
 
@@ -3386,8 +3383,8 @@ yylex()
 	    c = read_escape();
 	}
 	c &= 0xff;
-	yylval.val = INT2FIX(c);
 	lex_state = EXPR_END;
+	yylval.node = NEW_LIT(INT2FIX(c));
 	return tINTEGER;
 
       case '&':
@@ -3564,7 +3561,7 @@ yylex()
 			yyerror("numeric literal without digits");
 		    }
 		    else if (nondigit) goto trailing_uc;
-		    yylval.val = rb_cstr_to_inum(tok(), 16, Qfalse);
+		    yylval.node = NEW_LIT(rb_cstr_to_inum(tok(), 16, Qfalse));
 		    return tINTEGER;
 		}
 		if (c == 'b' || c == 'B') {
@@ -3588,7 +3585,7 @@ yylex()
 			yyerror("numeric literal without digits");
 		    }
 		    else if (nondigit) goto trailing_uc;
-		    yylval.val = rb_cstr_to_inum(tok(), 2, Qfalse);
+		    yylval.node = NEW_LIT(rb_cstr_to_inum(tok(), 2, Qfalse));
 		    return tINTEGER;
 		}
 		if (c == 'd' || c == 'D') {
@@ -3612,7 +3609,7 @@ yylex()
 			yyerror("numeric literal without digits");
 		    }
 		    else if (nondigit) goto trailing_uc;
-		    yylval.val = rb_cstr_to_inum(tok(), 10, Qfalse);
+		    yylval.node = NEW_LIT(rb_cstr_to_inum(tok(), 10, Qfalse));
 		    return tINTEGER;
 		}
 		if (c == '_') {
@@ -3643,7 +3640,7 @@ yylex()
 			pushback(c);
 			tokfix();
 			if (nondigit) goto trailing_uc;
-			yylval.val = rb_cstr_to_inum(tok(), 8, Qfalse);
+			yylval.node = NEW_LIT(rb_cstr_to_inum(tok(), 8, Qfalse));
 			return tINTEGER;
 		    }
 		    if (nondigit) {
@@ -3659,7 +3656,7 @@ yylex()
 		}
 		else {
 		    pushback(c);
-		    yylval.val = INT2FIX(0);
+		    yylval.node = NEW_LIT(INT2FIX(0));
 		    return tINTEGER;
 		}
 	    }
@@ -3738,10 +3735,10 @@ yylex()
 		    rb_warn("Float %s out of range", tok());
 		    errno = 0;
 		}
-		yylval.val = rb_float_new(d);
+		yylval.node = NEW_LIT(rb_float_new(d));
 		return tFLOAT;
 	    }
-	    yylval.val = rb_cstr_to_inum(tok(), 10, Qfalse);
+	    yylval.node = NEW_LIT(rb_cstr_to_inum(tok(), 10, Qfalse));
 	    return tINTEGER;
 	}
 

In This Thread

Prev Next