えぐち@エスアンドイー です。 >>> In message [ruby-list:16080] Re: Ruby 1.3.7 On Wed, 11 Aug 1999 22:11:19 +0900, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> said: eguchi> えぐち@エスアンドイー です。 ... eguchi> SunOS-4.1.4(JLE) 付属の cc でも同様の問題がありました。 eguchi> 「構造体の初期化は、いかん」といった内容だった気がします。 よぉく観てみると、違う場所(あたらしいとこ)でした。 ---------------------------------- % ident ../ruby/eval.c ../ruby/eval.c: $Author: matz $ $Date: 1999/08/11 07:23:55 $ % make cc -g -I. -I../ruby -I/usr/local/include -c ../ruby/eval.c "../ruby/eval.c", line 2216: no automatic aggregate initialization "../ruby/eval.c", line 2216: operands of = have incompatible types "../ruby/eval.c", line 2854: no automatic aggregate initialization "../ruby/eval.c", line 2854: operands of = have incompatible types "../ruby/eval.c", line 4395: no automatic aggregate initialization "../ruby/eval.c", line 4395: operands of = have incompatible types make: *** [eval.o] Error 1 ---------------------------------- 微妙なところで、自身が今一歩ないのですが、パッチ作りました。 # volatile が必要? えぐち
Index: eval.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp/ruby/eval.c,v retrieving revision 1.1.1.3.2.32 diff -d -u -r1.1.1.3.2.32 eval.c --- eval.c 1999/08/11 07:23:55 1.1.1.3.2.32 +++ eval.c 1999/08/11 14:14:18 @@ -2213,7 +2213,8 @@ case NODE_SCOPE: { - struct FRAME frame = *ruby_frame; + struct FRAME frame; + frame = *ruby_frame; frame.tmp = ruby_frame; ruby_frame = &frame; @@ -2851,12 +2852,13 @@ NODE * volatile node; { int state; - struct FRAME frame = *ruby_frame; + struct FRAME frame; VALUE result; /* OK */ char *file = ruby_sourcefile; int line = ruby_sourceline; TMP_PROTECT; + frame = *ruby_frame; frame.tmp = ruby_frame; ruby_frame = &frame; @@ -4392,14 +4394,16 @@ { if (ruby_block->flags & BLOCK_DYNAMIC) { struct BLOCK * volatile old_block = ruby_block; - struct BLOCK block = *ruby_block; - volatile VALUE cbase = ruby_block->frame.cbase; + struct BLOCK block; + volatile VALUE cbase; /* cbase should be pointed from volatile local variable */ /* to be protected from GC. */ VALUE result; int state; /* copy the block to avoid modifying global data. */ + block = *ruby_block; + cbase = ruby_block->frame.cbase; block.frame.cbase = ruby_frame->cbase; ruby_block = █